{"action":"created","comment":{"url":"https://api.github.com/repos/EiffelWebFramework/EWF/pulls/comments/26755167","id":26755167,"diff_hunk":"@@ -0,0 +1,341 @@\n+note\n+\tdescription: \"[\n+\tThis class represents the value of a HTTP cookie, transferred in a request.\n+\tThe class has features to build an HTTP cookie.\n+\t\t\t\n+\tFollowing a newer RFC standard for Cookies http://tools.ietf.org/html/rfc6265 \n+\t\t\t\n+\tDomain\n+\t* WARNING: Some existing user agents treat an absent Domain attribute as if the Domain attribute were present and contained the current host name.  \n+\t* For example, if example.com returns a Set-Cookie header without a Domain attribute, these user agents will erroneously send the cookie to www.example.com as well.\n+\t\t\t\n+\tMax-Age, Expires\n+\t* If a cookie has both the Max-Age and the Expires attribute, the Max-Age attribute has precedence and controls the expiration date of the cookie. \n+\t* If a cookie has neither the Max-Age nor the Expires attribute, the user agent will retain the cookie until \"the current session is over\" (as defined by the user agent).\n+\t* You will need to call the feature\n+\t\t\t\n+\tHttpOnly, Secure\n+\t* Note that the HttpOnly attribute is independent of the Secure attribute: a cookie can have both the HttpOnly and the Secure attribute.\n+\n+]\"\n+\tdate: \"$Date$\"\n+\trevision: \"$Revision$\"\n+\tEIS: \"name=HTTP Cookie specification\", \"src=http://tools.ietf.org/html/rfc6265\", \"protocol=uri\"\n+class\n+\tHTTP_COOKIE\n+\n+create\n+\tmake\n+\n+feature {NONE} -- Initialization\n+\n+\tmake (a_name: READABLE_STRING_8; a_value: READABLE_STRING_8)\n+\t\t\t-- Create an object instance of cookie with name `a_name' and value `a_value'.\n+\t\trequire\n+\t\t\ta_name_not_blank: a_name /= Void and then not a_name.is_whitespace\n+\t\t\ta_value_not_empty: a_value /= Void and then not a_value.is_empty\n+\t\t\ta_name_has_valid_characters: a_name /= Void and then has_valid_characters (a_name)\n+\t\t\ta_value_has_valid_characters: a_value /= Void and then has_valid_characters (a_value)\n+\t\tdo\n+\t\t\tset_name (a_name)\n+\t\t\tset_value(a_value)\n+\t\t\tset_max_age (-1)\n+\t\tensure\n+\t\t\tname_set: name = a_name\n+\t\t\tvalue_set: value = a_value\n+\t\t\tmax_age_set: max_age < 0\n+\t\tend\n+\n+feature -- Access\n+\n+\tname: STRING_8\n+\t\t-- name of the cookie.\n+\n+\tvalue: STRING_8\n+\t\t-- value of the cookie.\n+\n+\texpiration: detachable STRING_8\n+\t\t-- Value of the Expires attribute.\n+\n+\tpath: detachable STRING_8\n+\t\t-- Value of the Path attribute.\n+\t\t-- Path to which the cookie applies.\n+\t\t--| The path \"/\", specify a cookie that apply to all URLs in your site.\n+\n+\tdomain: detachable STRING_8\n+\t\t-- Value of the Domain attribute.\n+\t\t-- Domain to which the cookies apply.\n+\n+\tsecure: BOOLEAN\n+\t\t-- Value of the Secure attribute.\n+\t\t-- By default False.\n+\t\t--| Indicate if the cookie should only be sent over secured(encrypted connections, for example SSL).\n+\n+\thttp_only: BOOLEAN\n+\t\t-- Value of the http_only attribute.\n+\t\t-- By default false.\n+\t\t--| Limits the scope of the cookie to HTTP requests.\n+\n+\tmax_age: INTEGER\n+\t\t-- Value of the Max-Age attribute.\n+\t\t--| How much time in seconds should elapsed before the cookie expires.\n+\t\t--| By default max_age < 0 indicate a cookie will last only for the current user-agent (Browser, etc) session.\n+\t\t--|\tA value of 0 instructs the user-agent to delete the cookie.\n+\n+\thas_valid_characters (a_name: READABLE_STRING_8):BOOLEAN\n+\t\t\t-- Has `a_name' valid characters for cookies?\n+\t\tlocal\n+\t\t\tl_iterator: STRING_ITERATION_CURSOR\n+\t\t\tl_found: BOOLEAN\n+\t\tdo\n+\t\t\tcreate l_iterator.make (a_name)\n+\t\t\tResult := True\n+\t\t\tacross\n+\t\t\t\tl_iterator as ic\n+\t\t\tuntil\n+\t\t\t\tl_found\n+\t\t\tloop\n+\t\t\t\tif not is_valid_character (ic.item.natural_32_code) then\n+\t\t\t\t\tResult := False\n+\t\t\t\t\tl_found := True\n+\t\t\t\tend\n+\t\t\tend\n+\t\tend\n+\n+\tinclude_max_age: BOOLEAN\n+\t\t-- Does the Set-Cookie header include Max-Age attribute?\n+\t\t--|By default will include both.\n+\n+\tinclude_expires: BOOLEAN\n+\t\t-- Does the Set-Cookie header include Expires attribute?\n+\t\t--|By default will include both.\t\n+\n+feature -- Change Element\n+\n+\tset_name (a_name: READABLE_STRING_8)\n+\t\t\t-- Set `name' with `a_name'.\n+\t\trequire\n+\t\t\ta_name_not_blank: a_name /= Void and then not a_name.is_whitespace\n+\t\t\ta_name_has_valid_characters: a_name /= Void and then has_valid_characters (a_name)\n+\t\tdo\n+\t\t\tname := a_name\n+\t\tensure\n+\t\t\tname_set: name = a_name\n+\t\tend\n+\n+\tset_value (a_value: READABLE_STRING_8)\n+\t\t\t-- Set `value' with `a_value'.\n+\t\trequire\n+\t\t\ta_value_not_empty: a_value /= Void and then not a_value.is_empty","path":"library/network/protocol/http/src/http_cookie.e","position":129,"original_position":129,"commit_id":"08db0748f4b9eb68e716258cdb76d009227a6622","original_commit_id":"08db0748f4b9eb68e716258cdb76d009227a6622","user":{"login":"jocelyn","id":31598,"avatar_url":"https://avatars.githubusercontent.com/u/31598?v=3","gravatar_id":"","url":"https://api.github.com/users/jocelyn","html_url":"https://github.com/jocelyn","followers_url":"https://api.github.com/users/jocelyn/followers","following_url":"https://api.github.com/users/jocelyn/following{/other_user}","gists_url":"https://api.github.com/users/jocelyn/gists{/gist_id}","starred_url":"https://api.github.com/users/jocelyn/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jocelyn/subscriptions","organizations_url":"https://api.github.com/users/jocelyn/orgs","repos_url":"https://api.github.com/users/jocelyn/repos","events_url":"https://api.github.com/users/jocelyn/events{/privacy}","received_events_url":"https://api.github.com/users/jocelyn/received_events","type":"User","site_admin":false},"body":"maybe a cookie value could be empty?","created_at":"2015-03-19T13:48:29Z","updated_at":"2015-03-19T13:48:29Z","html_url":"https://github.com/EiffelWebFramework/EWF/pull/161#discussion_r26755167","pull_request_url":"https://api.github.com/repos/EiffelWebFramework/EWF/pulls/161","_links":{"self":{"href":"https://api.github.com/repos/EiffelWebFramework/EWF/pulls/comments/26755167"},"html":{"href":"https://github.com/EiffelWebFramework/EWF/pull/161#discussion_r26755167"},"pull_request":{"href":"https://api.github.com/repos/EiffelWebFramework/EWF/pulls/161"}}},"pull_request":{"url":"https://api.github.com/repos/EiffelWebFramework/EWF/pulls/161","id":31359515,"html_url":"https://github.com/EiffelWebFramework/EWF/pull/161","diff_url":"https://github.com/EiffelWebFramework/EWF/pull/161.diff","patch_url":"https://github.com/EiffelWebFramework/EWF/pull/161.patch","issue_url":"https://api.github.com/repos/EiffelWebFramework/EWF/issues/161","number":161,"state":"open","locked":false,"title":"Ewf cookie","user":{"login":"jvelilla","id":23418,"avatar_url":"https://avatars.githubusercontent.com/u/23418?v=3","gravatar_id":"","url":"https://api.github.com/users/jvelilla","html_url":"https://github.com/jvelilla","followers_url":"https://api.github.com/users/jvelilla/followers","following_url":"https://api.github.com/users/jvelilla/following{/other_user}","gists_url":"https://api.github.com/users/jvelilla/gists{/gist_id}","starred_url":"https://api.github.com/users/jvelilla/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jvelilla/subscriptions","organizations_url":"https://api.github.com/users/jvelilla/orgs","repos_url":"https://api.github.com/users/jvelilla/repos","events_url":"https://api.github.com/users/jvelilla/events{/privacy}","received_events_url":"https://api.github.com/users/jvelilla/received_events","type":"User","site_admin":false},"body":"Added HTTP_COOKIE abstraction with their test cases.\r\nAdded WSF_COOKIE class, as a convenience class.\r\nUpdated WSF_RESPONSE, added the feature add_cookie (a_cookie: WSF_COOKIE).\r\nAdded WSF_RESPONSE test cases for add_cookie and Mock classes used for test cases\r\n","created_at":"2015-03-17T17:43:47Z","updated_at":"2015-03-19T13:48:29Z","closed_at":null,"merged_at":null,"merge_commit_sha":"f1031dd6c36806cc0a4e373ee92ed5f73e62903c","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/EiffelWebFramework/EWF/pulls/161/commits","review_comments_url":"https://api.github.com/repos/EiffelWebFramework/EWF/pulls/161/comments","review_comment_url":"https://api.github.com/repos/EiffelWebFramework/EWF/pulls/comments{/number}","comments_url":"https://api.github.com/repos/EiffelWebFramework/EWF/issues/161/comments","statuses_url":"https://api.github.com/repos/EiffelWebFramework/EWF/statuses/08db0748f4b9eb68e716258cdb76d009227a6622","head":{"label":"jvelilla:ewf_cookie","ref":"ewf_cookie","sha":"08db0748f4b9eb68e716258cdb76d009227a6622","user":{"login":"jvelilla","id":23418,"avatar_url":"https://avatars.githubusercontent.com/u/23418?v=3","gravatar_id":"","url":"https://api.github.com/users/jvelilla","html_url":"https://github.com/jvelilla","followers_url":"https://api.github.com/users/jvelilla/followers","following_url":"https://api.github.com/users/jvelilla/following{/other_user}","gists_url":"https://api.github.com/users/jvelilla/gists{/gist_id}","starred_url":"https://api.github.com/users/jvelilla/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jvelilla/subscriptions","organizations_url":"https://api.github.com/users/jvelilla/orgs","repos_url":"https://api.github.com/users/jvelilla/repos","events_url":"https://api.github.com/users/jvelilla/events{/privacy}","received_events_url":"https://api.github.com/users/jvelilla/received_events","type":"User","site_admin":false},"repo":{"id":32100846,"name":"EWF","full_name":"jvelilla/EWF","owner":{"login":"jvelilla","id":23418,"avatar_url":"https://avatars.githubusercontent.com/u/23418?v=3","gravatar_id":"","url":"https://api.github.com/users/jvelilla","html_url":"https://github.com/jvelilla","followers_url":"https://api.github.com/users/jvelilla/followers","following_url":"https://api.github.com/users/jvelilla/following{/other_user}","gists_url":"https://api.github.com/users/jvelilla/gists{/gist_id}","starred_url":"https://api.github.com/users/jvelilla/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jvelilla/subscriptions","organizations_url":"https://api.github.com/users/jvelilla/orgs","repos_url":"https://api.github.com/users/jvelilla/repos","events_url":"https://api.github.com/users/jvelilla/events{/privacy}","received_events_url":"https://api.github.com/users/jvelilla/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/jvelilla/EWF","description":"Eiffel Web Framework -- Provide a common framework to build easily web server application in Eiffel (portable on various connector and platforms)","fork":true,"url":"https://api.github.com/repos/jvelilla/EWF","forks_url":"https://api.github.com/repos/jvelilla/EWF/forks","keys_url":"https://api.github.com/repos/jvelilla/EWF/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jvelilla/EWF/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jvelilla/EWF/teams","hooks_url":"https://api.github.com/repos/jvelilla/EWF/hooks","issue_events_url":"https://api.github.com/repos/jvelilla/EWF/issues/events{/number}","events_url":"https://api.github.com/repos/jvelilla/EWF/events","assignees_url":"https://api.github.com/repos/jvelilla/EWF/assignees{/user}","branches_url":"https://api.github.com/repos/jvelilla/EWF/branches{/branch}","tags_url":"https://api.github.com/repos/jvelilla/EWF/tags","blobs_url":"https://api.github.com/repos/jvelilla/EWF/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jvelilla/EWF/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jvelilla/EWF/git/refs{/sha}","trees_url":"https://api.github.com/repos/jvelilla/EWF/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jvelilla/EWF/statuses/{sha}","languages_url":"https://api.github.com/repos/jvelilla/EWF/languages","stargazers_url":"https://api.github.com/repos/jvelilla/EWF/stargazers","contributors_url":"https://api.github.com/repos/jvelilla/EWF/contributors","subscribers_url":"https://api.github.com/repos/jvelilla/EWF/subscribers","subscription_url":"https://api.github.com/repos/jvelilla/EWF/subscription","commits_url":"https://api.github.com/repos/jvelilla/EWF/commits{/sha}","git_commits_url":"https://api.github.com/repos/jvelilla/EWF/git/commits{/sha}","comments_url":"https://api.github.com/repos/jvelilla/EWF/comments{/number}","issue_comment_url":"https://api.github.com/repos/jvelilla/EWF/issues/comments{/number}","contents_url":"https://api.github.com/repos/jvelilla/EWF/contents/{+path}","compare_url":"https://api.github.com/repos/jvelilla/EWF/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jvelilla/EWF/merges","archive_url":"https://api.github.com/repos/jvelilla/EWF/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jvelilla/EWF/downloads","issues_url":"https://api.github.com/repos/jvelilla/EWF/issues{/number}","pulls_url":"https://api.github.com/repos/jvelilla/EWF/pulls{/number}","milestones_url":"https://api.github.com/repos/jvelilla/EWF/milestones{/number}","notifications_url":"https://api.github.com/repos/jvelilla/EWF/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jvelilla/EWF/labels{/name}","releases_url":"https://api.github.com/repos/jvelilla/EWF/releases{/id}","created_at":"2015-03-12T20:32:50Z","updated_at":"2015-03-12T21:21:11Z","pushed_at":"2015-03-19T12:40:19Z","git_url":"git://github.com/jvelilla/EWF.git","ssh_url":"git@github.com:jvelilla/EWF.git","clone_url":"https://github.com/jvelilla/EWF.git","svn_url":"https://github.com/jvelilla/EWF","homepage":"http://eiffelwebframework.github.io/EWF","size":11296,"stargazers_count":0,"watchers_count":0,"language":"Eiffel","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"EiffelWebFramework:master","ref":"master","sha":"5f4ab50bf904d33de1d4640ec73cfd8954118c0e","user":{"login":"EiffelWebFramework","id":1617859,"avatar_url":"https://avatars.githubusercontent.com/u/1617859?v=3","gravatar_id":"","url":"https://api.github.com/users/EiffelWebFramework","html_url":"https://github.com/EiffelWebFramework","followers_url":"https://api.github.com/users/EiffelWebFramework/followers","following_url":"https://api.github.com/users/EiffelWebFramework/following{/other_user}","gists_url":"https://api.github.com/users/EiffelWebFramework/gists{/gist_id}","starred_url":"https://api.github.com/users/EiffelWebFramework/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/EiffelWebFramework/subscriptions","organizations_url":"https://api.github.com/users/EiffelWebFramework/orgs","repos_url":"https://api.github.com/users/EiffelWebFramework/repos","events_url":"https://api.github.com/users/EiffelWebFramework/events{/privacy}","received_events_url":"https://api.github.com/users/EiffelWebFramework/received_events","type":"Organization","site_admin":false},"repo":{"id":1970902,"name":"EWF","full_name":"EiffelWebFramework/EWF","owner":{"login":"EiffelWebFramework","id":1617859,"avatar_url":"https://avatars.githubusercontent.com/u/1617859?v=3","gravatar_id":"","url":"https://api.github.com/users/EiffelWebFramework","html_url":"https://github.com/EiffelWebFramework","followers_url":"https://api.github.com/users/EiffelWebFramework/followers","following_url":"https://api.github.com/users/EiffelWebFramework/following{/other_user}","gists_url":"https://api.github.com/users/EiffelWebFramework/gists{/gist_id}","starred_url":"https://api.github.com/users/EiffelWebFramework/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/EiffelWebFramework/subscriptions","organizations_url":"https://api.github.com/users/EiffelWebFramework/orgs","repos_url":"https://api.github.com/users/EiffelWebFramework/repos","events_url":"https://api.github.com/users/EiffelWebFramework/events{/privacy}","received_events_url":"https://api.github.com/users/EiffelWebFramework/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/EiffelWebFramework/EWF","description":"Eiffel Web Framework -- Provide a common framework to build easily web server application in Eiffel (portable on various connector and platforms)","fork":false,"url":"https://api.github.com/repos/EiffelWebFramework/EWF","forks_url":"https://api.github.com/repos/EiffelWebFramework/EWF/forks","keys_url":"https://api.github.com/repos/EiffelWebFramework/EWF/keys{/key_id}","collaborators_url":"https://api.github.com/repos/EiffelWebFramework/EWF/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/EiffelWebFramework/EWF/teams","hooks_url":"https://api.github.com/repos/EiffelWebFramework/EWF/hooks","issue_events_url":"https://api.github.com/repos/EiffelWebFramework/EWF/issues/events{/number}","events_url":"https://api.github.com/repos/EiffelWebFramework/EWF/events","assignees_url":"https://api.github.com/repos/EiffelWebFramework/EWF/assignees{/user}","branches_url":"https://api.github.com/repos/EiffelWebFramework/EWF/branches{/branch}","tags_url":"https://api.github.com/repos/EiffelWebFramework/EWF/tags","blobs_url":"https://api.github.com/repos/EiffelWebFramework/EWF/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/EiffelWebFramework/EWF/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/EiffelWebFramework/EWF/git/refs{/sha}","trees_url":"https://api.github.com/repos/EiffelWebFramework/EWF/git/trees{/sha}","statuses_url":"https://api.github.com/repos/EiffelWebFramework/EWF/statuses/{sha}","languages_url":"https://api.github.com/repos/EiffelWebFramework/EWF/languages","stargazers_url":"https://api.github.com/repos/EiffelWebFramework/EWF/stargazers","contributors_url":"https://api.github.com/repos/EiffelWebFramework/EWF/contributors","subscribers_url":"https://api.github.com/repos/EiffelWebFramework/EWF/subscribers","subscription_url":"https://api.github.com/repos/EiffelWebFramework/EWF/subscription","commits_url":"https://api.github.com/repos/EiffelWebFramework/EWF/commits{/sha}","git_commits_url":"https://api.github.com/repos/EiffelWebFramework/EWF/git/commits{/sha}","comments_url":"https://api.github.com/repos/EiffelWebFramework/EWF/comments{/number}","issue_comment_url":"https://api.github.com/repos/EiffelWebFramework/EWF/issues/comments{/number}","contents_url":"https://api.github.com/repos/EiffelWebFramework/EWF/contents/{+path}","compare_url":"https://api.github.com/repos/EiffelWebFramework/EWF/compare/{base}...{head}","merges_url":"https://api.github.com/repos/EiffelWebFramework/EWF/merges","archive_url":"https://api.github.com/repos/EiffelWebFramework/EWF/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/EiffelWebFramework/EWF/downloads","issues_url":"https://api.github.com/repos/EiffelWebFramework/EWF/issues{/number}","pulls_url":"https://api.github.com/repos/EiffelWebFramework/EWF/pulls{/number}","milestones_url":"https://api.github.com/repos/EiffelWebFramework/EWF/milestones{/number}","notifications_url":"https://api.github.com/repos/EiffelWebFramework/EWF/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/EiffelWebFramework/EWF/labels{/name}","releases_url":"https://api.github.com/repos/EiffelWebFramework/EWF/releases{/id}","created_at":"2011-06-29T06:36:19Z","updated_at":"2015-03-12T21:17:25Z","pushed_at":"2015-03-12T21:17:24Z","git_url":"git://github.com/EiffelWebFramework/EWF.git","ssh_url":"git@github.com:EiffelWebFramework/EWF.git","clone_url":"https://github.com/EiffelWebFramework/EWF.git","svn_url":"https://github.com/EiffelWebFramework/EWF","homepage":"http://eiffelwebframework.github.io/EWF","size":13915,"stargazers_count":20,"watchers_count":20,"language":"Eiffel","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":18,"mirror_url":null,"open_issues_count":67,"forks":18,"open_issues":67,"watchers":20,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/EiffelWebFramework/EWF/pulls/161"},"html":{"href":"https://github.com/EiffelWebFramework/EWF/pull/161"},"issue":{"href":"https://api.github.com/repos/EiffelWebFramework/EWF/issues/161"},"comments":{"href":"https://api.github.com/repos/EiffelWebFramework/EWF/issues/161/comments"},"review_comments":{"href":"https://api.github.com/repos/EiffelWebFramework/EWF/pulls/161/comments"},"review_comment":{"href":"https://api.github.com/repos/EiffelWebFramework/EWF/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/EiffelWebFramework/EWF/pulls/161/commits"},"statuses":{"href":"https://api.github.com/repos/EiffelWebFramework/EWF/statuses/08db0748f4b9eb68e716258cdb76d009227a6622"}}}}