Compare commits
7 Commits
es_rev9840
...
v1.0.3
| Author | SHA1 | Date | |
|---|---|---|---|
| 7f4bf09d84 | |||
|
|
ad90e7c135 | ||
| cc3c8af6b4 | |||
| b35ec65577 | |||
| 4482520a86 | |||
| e9afc9ad17 | |||
| 55ab6969ee |
@@ -8,7 +8,8 @@ note
|
|||||||
title: Eiffel Nino Web Server
|
title: Eiffel Nino Web Server
|
||||||
description: Simple HTTPd server written in Eiffel
|
description: Simple HTTPd server written in Eiffel
|
||||||
tags: web, httpd, server
|
tags: web, httpd, server
|
||||||
|
copyright: Javier Velilla, Jocelyn Fiat and Eiffel Software.
|
||||||
license: Eiffel Forum v2
|
license: Eiffel Forum v2
|
||||||
copyright: Javier Velilla, Jocelyn Fiat.
|
link[license]: http://www.eiffel.com/licensing/forum.txt
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,13 +1,4 @@
|
|||||||
Introduction
|
The [Workbook](/doc/workbook.md) lets you discover the EiffelWeb framework.
|
||||||
|
|
||||||
Basic Concepts
|
|
||||||
Generating Plain Text
|
|
||||||
Generation HTML
|
|
||||||
|
|
||||||
Handling Client Request:
|
[Enter the documentation](/doc/workbook.md)
|
||||||
Form Data
|
|
||||||
Request Heders
|
|
||||||
Query Parameters.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -10,11 +10,6 @@
|
|||||||
</option>
|
</option>
|
||||||
<setting name="concurrency" value="thread"/>
|
<setting name="concurrency" value="thread"/>
|
||||||
<library name="base" location="$ISE_LIBRARY\library\base\base-safe.ecf"/>
|
<library name="base" location="$ISE_LIBRARY\library\base\base-safe.ecf"/>
|
||||||
<library name="connector_standalone" location="..\..\library\server\ewsgi\connectors\standalone\standalone-safe.ecf" readonly="false">
|
|
||||||
<option debug="true">
|
|
||||||
<debug name="standalone" enabled="true"/>
|
|
||||||
</option>
|
|
||||||
</library>
|
|
||||||
<library name="conneg" location="..\..\library\network\protocol\content_negotiation\conneg-safe.ecf"/>
|
<library name="conneg" location="..\..\library\network\protocol\content_negotiation\conneg-safe.ecf"/>
|
||||||
<library name="crypto" location="$ISE_LIBRARY\unstable\library\text\encryption\crypto\crypto-safe.ecf" readonly="false"/>
|
<library name="crypto" location="$ISE_LIBRARY\unstable\library\text\encryption\crypto\crypto-safe.ecf" readonly="false"/>
|
||||||
<library name="default_standalone" location="..\..\library\server\wsf\default\standalone-safe.ecf" readonly="false"/>
|
<library name="default_standalone" location="..\..\library\server\wsf\default\standalone-safe.ecf" readonly="false"/>
|
||||||
|
|||||||
@@ -7,7 +7,6 @@
|
|||||||
</option>
|
</option>
|
||||||
<setting name="concurrency" value="thread"/>
|
<setting name="concurrency" value="thread"/>
|
||||||
<library name="base" location="$ISE_LIBRARY\library\base\base-safe.ecf"/>
|
<library name="base" location="$ISE_LIBRARY\library\base\base-safe.ecf"/>
|
||||||
<library name="connector_standalone" location="..\..\library\server\ewsgi\connectors\standalone\standalone-safe.ecf"/>
|
|
||||||
<library name="default_standalone" location="..\..\library\server\wsf\default\standalone-safe.ecf"/>
|
<library name="default_standalone" location="..\..\library\server\wsf\default\standalone-safe.ecf"/>
|
||||||
<library name="http" location="..\..\library\network\protocol\http\http-safe.ecf"/>
|
<library name="http" location="..\..\library\network\protocol\http\http-safe.ecf"/>
|
||||||
<library name="wsf" location="..\..\library\server\wsf\wsf-safe.ecf"/>
|
<library name="wsf" location="..\..\library\server\wsf\wsf-safe.ecf"/>
|
||||||
|
|||||||
@@ -13,11 +13,6 @@
|
|||||||
</option>
|
</option>
|
||||||
<setting name="concurrency" value="thread"/>
|
<setting name="concurrency" value="thread"/>
|
||||||
<library name="base" location="$ISE_LIBRARY\library\base\base-safe.ecf"/>
|
<library name="base" location="$ISE_LIBRARY\library\base\base-safe.ecf"/>
|
||||||
<library name="connector_standalone" location="..\..\library\server\ewsgi\connectors\standalone\standalone-safe.ecf" readonly="false" use_application_options="true">
|
|
||||||
<option>
|
|
||||||
<assertions precondition="true" check="true" invariant="true" supplier_precondition="true"/>
|
|
||||||
</option>
|
|
||||||
</library>
|
|
||||||
<library name="default_standalone" location="..\..\library\server\wsf\default\standalone-safe.ecf" readonly="false" use_application_options="true"/>
|
<library name="default_standalone" location="..\..\library\server\wsf\default\standalone-safe.ecf" readonly="false" use_application_options="true"/>
|
||||||
<library name="encoder" location="..\..\library\text\encoder\encoder-safe.ecf" readonly="false"/>
|
<library name="encoder" location="..\..\library\text\encoder\encoder-safe.ecf" readonly="false"/>
|
||||||
<library name="http" location="..\..\library\network\protocol\http\http-safe.ecf" readonly="false"/>
|
<library name="http" location="..\..\library\network\protocol\http\http-safe.ecf" readonly="false"/>
|
||||||
|
|||||||
@@ -3,13 +3,25 @@ package http_client
|
|||||||
project
|
project
|
||||||
http_client = "http_client-safe.ecf"
|
http_client = "http_client-safe.ecf"
|
||||||
http_client = "http_client.ecf"
|
http_client = "http_client.ecf"
|
||||||
|
libcurl_http_client = "libcurl_http_client-safe.ecf"
|
||||||
|
libcurl_http_client = "libcurl_http_client.ecf"
|
||||||
|
net_http_client = "net_http_client-safe.ecf"
|
||||||
|
net_http_client = "net_http_client.ecf"
|
||||||
|
|
||||||
note
|
note
|
||||||
-- title:
|
title: HTTP client
|
||||||
-- description:
|
description: "[
|
||||||
-- tags:
|
Provides simple routines to perform http requests, and get associated response.
|
||||||
-- license:
|
It has two implementations:
|
||||||
-- copyright:
|
- using Eiffel cURL (i.e libcurl)
|
||||||
-- link[doc]: "Documentation" http://
|
- using EiffelNET (and the EiffelNET SSL extension)
|
||||||
|
]"
|
||||||
|
collection:EWF
|
||||||
|
tags: http,client,network,request,web,curl,EWF
|
||||||
|
copyright: 1984-2016 Eiffel Software and others
|
||||||
|
license: Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)
|
||||||
|
link[license]: http://www.eiffel.com/licensing/forum.txt
|
||||||
|
link[source]: "github" https://github.com/EiffelWebFramework/EWF/tree/master/library/network/http_client
|
||||||
|
link[doc]: "Documentation" https://github.com/EiffelWebFramework/EWF/tree/master/library/network/http_client/README.md
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -5,11 +5,16 @@ project
|
|||||||
conneg = "conneg.ecf"
|
conneg = "conneg.ecf"
|
||||||
|
|
||||||
note
|
note
|
||||||
-- title:
|
title: CONneg Content Negotiation
|
||||||
-- description:
|
description: "[
|
||||||
-- tags:
|
CONneg is a library that provides utilities to select the best repesentation of a resource for a client where there are multiple representations available.
|
||||||
-- license:
|
]"
|
||||||
-- copyright:
|
collection: EWF
|
||||||
-- link[doc]: "Documentation" http://
|
tags: content,accept,conneg,negotiation,EWF,web,request
|
||||||
|
copyright: 2011-2016, Javier Velilla, Jocelyn Fiat, Eiffel Software and others
|
||||||
|
license: Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)
|
||||||
|
link[license]: http://www.eiffel.com/licensing/forum.txt
|
||||||
|
link[source]: "github" https://github.com/EiffelWebFramework/EWF/tree/master/library/network/protocol/content_negotiation
|
||||||
|
link[doc]: "Documentation" https://github.com/EiffelWebFramework/EWF/tree/master/library/network/protocol/content_negotiation/README.md
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -5,11 +5,22 @@ project
|
|||||||
http = "http.ecf"
|
http = "http.ecf"
|
||||||
|
|
||||||
note
|
note
|
||||||
-- title:
|
title: HTTP protocol
|
||||||
-- description:
|
description: "[
|
||||||
-- tags:
|
Collection of interfaces related to HTTP protocol:
|
||||||
-- license:
|
- header
|
||||||
-- copyright:
|
- status codes, request methods
|
||||||
-- link[doc]: "Documentation" http://
|
- content type, media type, mime type.
|
||||||
|
- cookie
|
||||||
|
- date used in web protocol
|
||||||
|
- file extension mime mapping
|
||||||
|
]"
|
||||||
|
collection: EWF
|
||||||
|
tags: http,web,header,status,method,type,mime,cookie
|
||||||
|
license: Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)
|
||||||
|
copyright: 2011-2016, Jocelyn Fiat, Eiffel Software and others
|
||||||
|
link[license]: http://www.eiffel.com/licensing/forum.txt
|
||||||
|
link[source]: "github" https://github.com/EiffelWebFramework/EWF/tree/master/library/network/protocol/http
|
||||||
|
link[doc]: "Documentation" https://github.com/EiffelWebFramework/EWF/tree/master/library/network/protocol/http/README.md
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ feature {NONE} -- Initialization
|
|||||||
do
|
do
|
||||||
set_name (a_name)
|
set_name (a_name)
|
||||||
set_value(a_value)
|
set_value(a_value)
|
||||||
set_max_age (-1)
|
unset_max_age
|
||||||
ensure
|
ensure
|
||||||
name_set: name = a_name
|
name_set: name = a_name
|
||||||
value_set: value = a_value
|
value_set: value = a_value
|
||||||
@@ -101,15 +101,6 @@ feature -- Access
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
include_max_age: BOOLEAN
|
|
||||||
-- Does the Set-Cookie header include Max-Age attribute?
|
|
||||||
--|By default will include both.
|
|
||||||
|
|
||||||
include_expires: BOOLEAN
|
|
||||||
-- Does the Set-Cookie header include Expires attribute?
|
|
||||||
--|By default will include both.
|
|
||||||
|
|
||||||
|
|
||||||
is_valid_rfc1123_date (a_string: READABLE_STRING_8): BOOLEAN
|
is_valid_rfc1123_date (a_string: READABLE_STRING_8): BOOLEAN
|
||||||
-- Is the date represented by `a_string' a valid rfc1123 date?
|
-- Is the date represented by `a_string' a valid rfc1123 date?
|
||||||
local
|
local
|
||||||
@@ -119,10 +110,56 @@ feature -- Access
|
|||||||
Result := not d.has_error and then d.rfc1123_string.same_string (a_string)
|
Result := not d.has_error and then d.rfc1123_string.same_string (a_string)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
feature -- Obsolete query
|
||||||
|
|
||||||
|
include_max_age: BOOLEAN
|
||||||
|
obsolete
|
||||||
|
"Use `max_age > 0' [April-2016]"
|
||||||
|
do
|
||||||
|
Result := max_age > 0
|
||||||
|
end
|
||||||
|
|
||||||
|
include_expires: BOOLEAN
|
||||||
|
obsolete
|
||||||
|
"Use `expires /= Void' [April-2016]"
|
||||||
|
do
|
||||||
|
Result := expiration /= Void
|
||||||
|
end
|
||||||
|
|
||||||
|
feature -- Obsolete element change
|
||||||
|
|
||||||
|
mark_max_age
|
||||||
|
-- Set `max_age > 0'
|
||||||
|
-- Set `expires to void'
|
||||||
|
-- Set-Cookie will include only Max-Age attribute and not Expires.
|
||||||
|
obsolete
|
||||||
|
"Uset `set_max_age' and `unset_*' features to add or remove the attributes from the response header [April-2016]"
|
||||||
|
do
|
||||||
|
max_age := 1
|
||||||
|
expiration := Void
|
||||||
|
ensure
|
||||||
|
max_age_true: include_max_age
|
||||||
|
expire_false: not include_expires
|
||||||
|
end
|
||||||
|
|
||||||
|
mark_expires
|
||||||
|
-- Set `mark_age' to -1.
|
||||||
|
-- Set `expiration to a default date'
|
||||||
|
-- Set-Cookie will include only Expires attribute and not Max_Age.
|
||||||
|
obsolete
|
||||||
|
"Use `set_expiration' and `unset_*' features to add or remove the attribute from the response header [April-2016]"
|
||||||
|
do
|
||||||
|
max_age := -1
|
||||||
|
set_expiration_date (create {DATE_TIME}.make_now_utc)
|
||||||
|
ensure
|
||||||
|
expires_true: include_expires
|
||||||
|
max_age_false: not include_max_age
|
||||||
|
end
|
||||||
|
|
||||||
feature -- Change Element
|
feature -- Change Element
|
||||||
|
|
||||||
set_name (a_name: READABLE_STRING_8)
|
set_name (a_name: READABLE_STRING_8)
|
||||||
-- Set `name' with `a_name'.
|
-- Set `name' to `a_name'.
|
||||||
require
|
require
|
||||||
a_name_not_blank: a_name /= Void and then not a_name.is_whitespace
|
a_name_not_blank: a_name /= Void and then not a_name.is_whitespace
|
||||||
a_name_has_valid_characters: a_name /= Void and then has_valid_characters (a_name)
|
a_name_has_valid_characters: a_name /= Void and then has_valid_characters (a_name)
|
||||||
@@ -133,7 +170,7 @@ feature -- Change Element
|
|||||||
end
|
end
|
||||||
|
|
||||||
set_value (a_value: READABLE_STRING_8)
|
set_value (a_value: READABLE_STRING_8)
|
||||||
-- Set `value' with `a_value'.
|
-- Set `value' to `a_value'.
|
||||||
require
|
require
|
||||||
a_value_has_valid_characters: a_value /= Void and then has_valid_characters (a_value)
|
a_value_has_valid_characters: a_value /= Void and then has_valid_characters (a_value)
|
||||||
do
|
do
|
||||||
@@ -143,7 +180,7 @@ feature -- Change Element
|
|||||||
end
|
end
|
||||||
|
|
||||||
set_expiration (a_date: READABLE_STRING_8)
|
set_expiration (a_date: READABLE_STRING_8)
|
||||||
-- Set `expiration' with `a_date'
|
-- Set `expiration' to RFC1123 date string `a_date'.
|
||||||
require
|
require
|
||||||
rfc1133_date: a_date /= Void and then is_valid_rfc1123_date (a_date)
|
rfc1133_date: a_date /= Void and then is_valid_rfc1123_date (a_date)
|
||||||
do
|
do
|
||||||
@@ -153,7 +190,7 @@ feature -- Change Element
|
|||||||
end
|
end
|
||||||
|
|
||||||
set_expiration_date (a_date: DATE_TIME)
|
set_expiration_date (a_date: DATE_TIME)
|
||||||
-- Set `expiration' with `a_date'
|
-- Set `expiration' to `a_date'.
|
||||||
do
|
do
|
||||||
set_expiration (date_to_rfc1123_http_date_format (a_date))
|
set_expiration (date_to_rfc1123_http_date_format (a_date))
|
||||||
ensure
|
ensure
|
||||||
@@ -161,7 +198,7 @@ feature -- Change Element
|
|||||||
end
|
end
|
||||||
|
|
||||||
set_path (a_path: READABLE_STRING_8)
|
set_path (a_path: READABLE_STRING_8)
|
||||||
-- Set `path' with `a_path'
|
-- Set `path' to `a_path'.
|
||||||
do
|
do
|
||||||
path := a_path
|
path := a_path
|
||||||
ensure
|
ensure
|
||||||
@@ -169,7 +206,7 @@ feature -- Change Element
|
|||||||
end
|
end
|
||||||
|
|
||||||
set_domain (a_domain: READABLE_STRING_8)
|
set_domain (a_domain: READABLE_STRING_8)
|
||||||
-- Set `domain' with `a_domain'
|
-- Set `domain' to `a_domain'.
|
||||||
-- Note: you should avoid using "localhost" as `domain' for local cookies
|
-- Note: you should avoid using "localhost" as `domain' for local cookies
|
||||||
-- since they are not always handled by browser (for instance Chrome)
|
-- since they are not always handled by browser (for instance Chrome)
|
||||||
require
|
require
|
||||||
@@ -181,7 +218,7 @@ feature -- Change Element
|
|||||||
end
|
end
|
||||||
|
|
||||||
set_secure (a_secure: BOOLEAN)
|
set_secure (a_secure: BOOLEAN)
|
||||||
-- Set `secure' with `a_secure'
|
-- Set `secure' to `a_secure'.
|
||||||
do
|
do
|
||||||
secure := a_secure
|
secure := a_secure
|
||||||
ensure
|
ensure
|
||||||
@@ -189,7 +226,7 @@ feature -- Change Element
|
|||||||
end
|
end
|
||||||
|
|
||||||
set_http_only (a_http_only: BOOLEAN)
|
set_http_only (a_http_only: BOOLEAN)
|
||||||
-- Set `http_only' with `a_http_only'
|
-- Set `http_only' to `a_http_only'.
|
||||||
do
|
do
|
||||||
http_only := a_http_only
|
http_only := a_http_only
|
||||||
ensure
|
ensure
|
||||||
@@ -197,48 +234,29 @@ feature -- Change Element
|
|||||||
end
|
end
|
||||||
|
|
||||||
set_max_age (a_max_age: INTEGER)
|
set_max_age (a_max_age: INTEGER)
|
||||||
-- Set `max_age' with `a_max_age'
|
-- Set `max_age' to `a_max_age'.
|
||||||
|
require
|
||||||
|
valid_max_age: a_max_age >= 0
|
||||||
do
|
do
|
||||||
max_age := a_max_age
|
max_age := a_max_age
|
||||||
ensure
|
ensure
|
||||||
max_age_set: max_age = a_max_age
|
max_age_set: max_age = a_max_age
|
||||||
end
|
end
|
||||||
|
|
||||||
|
unset_max_age
|
||||||
mark_max_age
|
-- Set `max_age' to -1.
|
||||||
-- Set `include_max_age' to True.
|
|
||||||
-- Set `include_expires' to False.
|
|
||||||
-- Set-Cookie will include only Max-Age attribute and not Expires.
|
|
||||||
do
|
do
|
||||||
include_max_age := True
|
max_age := -1
|
||||||
include_expires := False
|
|
||||||
ensure
|
ensure
|
||||||
max_age_true: include_max_age
|
max_age_unset: max_age = -1
|
||||||
expire_false: not include_expires
|
|
||||||
end
|
end
|
||||||
|
|
||||||
mark_expires
|
unset_expiration
|
||||||
-- Set `include_expires' to True.
|
-- Set `expiration' to Void.
|
||||||
-- Set `include_max_age' to False
|
|
||||||
-- Set-Cookie will include only Expires attribute and not Max_Age.
|
|
||||||
do
|
do
|
||||||
include_expires := True
|
expiration := Void
|
||||||
include_max_age := False
|
|
||||||
ensure
|
ensure
|
||||||
expires_true: include_expires
|
expiration_void: expiration = Void
|
||||||
max_age_false: not include_max_age
|
|
||||||
end
|
|
||||||
|
|
||||||
set_default_expires_max_age
|
|
||||||
-- Set `include_expires' to False.
|
|
||||||
-- Set `include_max_age' to False
|
|
||||||
-- Set-Cookie will include both Max-Age, Expires attributes.
|
|
||||||
do
|
|
||||||
include_expires := False
|
|
||||||
include_max_age := False
|
|
||||||
ensure
|
|
||||||
expires_false: not include_expires
|
|
||||||
max_age_false: not include_max_age
|
|
||||||
end
|
end
|
||||||
|
|
||||||
feature {NONE} -- Date Utils
|
feature {NONE} -- Date Utils
|
||||||
@@ -270,28 +288,14 @@ feature -- Output
|
|||||||
s.append ("; Path=")
|
s.append ("; Path=")
|
||||||
s.append (l_path)
|
s.append (l_path)
|
||||||
end
|
end
|
||||||
-- Expire
|
|
||||||
if include_expires then
|
|
||||||
if attached expiration as l_expires then
|
|
||||||
s.append ("; Expires=")
|
|
||||||
s.append (l_expires)
|
|
||||||
end
|
|
||||||
-- Max-Age
|
|
||||||
elseif include_max_age then
|
|
||||||
s.append ("; Max-Age=")
|
|
||||||
s.append_integer (max_age)
|
|
||||||
else
|
|
||||||
-- Default
|
|
||||||
check
|
|
||||||
-- By default the attributes include_expires and include_max_age are False.
|
|
||||||
-- Meaning that Expires and Max-Age headers are included in the response.
|
|
||||||
default: (not include_expires) and (not include_max_age)
|
|
||||||
end
|
|
||||||
if attached expiration as l_expires then
|
|
||||||
s.append ("; Expires=")
|
|
||||||
s.append (l_expires)
|
|
||||||
end
|
|
||||||
|
|
||||||
|
-- Expires
|
||||||
|
if attached expiration as l_expires then
|
||||||
|
s.append ("; Expires=")
|
||||||
|
s.append (l_expires)
|
||||||
|
end
|
||||||
|
-- Max-age
|
||||||
|
if max_age >= 0 then
|
||||||
s.append ("; Max-Age=")
|
s.append ("; Max-Age=")
|
||||||
s.append_integer (max_age)
|
s.append_integer (max_age)
|
||||||
end
|
end
|
||||||
@@ -339,7 +343,7 @@ feature {NONE} -- Constants
|
|||||||
end
|
end
|
||||||
|
|
||||||
note
|
note
|
||||||
copyright: "2011-2015, Jocelyn Fiat, Eiffel Software and others"
|
copyright: "2011-2016, Jocelyn Fiat, Eiffel Software and others"
|
||||||
license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"
|
license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"
|
||||||
source: "[
|
source: "[
|
||||||
Eiffel Software
|
Eiffel Software
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ feature -- Test routines
|
|||||||
l_cookie: HTTP_COOKIE
|
l_cookie: HTTP_COOKIE
|
||||||
do
|
do
|
||||||
create l_cookie.make ("user_id", "u12345")
|
create l_cookie.make ("user_id", "u12345")
|
||||||
assert("Expected", l_cookie.header_line.same_string ("Set-Cookie: user_id=u12345; Max-Age=-1"))
|
assert("Expected", l_cookie.header_line.same_string ("Set-Cookie: user_id=u12345"))
|
||||||
end
|
end
|
||||||
|
|
||||||
test_cookie_value_with_illegal_characters
|
test_cookie_value_with_illegal_characters
|
||||||
@@ -42,7 +42,7 @@ feature -- Test routines
|
|||||||
l_cookie: HTTP_COOKIE
|
l_cookie: HTTP_COOKIE
|
||||||
do
|
do
|
||||||
create l_cookie.make ("user_id", "")
|
create l_cookie.make ("user_id", "")
|
||||||
assert("Expected", l_cookie.header_line.same_string ("Set-Cookie: user_id=; Max-Age=-1"))
|
assert("Expected", l_cookie.header_line.same_string ("Set-Cookie: user_id="))
|
||||||
end
|
end
|
||||||
|
|
||||||
test_cookie_full_attributes
|
test_cookie_full_attributes
|
||||||
@@ -55,7 +55,8 @@ feature -- Test routines
|
|||||||
l_cookie.set_path ("/")
|
l_cookie.set_path ("/")
|
||||||
l_cookie.set_secure (True)
|
l_cookie.set_secure (True)
|
||||||
l_cookie.set_http_only (True)
|
l_cookie.set_http_only (True)
|
||||||
assert("Expected", l_cookie.header_line.same_string ("Set-Cookie: user_id=u12345; Domain=www.example.com; Path=/; Expires=Sat, 18 Apr 2015 21:22:05 GMT; Max-Age=-1; Secure; HttpOnly"))
|
l_cookie.set_max_age (1)
|
||||||
|
assert("Expected", l_cookie.header_line.same_string ("Set-Cookie: user_id=u12345; Domain=www.example.com; Path=/; Expires=Sat, 18 Apr 2015 21:22:05 GMT; Max-Age=1; Secure; HttpOnly"))
|
||||||
end
|
end
|
||||||
|
|
||||||
test_cookie_include_expires
|
test_cookie_include_expires
|
||||||
@@ -68,7 +69,6 @@ feature -- Test routines
|
|||||||
l_cookie.set_path ("/")
|
l_cookie.set_path ("/")
|
||||||
l_cookie.set_secure (True)
|
l_cookie.set_secure (True)
|
||||||
l_cookie.set_http_only (True)
|
l_cookie.set_http_only (True)
|
||||||
l_cookie.mark_expires
|
|
||||||
assert("Expected", l_cookie.header_line.same_string ("Set-Cookie: user_id=u12345; Domain=www.example.com; Path=/; Expires=Sat, 18 Apr 2015 21:22:05 GMT; Secure; HttpOnly"))
|
assert("Expected", l_cookie.header_line.same_string ("Set-Cookie: user_id=u12345; Domain=www.example.com; Path=/; Expires=Sat, 18 Apr 2015 21:22:05 GMT; Secure; HttpOnly"))
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -82,8 +82,8 @@ feature -- Test routines
|
|||||||
l_cookie.set_path ("/")
|
l_cookie.set_path ("/")
|
||||||
l_cookie.set_secure (True)
|
l_cookie.set_secure (True)
|
||||||
l_cookie.set_http_only (True)
|
l_cookie.set_http_only (True)
|
||||||
l_cookie.mark_max_age
|
l_cookie.set_max_age (1)
|
||||||
assert("Expected", l_cookie.header_line.same_string ("Set-Cookie: user_id=u12345; Domain=www.example.com; Path=/; Max-Age=-1; Secure; HttpOnly"))
|
assert("Expected", l_cookie.header_line.same_string ("Set-Cookie: user_id=u12345; Domain=www.example.com; Path=/; Expires=Sat, 18 Apr 2015 21:22:05 GMT; Max-Age=1; Secure; HttpOnly"))
|
||||||
end
|
end
|
||||||
|
|
||||||
test_cookie_defaults_and_http_only
|
test_cookie_defaults_and_http_only
|
||||||
@@ -92,7 +92,7 @@ feature -- Test routines
|
|||||||
do
|
do
|
||||||
create l_cookie.make ("user_id", "u12345")
|
create l_cookie.make ("user_id", "u12345")
|
||||||
l_cookie.set_http_only (True)
|
l_cookie.set_http_only (True)
|
||||||
assert("Expected", l_cookie.header_line.same_string ("Set-Cookie: user_id=u12345; Max-Age=-1; HttpOnly"))
|
assert("Expected", l_cookie.header_line.same_string ("Set-Cookie: user_id=u12345; HttpOnly"))
|
||||||
end
|
end
|
||||||
|
|
||||||
test_cookie_defaults_and_secure
|
test_cookie_defaults_and_secure
|
||||||
@@ -101,7 +101,7 @@ feature -- Test routines
|
|||||||
do
|
do
|
||||||
create l_cookie.make ("user_id", "u12345")
|
create l_cookie.make ("user_id", "u12345")
|
||||||
l_cookie.set_secure (True)
|
l_cookie.set_secure (True)
|
||||||
assert("Expected", l_cookie.header_line.same_string ("Set-Cookie: user_id=u12345; Max-Age=-1; Secure"))
|
assert("Expected", l_cookie.header_line.same_string ("Set-Cookie: user_id=u12345; Secure"))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
@@ -111,7 +111,7 @@ feature -- Test routines
|
|||||||
do
|
do
|
||||||
create l_cookie.make ("user_id", "u12345")
|
create l_cookie.make ("user_id", "u12345")
|
||||||
l_cookie.set_domain ("www.example.com")
|
l_cookie.set_domain ("www.example.com")
|
||||||
assert("Expected", l_cookie.header_line.same_string ("Set-Cookie: user_id=u12345; Domain=www.example.com; Max-Age=-1"))
|
assert("Expected", l_cookie.header_line.same_string ("Set-Cookie: user_id=u12345; Domain=www.example.com"))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
@@ -121,7 +121,7 @@ feature -- Test routines
|
|||||||
do
|
do
|
||||||
create l_cookie.make ("user_id", "u12345")
|
create l_cookie.make ("user_id", "u12345")
|
||||||
l_cookie.set_path ("/")
|
l_cookie.set_path ("/")
|
||||||
assert("Expected", l_cookie.header_line.same_string ("Set-Cookie: user_id=u12345; Path=/; Max-Age=-1"))
|
assert("Expected", l_cookie.header_line.same_string ("Set-Cookie: user_id=u12345; Path=/"))
|
||||||
end
|
end
|
||||||
|
|
||||||
test_cookie_default_and_custom_max_age
|
test_cookie_default_and_custom_max_age
|
||||||
@@ -149,6 +149,18 @@ feature -- Test routines
|
|||||||
assert ("Invalid RFC1123", not l_cookie.is_valid_rfc1123_date ("Thuesday, 19 Mar 2015 16:14:03 GMT"))
|
assert ("Invalid RFC1123", not l_cookie.is_valid_rfc1123_date ("Thuesday, 19 Mar 2015 16:14:03 GMT"))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test_cookie_without_max_age_and_expires
|
||||||
|
local
|
||||||
|
l_cookie: HTTP_COOKIE
|
||||||
|
do
|
||||||
|
create l_cookie.make ("user_id", "u12345")
|
||||||
|
l_cookie.set_domain ("www.example.com")
|
||||||
|
l_cookie.set_path ("/")
|
||||||
|
l_cookie.set_secure (True)
|
||||||
|
l_cookie.set_http_only (True)
|
||||||
|
assert("Expected", l_cookie.header_line.same_string ("Set-Cookie: user_id=u12345; Domain=www.example.com; Path=/; Secure; HttpOnly"))
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -5,11 +5,21 @@ project
|
|||||||
notification_email = "notification_email.ecf"
|
notification_email = "notification_email.ecf"
|
||||||
|
|
||||||
note
|
note
|
||||||
-- title:
|
title: Notification Email
|
||||||
-- description:
|
description: "[
|
||||||
-- tags:
|
Abstract interface to send message via various mailers:
|
||||||
-- license:
|
- smtp
|
||||||
-- copyright:
|
- sendmail
|
||||||
-- link[doc]: "Documentation" http://
|
- external script
|
||||||
|
- store on local file
|
||||||
|
- ...
|
||||||
|
]"
|
||||||
|
collection: EWF
|
||||||
|
tags: message,smtp,sendmail,mailer
|
||||||
|
copyright: "2011-2016, Jocelyn Fiat, Javier Velilla, Olivier Ligot, Eiffel Software and others"
|
||||||
|
license: Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)
|
||||||
|
link[license]: http://www.eiffel.com/licensing/forum.txt
|
||||||
|
link[source]: "github" https://github.com/EiffelWebFramework/EWF/tree/master/library/runtime/process/notification_email
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -3,14 +3,17 @@ package openid
|
|||||||
project
|
project
|
||||||
openid = "consumer/openid.ecf"
|
openid = "consumer/openid.ecf"
|
||||||
openid = "consumer/openid-safe.ecf"
|
openid = "consumer/openid-safe.ecf"
|
||||||
demo = "consumer/demo/demo-safe.ecf"
|
|
||||||
|
|
||||||
note
|
note
|
||||||
title: Eiffel OpenID
|
title: Eiffel OpenID
|
||||||
description: OpenID library (for now only consumer)
|
description: OpenID consumer library
|
||||||
tags: openid,security
|
tags: openid,security,web,authentication,sso
|
||||||
license: Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)
|
license: Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)
|
||||||
-- copyright:
|
copyright: 2011-2016, Jocelyn Fiat, Eiffel Software and others
|
||||||
-- link[doc]: "Documentation" http://
|
license: Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)
|
||||||
|
link[license]: http://www.eiffel.com/licensing/forum.txt
|
||||||
|
link[source]: "github" https://github.com/EiffelWebFramework/EWF/tree/master/library/security/http_authorization
|
||||||
|
link[doc]: "Documentation" https://github.com/EiffelWebFramework/EWF/tree/master/library/security/http_authorization/README.md
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -5,11 +5,16 @@ project
|
|||||||
http_authorization = "http_authorization.ecf"
|
http_authorization = "http_authorization.ecf"
|
||||||
|
|
||||||
note
|
note
|
||||||
-- title:
|
title: HTTP Authorization
|
||||||
-- description:
|
description: "[
|
||||||
-- tags:
|
Class to manipulate HTTP 'Authorization' header value.
|
||||||
-- license:
|
]"
|
||||||
-- copyright:
|
collection: EWF
|
||||||
-- link[doc]: "Documentation" http://
|
tags: http,authorization,authentication,web
|
||||||
|
copyright: 2011-2016, Jocelyn Fiat, Eiffel Software and others
|
||||||
|
license: Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)
|
||||||
|
link[license]: http://www.eiffel.com/licensing/forum.txt
|
||||||
|
link[source]: "github" https://github.com/EiffelWebFramework/EWF/tree/master/library/server/authentication/http_authorization
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -3,21 +3,28 @@ package ewsgi
|
|||||||
project
|
project
|
||||||
ewsgi = "ewsgi-safe.ecf"
|
ewsgi = "ewsgi-safe.ecf"
|
||||||
ewsgi = "ewsgi.ecf"
|
ewsgi = "ewsgi.ecf"
|
||||||
ewsgi_spec = "ewsgi_spec-safe.ecf"
|
|
||||||
ewsgi_spec = "ewsgi_spec.ecf"
|
|
||||||
connector_cgi = "connectors/cgi/cgi-safe.ecf"
|
connector_cgi = "connectors/cgi/cgi-safe.ecf"
|
||||||
connector_cgi = "connectors/cgi/cgi.ecf"
|
connector_cgi = "connectors/cgi/cgi.ecf"
|
||||||
connector_libfcgi = "connectors/libfcgi/libfcgi-safe.ecf"
|
connector_libfcgi = "connectors/libfcgi/libfcgi-safe.ecf"
|
||||||
connector_libfcgi = "connectors/libfcgi/libfcgi.ecf"
|
connector_libfcgi = "connectors/libfcgi/libfcgi.ecf"
|
||||||
connector_nino = "connectors/nino/nino-safe.ecf"
|
|
||||||
connector_nino = "connectors/nino/nino.ecf"
|
|
||||||
connector_null = "connectors/null/null-safe.ecf"
|
connector_null = "connectors/null/null-safe.ecf"
|
||||||
connector_null = "connectors/null/null.ecf"
|
connector_null = "connectors/null/null.ecf"
|
||||||
|
connector_standalone = "connectors/standalone/standalone-safe.ecf"
|
||||||
|
connector_standalone = "connectors/standalone/standalone.ecf"
|
||||||
|
httpd = "connectors/standalone/src/httpd/httpd-safe.ecf"
|
||||||
|
httpd = "connectors/standalone/src/httpd/httpd.ecf"
|
||||||
|
|
||||||
note
|
note
|
||||||
title: EWSGI
|
title: EWSGI
|
||||||
description: EWSGI specification, and a few connectors.
|
description: "[
|
||||||
tags: web, httpd, ewf
|
Eiffel Web Server Gateway Interface (EWSGI) specification, and a few connectors.
|
||||||
license: Eiffel Forum v2
|
]"
|
||||||
|
collection: EWF
|
||||||
|
tags: ewsgi,cgi,web,httpd,ewf
|
||||||
|
copyright: 2011-2016, Jocelyn Fiat, Eiffel Software and others
|
||||||
|
license: Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)
|
||||||
|
link[license]: http://www.eiffel.com/licensing/forum.txt
|
||||||
|
link[source]: "github" https://github.com/EiffelWebFramework/EWF/tree/master/library/server/ewsgi
|
||||||
|
link[doc]: "Documentation" https://github.com/EiffelWebFramework/EWF/tree/master/library/server/ewsgi/doc
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
25
library/server/libfcgi/package.iron
Normal file
25
library/server/libfcgi/package.iron
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
package libfcgi
|
||||||
|
|
||||||
|
setup
|
||||||
|
compile_library = Clib
|
||||||
|
|
||||||
|
project
|
||||||
|
libfcgi = "libfcgi-safe.ecf"
|
||||||
|
libfcgi = "libfcgi.ecf"
|
||||||
|
|
||||||
|
note
|
||||||
|
title: Eiffel libfcgi wrapper
|
||||||
|
description: "[
|
||||||
|
Wrapper on modified libfcgi.
|
||||||
|
(modification: added 64 bits support)
|
||||||
|
It brings implementation for FCGI protocol.
|
||||||
|
]"
|
||||||
|
collection: EWF
|
||||||
|
tags: fcgi,libfcgi,cgi,http,web,ewf
|
||||||
|
copyright: 2011-2016, Jocelyn Fiat, Javier Velilla, Eiffel Software and others
|
||||||
|
license: Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)
|
||||||
|
link[license]: http://www.eiffel.com/licensing/forum.txt
|
||||||
|
link[source]: "Github" https://github.com/EiffelWebFramework/EWF/library/server/libfcgi
|
||||||
|
link[doc]: "Documentation" http://eiffelwebframework.github.io/EWF/
|
||||||
|
|
||||||
|
end
|
||||||
@@ -1,3 +1,14 @@
|
|||||||
|
note
|
||||||
|
title: Web Server Foundation
|
||||||
|
description: Core of the Eiffel Web Framework, used to build web server application.
|
||||||
|
tags: ewf,server,httpd,request,connector
|
||||||
|
license: Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)
|
||||||
|
link[license]: https://github.com/EiffelWebFramework/EWF/blob/master/LICENSE
|
||||||
|
link[source]: "Github" https://github.com/EiffelWebFramework/EWF
|
||||||
|
link[doc]: "Documentation" http://eiffelwebframework.github.io/EWF/
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
package wsf
|
package wsf
|
||||||
|
|
||||||
project
|
project
|
||||||
@@ -11,29 +22,35 @@ project
|
|||||||
wsf_router_context = "wsf_router_context.ecf"
|
wsf_router_context = "wsf_router_context.ecf"
|
||||||
wsf_session = "wsf_session-safe.ecf"
|
wsf_session = "wsf_session-safe.ecf"
|
||||||
wsf_session = "wsf_session.ecf"
|
wsf_session = "wsf_session.ecf"
|
||||||
wsf_all = "connector/all-safe.ecf"
|
|
||||||
wsf_cgi = "connector/cgi-safe.ecf"
|
wsf_cgi = "connector/cgi-safe.ecf"
|
||||||
wsf_cgi = "connector/cgi.ecf"
|
wsf_cgi = "connector/cgi.ecf"
|
||||||
wsf_libfcgi = "connector/libfcgi-safe.ecf"
|
wsf_libfcgi = "connector/libfcgi-safe.ecf"
|
||||||
wsf_libfcgi = "connector/libfcgi.ecf"
|
wsf_libfcgi = "connector/libfcgi.ecf"
|
||||||
wsf_nino = "connector/nino-safe.ecf"
|
|
||||||
wsf_nino = "connector/nino.ecf"
|
|
||||||
wsf_openshift = "connector/openshift-safe.ecf"
|
wsf_openshift = "connector/openshift-safe.ecf"
|
||||||
default_cgi = "default/cgi-safe.ecf"
|
default_cgi = "default/cgi-safe.ecf"
|
||||||
default_cgi = "default/cgi.ecf"
|
default_cgi = "default/cgi.ecf"
|
||||||
default_libfcgi = "default/libfcgi-safe.ecf"
|
default_libfcgi = "default/libfcgi-safe.ecf"
|
||||||
default_libfcgi = "default/libfcgi.ecf"
|
default_libfcgi = "default/libfcgi.ecf"
|
||||||
default_nino = "default/nino-safe.ecf"
|
|
||||||
default_nino = "default/nino.ecf"
|
|
||||||
default_openshift = "default/openshift-safe.ecf"
|
default_openshift = "default/openshift-safe.ecf"
|
||||||
|
wsf_standalone = "connector/standalone-safe.ecf"
|
||||||
|
wsf_standalone = "connector/standalone.ecf"
|
||||||
|
default_standalone = "default/standalone-safe.ecf"
|
||||||
|
default_standalone = "default/standalone.ecf"
|
||||||
|
|
||||||
note
|
note
|
||||||
title: Web Server Foundation
|
title: Web Server Foundation
|
||||||
description: Core of the Eiffel Web Framework, used to build web server application.
|
description: "[
|
||||||
tags: ewf,server,httpd,request,connector
|
Core of the Eiffel Web Framework (EWF).
|
||||||
|
Provide the request, response, router, ... interfaces.
|
||||||
|
The foundation to build web server application.
|
||||||
|
]"
|
||||||
|
tags: ewf,server,httpd,request,connector,web
|
||||||
|
collection: EWF
|
||||||
|
copyright: 2011-2016, Jocelyn Fiat, Javier Velilla, Olivier Ligot, Colin Adams, Eiffel Software and others
|
||||||
license: Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)
|
license: Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)
|
||||||
link[license]: https://github.com/EiffelWebFramework/EWF/blob/master/LICENSE
|
link[license]: http://www.eiffel.com/licensing/forum.txt
|
||||||
link[source]: "Github" https://github.com/EiffelWebFramework/EWF
|
link[source]: "Github" https://github.com/EiffelWebFramework/EWF/library/server/wsf
|
||||||
link[doc]: "Documentation" http://eiffelwebframework.github.io/EWF/
|
link[doc]: "Documentation" http://eiffelwebframework.github.io/EWF/
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -62,6 +62,9 @@ feature {NONE} -- Implementation
|
|||||||
a_handler.append_resource (req, res)
|
a_handler.append_resource (req, res)
|
||||||
-- 200 or 204 or 303 or 500 (add support for this?)
|
-- 200 or 204 or 303 or 500 (add support for this?)
|
||||||
-- FIXME: more support, such as includes_response_entity
|
-- FIXME: more support, such as includes_response_entity
|
||||||
|
if not a_handler.response_ok (req) then
|
||||||
|
write_error_response (req, res)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -62,6 +62,9 @@ feature {NONE} -- Implementation
|
|||||||
a_handler.update_resource (req, res)
|
a_handler.update_resource (req, res)
|
||||||
-- 204 or 500 (add support for this?)
|
-- 204 or 500 (add support for this?)
|
||||||
-- FIXME: more support, such as includes_response_entity
|
-- FIXME: more support, such as includes_response_entity
|
||||||
|
if not a_handler.response_ok (req) then
|
||||||
|
write_error_response (req, res)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
26
library/text/encoder/package.iron
Normal file
26
library/text/encoder/package.iron
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
package encoder
|
||||||
|
|
||||||
|
project
|
||||||
|
encoder = "encoder-safe.ecf"
|
||||||
|
encoder = "encoder.ecf"
|
||||||
|
|
||||||
|
note
|
||||||
|
title: Text encoders
|
||||||
|
description: "[
|
||||||
|
Text encoders used in web technologies:
|
||||||
|
- HTML encoder
|
||||||
|
- XML encoder
|
||||||
|
- JSON encoder
|
||||||
|
- UTF8
|
||||||
|
- BASE64
|
||||||
|
]"
|
||||||
|
collection: EWF
|
||||||
|
tags: html,xml,percent encoding,web,json,utf
|
||||||
|
copyright: 2011-2016, Jocelyn Fiat, Eiffel Software and others
|
||||||
|
license: Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)
|
||||||
|
link[license]: http://www.eiffel.com/licensing/forum.txt
|
||||||
|
link[source]: "Github" https://github.com/EiffelWebFramework/EWF/library/text/encoder
|
||||||
|
link[doc]: "Documentation" https://github.com/EiffelWebFramework/EWF/blob/master/library/text/encoder/README.md
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
@@ -61,7 +61,11 @@ feature -- Encoder
|
|||||||
Result.extend (c)
|
Result.extend (c)
|
||||||
when '%"' then Result.append_string (""")
|
when '%"' then Result.append_string (""")
|
||||||
when '&' then Result.append_string ("&")
|
when '&' then Result.append_string ("&")
|
||||||
when '%'' then Result.append_string ("'")
|
when '%'' then Result.append_string ("'")
|
||||||
|
-- The named character reference ' (the apostrophe, U+0027)
|
||||||
|
-- was introduced in XML 1.0 but does not appear in HTML.
|
||||||
|
-- Authors should therefore use ' instead of '
|
||||||
|
-- to work as expected in HTML 4 user agents.
|
||||||
when '<' then Result.append_string ("<")
|
when '<' then Result.append_string ("<")
|
||||||
when '>' then Result.append_string (">")
|
when '>' then Result.append_string (">")
|
||||||
else
|
else
|
||||||
|
|||||||
19
library/text/parser/feed/package.iron
Normal file
19
library/text/parser/feed/package.iron
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
package feed
|
||||||
|
|
||||||
|
project
|
||||||
|
feed = "feed-safe.ecf"
|
||||||
|
feed = "feed.ecf"
|
||||||
|
|
||||||
|
note
|
||||||
|
title: Eiffel FEED parser
|
||||||
|
description: "[
|
||||||
|
RSS2.0 and ATOM feed parser.
|
||||||
|
Feed visitor including HTML generation from FEED Eiffel objects.
|
||||||
|
]"
|
||||||
|
tags: rss,atom,feed,html,generator,parser
|
||||||
|
copyright: 2011-2016, Jocelyn Fiat, Eiffel Software and others
|
||||||
|
license: Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)
|
||||||
|
link[license]: http://www.eiffel.com/licensing/forum.txt
|
||||||
|
link[source]: "github" https://github.com/EiffelWebFramework/EWF/tree/master/library/text/parser/feed
|
||||||
|
|
||||||
|
end
|
||||||
@@ -5,11 +5,20 @@ project
|
|||||||
uri_template = "uri_template.ecf"
|
uri_template = "uri_template.ecf"
|
||||||
|
|
||||||
note
|
note
|
||||||
-- title:
|
title: URI Template
|
||||||
-- description:
|
description: "[
|
||||||
-- tags:
|
Implement URI Template as described at http://tools.ietf.org/rfc/rfc6570.txt
|
||||||
-- license:
|
|
||||||
-- copyright:
|
Support for URI template string expansion
|
||||||
-- link[doc]: "Documentation" http://
|
But also partial URI Template matching
|
||||||
|
]"
|
||||||
|
collection: EWF
|
||||||
|
tags: uri template,router,generator,url
|
||||||
|
copyright: 2011-2016, Jocelyn Fiat, Javier Velilla, Eiffel Software and others
|
||||||
|
license: Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)
|
||||||
|
link[license]: http://www.eiffel.com/licensing/forum.txt
|
||||||
|
link[source]: "github" https://github.com/EiffelWebFramework/EWF/tree/master/library/text/parser/uri_template
|
||||||
|
link[doc]: "Documentation" https://github.com/EiffelWebFramework/EWF/tree/master/library/text/parser/uri_template/README.md
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -7,11 +7,15 @@ project
|
|||||||
note
|
note
|
||||||
title: Error framework
|
title: Error framework
|
||||||
description: "[
|
description: "[
|
||||||
Errors and associated handler, to manage errors and also provides a way to synchronize one or many error handlers.
|
Errors and associated handler, to manage errors and also provides a way to synchronize one or many error handlers.
|
||||||
This is convenient to propagate error from a layer to another without adding unwanted dependencies.
|
This is convenient to propagate error from a layer to another without adding unwanted dependencies.
|
||||||
tags: error
|
]"
|
||||||
|
collection: EWF
|
||||||
|
tags: error,framework
|
||||||
license: Eiffel Forum License v2
|
license: Eiffel Forum License v2
|
||||||
copyright: Jocelyn Fiat, Eiffel Software and others.
|
copyright: Jocelyn Fiat, Eiffel Software and others.
|
||||||
link[license]: http://www.eiffel.com/licensing/forum.txt
|
link[license]: http://www.eiffel.com/licensing/forum.txt
|
||||||
|
link[source]: "github" https://github.com/EiffelWebFramework/EWF/tree/master/library/utility/general/error
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -11,9 +11,9 @@ if "%ECF_TOOL_PATH%" == "" goto SEARCH_ECF_TOOL
|
|||||||
goto START
|
goto START
|
||||||
|
|
||||||
:SEARCH_ECF_TOOL
|
:SEARCH_ECF_TOOL
|
||||||
for %%f in (ecf_tool.exe) do (
|
:: for %%f in (ecf_tool.exe) do (
|
||||||
if exist "%%~dp$PATH:f" set ECF_TOOL_PATH="%%~dp$PATH:f"
|
:: if exist "%%~dp$PATH:f" set ECF_TOOL_PATH="%%~dp$PATH:f"
|
||||||
)
|
:: )
|
||||||
if "%ECF_TOOL_PATH%" == "" goto BUILD_ECF_TOOL
|
if "%ECF_TOOL_PATH%" == "" goto BUILD_ECF_TOOL
|
||||||
echo Using ecf_tool.exe from %ECF_TOOL_PATH%
|
echo Using ecf_tool.exe from %ECF_TOOL_PATH%
|
||||||
goto START
|
goto START
|
||||||
|
|||||||
@@ -147,7 +147,7 @@ set TMP_ECF_TOOL_CMD=%~dp0\bin\ecf_tool.bat
|
|||||||
goto call_ecf_update
|
goto call_ecf_update
|
||||||
|
|
||||||
:call_ecf_update
|
:call_ecf_update
|
||||||
call %TMP_ECF_TOOL_CMD% updater --root %TMP_TARGET_DIR% --force %2 %3 %4 %5 %6 %7 %8 %9 %TMP_TARGET_DIR%\contrib
|
call %TMP_ECF_TOOL_CMD% updater --root %TMP_TARGET_DIR% --include %TMP_TARGET_DIR%\library --include %TMP_TARGET_DIR%\contrib\library --force %TMP_TARGET_DIR%\contrib
|
||||||
|
|
||||||
:end
|
:end
|
||||||
del %TMP_EXCLUDE%
|
del %TMP_EXCLUDE%
|
||||||
|
|||||||
Reference in New Issue
Block a user