├── .dockerignore ├── .gitignore ├── BUILDING.md ├── Dockerfile ├── Makefile ├── README.md ├── akamai-ets_6.0.0.9_Ubuntu.tar.gz ├── code-samples ├── ad.html ├── country.html ├── expires.html ├── expires_now.html ├── form1.html ├── geo.html ├── geo │ ├── de │ │ ├── NKZvNiaXdmuN22HSfQwSc.js │ │ ├── akamai.js │ │ ├── akamai_win.css │ │ ├── button3.gif │ │ ├── company.gif │ │ ├── gigaReport_ad3.gif │ │ ├── header.jpg │ │ ├── header_left_bottom.jpg │ │ ├── home_content_bottom.gif │ │ ├── home_content_top.gif │ │ ├── horiz_line_orange.gif │ │ ├── index.html │ │ ├── international.gif │ │ ├── investor_relations.gif │ │ ├── more_info.gif │ │ ├── network1000.jpg │ │ ├── news.gif │ │ ├── partners.gif │ │ ├── press_circle.gif │ │ ├── quote1.jpg │ │ ├── quote_bottom.gif │ │ ├── quote_left.gif │ │ ├── quote_right.gif │ │ ├── search.gif │ │ ├── search_submit.gif │ │ ├── solutions.gif │ │ ├── spacer.gif │ │ ├── stylesheet.js │ │ ├── support.gif │ │ ├── technology.gif │ │ └── top_stories.gif │ ├── description.txt │ ├── fr │ │ ├── NKZvNiaXdmuN22HSfQwSc.js │ │ ├── ab_hd_advant.jpg │ │ ├── ab_hd_left.jpg │ │ ├── akamai.js │ │ ├── akamai_win.css │ │ ├── button3.gif │ │ ├── core_arrow.gif │ │ ├── core_arrow_blue.gif │ │ ├── dot_clear.gif │ │ ├── fr_core_news_hd.gif │ │ ├── fr_n_aa.gif │ │ ├── fr_n_cs.gif │ │ ├── fr_n_cu.gif │ │ ├── fr_n_ia.gif │ │ ├── fr_n_ir.gif │ │ ├── fr_n_nr.gif │ │ ├── fr_n_op.gif │ │ ├── fr_n_sh.gif │ │ ├── fr_n_sv.gif │ │ ├── fr_n_tc.gif │ │ ├── fr_sitesearch2_off.gif │ │ ├── global_logo.gif │ │ ├── home_fr_hd.gif │ │ ├── index.html │ │ └── stylesheet.js │ ├── index.html │ ├── jp │ │ ├── core_arrow_blue.gif │ │ ├── core_content_hd2.gif │ │ ├── core_hd_nav.jpg │ │ ├── core_logo.gif │ │ ├── core_logos_top2.gif │ │ ├── core_main_hd.jpg │ │ ├── dot_clear.gif │ │ ├── index.html │ │ ├── navi_edge.gif │ │ ├── navi_ff.gif │ │ ├── navi_ffstream.gif │ │ ├── navi_getting.gif │ │ ├── navi_ia.gif │ │ ├── navi_news.gif │ │ ├── navi_service.gif │ │ ├── to_us.gif │ │ └── top_news_hd.gif │ └── us │ │ ├── NKZvNiaXdmuN22HSfQwSc.js │ │ ├── akamai.js │ │ ├── akamai_win.css │ │ ├── button3.gif │ │ ├── company.gif │ │ ├── gigaReport_ad3.gif │ │ ├── header.jpg │ │ ├── header_left_bottom.jpg │ │ ├── home_content_bottom.gif │ │ ├── home_content_top.gif │ │ ├── horiz_line_orange.gif │ │ ├── index.html │ │ ├── international.gif │ │ ├── investor_relations.gif │ │ ├── more_info.gif │ │ ├── network1000.jpg │ │ ├── news.gif │ │ ├── partners.gif │ │ ├── press_circle.gif │ │ ├── quote1.jpg │ │ ├── quote_bottom.gif │ │ ├── quote_left.gif │ │ ├── quote_right.gif │ │ ├── search.gif │ │ ├── search_submit.gif │ │ ├── solutions.gif │ │ ├── spacer.gif │ │ ├── stylesheet.js │ │ ├── support.gif │ │ ├── technology.gif │ │ └── top_stories.gif ├── image_rotation.html ├── includebydate.html ├── index.html ├── loop.html ├── loop_body.html ├── page1.html ├── page2.html ├── page3.html ├── page_rotation.html ├── page_rotation_cookie.html ├── quiz.html ├── quote1.gif ├── quote1.jpg ├── quote2.gif ├── quote2.jpg ├── quote3.gif ├── quote3.jpg ├── quote4.gif ├── quote4.jpg ├── quote5.gif ├── quote5.jpg ├── quote6.gif ├── quote7.gif ├── quotes.html ├── random-image.html ├── setcookie.html ├── today.html ├── ua.html ├── utils │ ├── footer.html │ └── viewsource.html ├── web_tour.html └── web_tour_cookie.html ├── dockerimage-tests ├── .gitignore ├── .idea │ ├── .rakeTasks │ ├── dockerimage-tests.iml │ ├── inspectionProfiles │ │ └── Project_Default.xml │ ├── misc.xml │ └── modules.xml ├── .rubocop.yml ├── .ruby-version ├── Gemfile ├── Gemfile.lock ├── README.md ├── Rakefile ├── html │ ├── advanced │ │ ├── insensitive_regex.html │ │ ├── utf8_assignment.html │ │ ├── utf8_querystring.html │ │ ├── utf8_regex_1.html │ │ ├── utf8_regex_2.html │ │ ├── xslt.xml │ │ └── xslt.xsl │ └── basic │ │ ├── akamai-logo.png │ │ ├── geo.html │ │ ├── index.html │ │ ├── sample.html │ │ ├── style.css │ │ └── version.txt └── test │ ├── complex_args_test.rb │ ├── debug_flag_test.rb │ ├── geo_test.rb │ ├── gzip │ ├── docker-compose.yml │ ├── gzip.html │ ├── gzip_test.rb │ └── nginx-gzip │ │ └── Dockerfile │ ├── help_test.rb │ ├── noargs_defaults_test.rb │ ├── regex_test.rb │ ├── remote_origin_test.rb │ ├── short_flags_test.rb │ ├── test_helper.rb │ ├── utf8_test.rb │ └── xslt_test.rb ├── ets-diagram.png ├── licenses ├── Akamai.md ├── Apache.md ├── Curl.md └── NewsCorpAustralia.md ├── playground └── esi_local_playground.conf.tmpl └── run.sh /.dockerignore: -------------------------------------------------------------------------------- 1 | *.dockerimage.* 2 | **/.git 3 | **/.idea -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.dockerimage.* 2 | build.properties 3 | **/.idea -------------------------------------------------------------------------------- /BUILDING.md: -------------------------------------------------------------------------------- 1 | ## Building 2 | Run `make` in this directory. -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | # Copyright 2017 Akamai Technologies, Inc. All Rights Reserved. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # 6 | # You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | 16 | # build using make 17 | FROM ubuntu:trusty 18 | 19 | ENV ETS_DIR=/opt/akamai-ets \ 20 | NODE_DIR=/usr/src/app/ 21 | 22 | LABEL vendor="Akamai Technologies, Inc." 23 | 24 | COPY akamai-ets_*.tar.gz run.sh /tmp/ 25 | COPY code-samples /tmp/esi-examples 26 | COPY playground/. /tmp/playground/ 27 | 28 | RUN mkdir -p /tmp/akamai-ets && \ 29 | tar -zxf /tmp/akamai-ets_*.tar.gz -C /tmp/akamai-ets --strip-components=1 && \ 30 | cp -R /tmp/esi-examples /tmp/akamai-ets/files/bindist/virtual/localhost/docs/ && \ 31 | cd /tmp && \ 32 | tar -zcvf /tmp/akamai-ets/files/bindist/virtual/localhost/docs/esi-examples/esi-examples.tar.gz esi-examples > /dev/null 2>&1 && \ 33 | cd /tmp/akamai-ets && \ 34 | ./install.sh --headless && \ 35 | rm -rf /tmp/akamai-ets && \ 36 | rm -rf /tmp/esi-examples && \ 37 | rm -f /tmp/akamai-ets_*.tar.gz && \ 38 | cd /tmp && apt-get install -y curl && \ 39 | curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash - && \ 40 | apt-get install -y build-essential g++ python nodejs git && \ 41 | # install playground, using code from https://github.com/newscorpaus/akamai-ets/Dockerfile 42 | cd /tmp && \ 43 | git clone https://github.com/newscorpaus/akamai-ets.git && \ 44 | cd akamai-ets; git checkout 4d3cf03 && \ 45 | mkdir -p ${ETS_DIR}/conf/ets/macros/ && cp files/conf/ets/macros/Playground.macro ${ETS_DIR}/conf/ets/macros/ && \ 46 | cp files/conf/ets/vh_playground.conf ${ETS_DIR}/conf/ets/ && \ 47 | cp -R /tmp/playground/. ${ETS_DIR}/conf/ && \ 48 | mkdir -p ${NODE_DIR} && \ 49 | cp -R ./ ${NODE_DIR} && \ 50 | cd ${NODE_DIR} && \ 51 | # build playground.min.js, and copy it to /home/playground 52 | unset NODE_ENV && npm cache clean && npm install && \ 53 | npm run build && rm -rf node_modules && \ 54 | cp -R public/* /home/ && \ 55 | npm install --production && npm link && \ 56 | rm -rf /tmp/akamai-ets && \ 57 | # end install playground 58 | apt-get remove -y git python g++ build-essential && apt-get autoremove -y && \ 59 | rm -rf /var/lib/apt/lists/* 60 | 61 | EXPOSE 80 62 | 63 | # no default arguments, but this will allow to pass arguments from "docker run ... ARGS" to "/tmp/run.sh ARGS", otherwise "/bin/bash ARGS" will be called 64 | # more at https://docs.docker.com/engine/reference/builder/#understand-how-cmd-and-entrypoint-interact 65 | CMD [""] 66 | 67 | ENTRYPOINT ["/tmp/run.sh"] 68 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | # Copyright 2017 Akamai Technologies, Inc. All Rights Reserved. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # 6 | # You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | 16 | VERSION := $(shell ls akamai-ets_*.tar.gz | grep -Eo "([[:digit:]]\.?)+") 17 | REPO = akamaiesi 18 | NAME = ets-docker 19 | FULL_NAME = ${REPO}/${NAME} 20 | 21 | .FORCE: 22 | 23 | all: build test dist 24 | 25 | build: .FORCE ## Build the docker image 26 | docker build -f Dockerfile -t ${FULL_NAME}:${VERSION} -t ${FULL_NAME}:latest --no-cache . 27 | 28 | test: 29 | (cd dockerimage-tests && rake) 30 | 31 | # This target generally isn't used, but is here in case you wanted to share a local build. 32 | dist: build 33 | docker save ${FULL_NAME} -o ${NAME}.${VERSION}.dockerimage.tar 34 | gzip -f ${NAME}.${VERSION}.dockerimage.tar 35 | -------------------------------------------------------------------------------- /akamai-ets_6.0.0.9_Ubuntu.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/akamai-ets_6.0.0.9_Ubuntu.tar.gz -------------------------------------------------------------------------------- /code-samples/ad.html: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 20 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /code-samples/country.html: -------------------------------------------------------------------------------- 1 | 16 | 17 | -------------------------------------------------------------------------------- /code-samples/expires.html: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | $add_header('Expires', $http_time($time() + 36000)) 19 | $add_header('Cache-Control', 'max-age=24h') 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | This example adds a 24 hour HTTP Expires and Cache-Control headers to the response to 32 | allow for downstream caches to cache the page and the Expires HTTP-EQUIV tag to 33 | allow browsers to cache the page.
34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /code-samples/expires_now.html: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | $add_header('Expires', $http_time($time())) 19 | $add_header('Cache-Control', 'max-age=0, no-cache, no-store') 20 | $add_header('Pragma', 'no-cache') 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | This example adds HTTP Expires, Cache-Control and Pragma headers to the response to 34 | disallow for downstream caches from caching the page and the Expires and Pragma HTTP-EQUIV tags to 35 | disallow browsers from caching the page.
36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /code-samples/form1.html: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 20 |
21 |
22 |
23 | 24 |
25 | 31 |
32 | 38 |
39 |
40 | 41 |
42 |
43 |
44 | 45 |
46 | Textbox Value: $url_decode($(QUERY_STRING{'textbox'}))
47 | CheckBox Value: $(QUERY_STRING{'checkbox'})
48 | Radio Button Value: $url_decode($(QUERY_STRING{'radio'}))
49 | Select Value: $url_decode($(QUERY_STRING{'select'}))
50 | Multiple Select Values: $url_decode($(QUERY_STRING{'multiple'}))
51 | Text Area Value: $url_decode($(QUERY_STRING{'textarea'}))

52 |
53 | 54 |
55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 |
63 |
64 | 65 | Textbox Value: $url_decode($(QUERY_STRING{'textbox'}))
66 | Textbox2 Value: $url_decode($(QUERY_STRING{'textbox2'}))
67 | CheckBox Value: $(QUERY_STRING{'checkbox'})
68 | Radio Button Value: $url_decode($(QUERY_STRING{'radio'}))
69 | Select Value: $url_decode($(QUERY_STRING{'select'}))
70 | Multiple Select Values: $url_decode($(QUERY_STRING{'multiple'}))
71 | Text Area Value: $url_decode($(QUERY_STRING{'textarea'}))

72 | Thank You!
73 |
74 |
75 | 76 | 77 | 78 | 79 | 80 | -------------------------------------------------------------------------------- /code-samples/geo.html: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 |
My IP Address: $(REMOTE_ADDR)
My Geographical Information
AttributeValue
Country Code$(GEO{'country_code'})
Region Code$(GEO{'region_code'})
City$(GEO{'city'})
DMA$(GEO{'dma'})
MSA$(GEO{'msa'})
PMSA$(GEO{'pmsa'})
Areacode$(GEO{'areacode'})
Latitude$(GEO{'lat'})
Longitude$(GEO{'long'})
County$(GEO{'county'})
FIPS$(GEO{'fips'})
Timezone$(GEO{'timezone'})
Network$(GEO{'network'})
Network Type $(GEO{'network_type'})
Throughput $(GEO{'throughput'})
115 |

116 | 117 | 118 | 119 | 120 | 121 | 122 | 124 | 125 | 127 | 128 | 130 | 131 | 133 | 134 | 136 | 137 | 139 | 140 | 142 | 143 | 144 | 145 | 146 | 147 | 149 | 150 | 152 | 153 | 155 | 156 | 157 | 158 | 160 | 161 | 163 | 164 | 166 |
Attribute/value pairsMeaning
Geography
country_codeThe country_code value is an ISO-3166, 2 letter code for the 123 | country where the IP address maps to.
region_codeThe region_code value is an ISO-3166, 2 letter code for the 126 | state, province, or region where the IP address maps to.
*cityThe city value will be the city (within 50 mile radius) that the 129 | IP address maps to.
*dmaThe dma value will be a number representing the Designated 132 | Marketing Area that the IP address maps to.
*msaThe msa value will be a number representing the Metropolitan 135 | Statistical Area that the IP address maps to.
*pmsaThe pmsa value will be a number representing the Primary 138 | Metropolitan Statistical Area that the IP address maps to.
*areacodeThe areacode value will be the area code that the IP address 141 | maps to (multiple answers possible)
*latThe lat value will be the latitude that the IP address maps to
*longThe long value will be the longitude that the IP address maps to
*countyThe county value will be the county that the IP address maps to 148 | (multiple answers possible)
*fipsThe fips value will be the unique county identifier that the IP 151 | address maps to (multiple answers possible)
*timezoneThe timezone value will be the time zone that the IP address 154 | maps to
Network
networkThe network value will be the network that the IP address 159 | belongs to.
network_typeThe network type value will be the network type that the IP 162 | address belongs to.
*throughputThe throughput is the actual measured throughput that the IP 165 | address maps to.
167 |
* Denotes attributes only available with the EdgeScape Pro service. 168 | 169 | 170 | 171 | 172 | 173 | -------------------------------------------------------------------------------- /code-samples/geo/de/NKZvNiaXdmuN22HSfQwSc.js: -------------------------------------------------------------------------------- 1 | /* Copyright 2017 Akamai Technologies, Inc. All Rights Reserved. 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | if (typeof(SERVER) == 'string') 18 | W+="&server="+escape(SERVER); 19 | if (typeof(ORDER) == 'string') 20 | W+="&order="+escape(ORDER); 21 | if (typeof(CONTENTGROUP) == 'string') 22 | W+="&Group="+escape(CONTENTGROUP); 23 | W+="&browserDate="+escape(new Date()); 24 | if (typeof(wtl_Title) == 'string') 25 | {W+="&title="+escape(wtl_Title);} 26 | else 27 | {W+="&title="+escape(document.title);} 28 | if (typeof(wtl_URL) == 'string') 29 | {W+="&url="+escape(wtl_URL);} 30 | else 31 | {W+="&url="+escape(window.document.URL);} 32 | W+="&referrer="+escape(window.document.referrer); 33 | W+="&appname="+escape(navigator.appName); 34 | W+="&appversion="+escape(navigator.appVersion); 35 | W+="&cookieOK="+(navigator.cookieEnabled?"Yes":"No"); 36 | W+="&userLanguage="+(navigator.appName=="Netscape"?navigator.language:navigator.userLanguage); 37 | W+="&platform="+navigator.platform; 38 | W+="&bgColor="+escape(document.bgColor); 39 | W+="&javaOK=Yes"; 40 | if(typeof(screen)=="object") 41 | { 42 | W+="&screenResolution="+screen.width+"x"+screen.height; 43 | W+="&colorDepth="+screen.colorDepth; 44 | W+="&NSpluginList="; 45 | for( var i=0; i< navigator.plugins.length; i++) 46 | W+=escape(navigator.plugins[i].name)+";"; 47 | } 48 | document.write(''); 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /code-samples/geo/de/akamai.js: -------------------------------------------------------------------------------- 1 | /* Copyright 2017 Akamai Technologies, Inc. All Rights Reserved. 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | 110 | 111 | 112 | 113 | -------------------------------------------------------------------------------- /code-samples/geo/de/akamai_win.css: -------------------------------------------------------------------------------- 1 | /* Copyright 2017 Akamai Technologies, Inc. All Rights Reserved. 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. */ 15 | 16 | A:link { 17 | COLOR: #3399ff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; TEXT-DECORATION: none 18 | } 19 | A:visited { 20 | COLOR: #ff9933; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; TEXT-DECORATION: none 21 | } 22 | A:active { 23 | COLOR: #3399ff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; TEXT-DECORATION: none 24 | } 25 | A.footer:link { 26 | COLOR: #000099; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; TEXT-DECORATION: none 27 | } 28 | A.footer:visited { 29 | COLOR: #ff9933; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; TEXT-DECORATION: none 30 | } 31 | A.footer:active { 32 | COLOR: #000099; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; TEXT-DECORATION: none 33 | } 34 | A.news:link { 35 | COLOR: #000000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; TEXT-DECORATION: none 36 | } 37 | A.news:visited { 38 | COLOR: #000000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; TEXT-DECORATION: none 39 | } 40 | A.news:active { 41 | COLOR: #000000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; TEXT-DECORATION: none 42 | } 43 | A.bluenews:link { 44 | COLOR: #000099; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 45 | } 46 | A.bluenews:visited { 47 | COLOR: #000099; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 48 | } 49 | A.bluenews:active { 50 | COLOR: #000099; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 51 | } 52 | A.more:link { 53 | COLOR: #0099cc; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 54 | } 55 | A.more:visited { 56 | COLOR: #0099cc; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 57 | } 58 | A.more:active { 59 | COLOR: #0099cc; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 60 | } 61 | A.breadcrumb:link { 62 | COLOR: #3399ff; FONT-FAMILY: Arial,Helvetica,sans-serif; FONT-SIZE: 8pt; TEXT-DECORATION: none 63 | } 64 | A.breadcrumb:visited { 65 | COLOR: #3399ff; FONT-FAMILY: Arial,Helvetica,sans-serif; FONT-SIZE: 8pt; TEXT-DECORATION: none 66 | } 67 | A.breadcrumb:active { 68 | COLOR: #3399ff; FONT-FAMILY: Arial,Helvetica,sans-serif; FONT-SIZE: 8pt; TEXT-DECORATION: none 69 | } 70 | A.subnav:link { 71 | COLOR: #3399ff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 72 | } 73 | A.subnav:visited { 74 | COLOR: #3399ff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 75 | } 76 | A.subnav:active { 77 | COLOR: #3399ff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 78 | } 79 | A.subnavMd:link { 80 | COLOR: #3399ff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 81 | } 82 | A.subnavMd:visited { 83 | COLOR: #3399ff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 84 | } 85 | A.subnavMd:active { 86 | COLOR: #3399ff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 87 | } 88 | A.subnavLg:link { 89 | COLOR: #3399ff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 12pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 90 | } 91 | A.subnavLg:visited { 92 | COLOR: #3399ff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 12pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 93 | } 94 | A.subnavLg:active { 95 | COLOR: #3399ff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 12pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 96 | } 97 | A.sitemap:link { 98 | COLOR: #7a7a7a; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; TEXT-DECORATION: none 99 | } 100 | A.sitemap:visited { 101 | COLOR: #7a7a7a; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; TEXT-DECORATION: none 102 | } 103 | A.sitemap:active { 104 | COLOR: #7a7a7a; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; TEXT-DECORATION: none 105 | } 106 | A.sitemapMd:link { 107 | COLOR: #0092d2; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; TEXT-DECORATION: none 108 | } 109 | A.sitemapMd:visited { 110 | COLOR: #0092d2; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; TEXT-DECORATION: none 111 | } 112 | A.sitemapMd:active { 113 | COLOR: #0092d2; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; TEXT-DECORATION: none 114 | } 115 | A.sitemapLg:link { 116 | COLOR: #000099; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 117 | } 118 | A.sitemapLg:visited { 119 | COLOR: #000099; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 120 | } 121 | A.sitemapLg:active { 122 | COLOR: #000099; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 123 | } 124 | A.small:link { 125 | COLOR: #3399ff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; TEXT-DECORATION: none 126 | } 127 | A.small:visited { 128 | COLOR: #ff9933; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; TEXT-DECORATION: none 129 | } 130 | A.small:active { 131 | COLOR: #3399ff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; TEXT-DECORATION: none 132 | } 133 | A.smwhite:link { 134 | COLOR: #ffffff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; TEXT-DECORATION: none 135 | } 136 | A.smwhite:visited { 137 | COLOR: #ffffff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; TEXT-DECORATION: none 138 | } 139 | A.smwhite:active { 140 | COLOR: #ffffff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; TEXT-DECORATION: none 141 | } 142 | .inactivesubnav { 143 | COLOR: #000000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; FONT-WEIGHT: bold 144 | } 145 | .smText { 146 | COLOR: #000000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt 147 | } 148 | .smArialText { 149 | COLOR: #ff9933; FONT-FAMILY: Arial,Helvetica,sans-serif; FONT-SIZE: 8pt 150 | } 151 | .smTextOr { 152 | COLOR: #ff9933; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt 153 | } 154 | .lgTextOr { 155 | COLOR: #ff9933; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 12pt 156 | } 157 | .lgText { 158 | COLOR: #000000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 12pt 159 | } 160 | .smredText { 161 | COLOR: #ff0000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt 162 | } 163 | .smwhiteText { 164 | COLOR: #ffffff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt 165 | } 166 | .whiteText { 167 | COLOR: #ffffff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; FONT-WEIGHT: bold 168 | } 169 | .lgwhiteText { 170 | COLOR: #ffffff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 12pt; FONT-WEIGHT: bold 171 | } 172 | .smblueText { 173 | COLOR: #0092d2; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt 174 | } 175 | .smdarkblueText { 176 | COLOR: #000099; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt 177 | } 178 | .subhead { 179 | COLOR: #000000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; FONT-WEIGHT: bold 180 | } 181 | .lgsubhead { 182 | COLOR: #000000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 12pt; FONT-WEIGHT: bold 183 | } 184 | .quote { 185 | COLOR: #555555; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt 186 | } 187 | .smquote { 188 | COLOR: #555555; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt 189 | } 190 | .smgray { 191 | COLOR: #7a7a7a; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt 192 | } 193 | .homecopy { 194 | COLOR: #000000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt 195 | } 196 | TD { 197 | COLOR: #000000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt 198 | } 199 | P { 200 | COLOR: #000000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt 201 | } 202 | OL { 203 | COLOR: #000000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt 204 | } 205 | UL { 206 | COLOR: #000000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt 207 | } 208 | BODY { 209 | COLOR: #000000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt 210 | } 211 | .searchresulttext { 212 | COLOR: #000000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 9pt 213 | } 214 | A.searchresultlink:link { 215 | COLOR: #3399ff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 9pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 216 | } 217 | A.searchresultlink:visited { 218 | COLOR: #ff9933; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 9pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 219 | } 220 | A.searchresultlink:active { 221 | COLOR: #3399ff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 9pt; FONT-WEIGHT: bold 222 | } 223 | -------------------------------------------------------------------------------- /code-samples/geo/de/button3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/de/button3.gif -------------------------------------------------------------------------------- /code-samples/geo/de/company.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/de/company.gif -------------------------------------------------------------------------------- /code-samples/geo/de/gigaReport_ad3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/de/gigaReport_ad3.gif -------------------------------------------------------------------------------- /code-samples/geo/de/header.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/de/header.jpg -------------------------------------------------------------------------------- /code-samples/geo/de/header_left_bottom.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/de/header_left_bottom.jpg -------------------------------------------------------------------------------- /code-samples/geo/de/home_content_bottom.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/de/home_content_bottom.gif -------------------------------------------------------------------------------- /code-samples/geo/de/home_content_top.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/de/home_content_top.gif -------------------------------------------------------------------------------- /code-samples/geo/de/horiz_line_orange.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/de/horiz_line_orange.gif -------------------------------------------------------------------------------- /code-samples/geo/de/index.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/de/index.html -------------------------------------------------------------------------------- /code-samples/geo/de/international.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/de/international.gif -------------------------------------------------------------------------------- /code-samples/geo/de/investor_relations.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/de/investor_relations.gif -------------------------------------------------------------------------------- /code-samples/geo/de/more_info.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/de/more_info.gif -------------------------------------------------------------------------------- /code-samples/geo/de/network1000.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/de/network1000.jpg -------------------------------------------------------------------------------- /code-samples/geo/de/news.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/de/news.gif -------------------------------------------------------------------------------- /code-samples/geo/de/partners.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/de/partners.gif -------------------------------------------------------------------------------- /code-samples/geo/de/press_circle.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/de/press_circle.gif -------------------------------------------------------------------------------- /code-samples/geo/de/quote1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/de/quote1.jpg -------------------------------------------------------------------------------- /code-samples/geo/de/quote_bottom.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/de/quote_bottom.gif -------------------------------------------------------------------------------- /code-samples/geo/de/quote_left.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/de/quote_left.gif -------------------------------------------------------------------------------- /code-samples/geo/de/quote_right.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/de/quote_right.gif -------------------------------------------------------------------------------- /code-samples/geo/de/search.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/de/search.gif -------------------------------------------------------------------------------- /code-samples/geo/de/search_submit.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/de/search_submit.gif -------------------------------------------------------------------------------- /code-samples/geo/de/solutions.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/de/solutions.gif -------------------------------------------------------------------------------- /code-samples/geo/de/spacer.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/de/spacer.gif -------------------------------------------------------------------------------- /code-samples/geo/de/stylesheet.js: -------------------------------------------------------------------------------- 1 | /* Copyright 2017 Akamai Technologies, Inc. All Rights Reserved. 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | 28 | -------------------------------------------------------------------------------- /code-samples/geo/de/support.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/de/support.gif -------------------------------------------------------------------------------- /code-samples/geo/de/technology.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/de/technology.gif -------------------------------------------------------------------------------- /code-samples/geo/de/top_stories.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/de/top_stories.gif -------------------------------------------------------------------------------- /code-samples/geo/description.txt: -------------------------------------------------------------------------------- 1 | Example: Eliminating a splash screen for geographies 2 | 3 | Description : The following ESI example eliminates the need for a splash 4 | screen that gathers an end-users geographic information and directs them to 5 | the appropriate page accordingly. Using ESI the spash screen can be eliminated 6 | as it can use the EdgeScape information in ESI to send the user automatically to 7 | the appropriate page. 8 | 9 | Logic of the page: End users country code is checked by ESI's variable and if it 10 | matches US or DE or JP or FR the appropriate page is returned. If none of the country 11 | codes checked match, a default page is returned. -------------------------------------------------------------------------------- /code-samples/geo/fr/NKZvNiaXdmuN22HSfQwSc.js: -------------------------------------------------------------------------------- 1 | /* Copyright 2017 Akamai Technologies, Inc. All Rights Reserved. 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | if (typeof(SERVER) == 'string') 18 | W+="&server="+escape(SERVER); 19 | if (typeof(ORDER) == 'string') 20 | W+="&order="+escape(ORDER); 21 | if (typeof(CONTENTGROUP) == 'string') 22 | W+="&Group="+escape(CONTENTGROUP); 23 | W+="&browserDate="+escape(new Date()); 24 | if (typeof(wtl_Title) == 'string') 25 | {W+="&title="+escape(wtl_Title);} 26 | else 27 | {W+="&title="+escape(document.title);} 28 | if (typeof(wtl_URL) == 'string') 29 | {W+="&url="+escape(wtl_URL);} 30 | else 31 | {W+="&url="+escape(window.document.URL);} 32 | W+="&referrer="+escape(window.document.referrer); 33 | W+="&appname="+escape(navigator.appName); 34 | W+="&appversion="+escape(navigator.appVersion); 35 | W+="&cookieOK="+(navigator.cookieEnabled?"Yes":"No"); 36 | W+="&userLanguage="+(navigator.appName=="Netscape"?navigator.language:navigator.userLanguage); 37 | W+="&platform="+navigator.platform; 38 | W+="&bgColor="+escape(document.bgColor); 39 | W+="&javaOK=Yes"; 40 | if(typeof(screen)=="object") 41 | { 42 | W+="&screenResolution="+screen.width+"x"+screen.height; 43 | W+="&colorDepth="+screen.colorDepth; 44 | W+="&NSpluginList="; 45 | for( var i=0; i< navigator.plugins.length; i++) 46 | W+=escape(navigator.plugins[i].name)+";"; 47 | } 48 | document.write(''); 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /code-samples/geo/fr/ab_hd_advant.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/fr/ab_hd_advant.jpg -------------------------------------------------------------------------------- /code-samples/geo/fr/ab_hd_left.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/fr/ab_hd_left.jpg -------------------------------------------------------------------------------- /code-samples/geo/fr/akamai.js: -------------------------------------------------------------------------------- 1 | /* Copyright 2017 Akamai Technologies, Inc. All Rights Reserved. 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | 110 | 111 | 112 | 113 | -------------------------------------------------------------------------------- /code-samples/geo/fr/akamai_win.css: -------------------------------------------------------------------------------- 1 | /* Copyright 2017 Akamai Technologies, Inc. All Rights Reserved. 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. */ 15 | 16 | A:link { 17 | COLOR: #3399ff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; TEXT-DECORATION: none 18 | } 19 | A:visited { 20 | COLOR: #ff9933; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; TEXT-DECORATION: none 21 | } 22 | A:active { 23 | COLOR: #3399ff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; TEXT-DECORATION: none 24 | } 25 | A.footer:link { 26 | COLOR: #000099; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; TEXT-DECORATION: none 27 | } 28 | A.footer:visited { 29 | COLOR: #ff9933; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; TEXT-DECORATION: none 30 | } 31 | A.footer:active { 32 | COLOR: #000099; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; TEXT-DECORATION: none 33 | } 34 | A.news:link { 35 | COLOR: #000000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; TEXT-DECORATION: none 36 | } 37 | A.news:visited { 38 | COLOR: #000000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; TEXT-DECORATION: none 39 | } 40 | A.news:active { 41 | COLOR: #000000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; TEXT-DECORATION: none 42 | } 43 | A.bluenews:link { 44 | COLOR: #000099; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 45 | } 46 | A.bluenews:visited { 47 | COLOR: #000099; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 48 | } 49 | A.bluenews:active { 50 | COLOR: #000099; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 51 | } 52 | A.more:link { 53 | COLOR: #0099cc; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 54 | } 55 | A.more:visited { 56 | COLOR: #0099cc; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 57 | } 58 | A.more:active { 59 | COLOR: #0099cc; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 60 | } 61 | A.breadcrumb:link { 62 | COLOR: #3399ff; FONT-FAMILY: Arial,Helvetica,sans-serif; FONT-SIZE: 8pt; TEXT-DECORATION: none 63 | } 64 | A.breadcrumb:visited { 65 | COLOR: #3399ff; FONT-FAMILY: Arial,Helvetica,sans-serif; FONT-SIZE: 8pt; TEXT-DECORATION: none 66 | } 67 | A.breadcrumb:active { 68 | COLOR: #3399ff; FONT-FAMILY: Arial,Helvetica,sans-serif; FONT-SIZE: 8pt; TEXT-DECORATION: none 69 | } 70 | A.subnav:link { 71 | COLOR: #3399ff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 72 | } 73 | A.subnav:visited { 74 | COLOR: #3399ff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 75 | } 76 | A.subnav:active { 77 | COLOR: #3399ff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 78 | } 79 | A.subnavMd:link { 80 | COLOR: #3399ff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 81 | } 82 | A.subnavMd:visited { 83 | COLOR: #3399ff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 84 | } 85 | A.subnavMd:active { 86 | COLOR: #3399ff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 87 | } 88 | A.subnavLg:link { 89 | COLOR: #3399ff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 12pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 90 | } 91 | A.subnavLg:visited { 92 | COLOR: #3399ff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 12pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 93 | } 94 | A.subnavLg:active { 95 | COLOR: #3399ff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 12pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 96 | } 97 | A.sitemap:link { 98 | COLOR: #7a7a7a; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; TEXT-DECORATION: none 99 | } 100 | A.sitemap:visited { 101 | COLOR: #7a7a7a; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; TEXT-DECORATION: none 102 | } 103 | A.sitemap:active { 104 | COLOR: #7a7a7a; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; TEXT-DECORATION: none 105 | } 106 | A.sitemapMd:link { 107 | COLOR: #0092d2; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; TEXT-DECORATION: none 108 | } 109 | A.sitemapMd:visited { 110 | COLOR: #0092d2; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; TEXT-DECORATION: none 111 | } 112 | A.sitemapMd:active { 113 | COLOR: #0092d2; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; TEXT-DECORATION: none 114 | } 115 | A.sitemapLg:link { 116 | COLOR: #000099; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 117 | } 118 | A.sitemapLg:visited { 119 | COLOR: #000099; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 120 | } 121 | A.sitemapLg:active { 122 | COLOR: #000099; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 123 | } 124 | A.small:link { 125 | COLOR: #3399ff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; TEXT-DECORATION: none 126 | } 127 | A.small:visited { 128 | COLOR: #ff9933; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; TEXT-DECORATION: none 129 | } 130 | A.small:active { 131 | COLOR: #3399ff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; TEXT-DECORATION: none 132 | } 133 | A.smwhite:link { 134 | COLOR: #ffffff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; TEXT-DECORATION: none 135 | } 136 | A.smwhite:visited { 137 | COLOR: #ffffff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; TEXT-DECORATION: none 138 | } 139 | A.smwhite:active { 140 | COLOR: #ffffff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; TEXT-DECORATION: none 141 | } 142 | .inactivesubnav { 143 | COLOR: #000000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; FONT-WEIGHT: bold 144 | } 145 | .smText { 146 | COLOR: #000000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt 147 | } 148 | .smArialText { 149 | COLOR: #ff9933; FONT-FAMILY: Arial,Helvetica,sans-serif; FONT-SIZE: 8pt 150 | } 151 | .smTextOr { 152 | COLOR: #ff9933; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt 153 | } 154 | .lgTextOr { 155 | COLOR: #ff9933; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 12pt 156 | } 157 | .lgText { 158 | COLOR: #000000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 12pt 159 | } 160 | .smredText { 161 | COLOR: #ff0000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt 162 | } 163 | .smwhiteText { 164 | COLOR: #ffffff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt 165 | } 166 | .whiteText { 167 | COLOR: #ffffff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; FONT-WEIGHT: bold 168 | } 169 | .lgwhiteText { 170 | COLOR: #ffffff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 12pt; FONT-WEIGHT: bold 171 | } 172 | .smblueText { 173 | COLOR: #0092d2; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt 174 | } 175 | .smdarkblueText { 176 | COLOR: #000099; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt 177 | } 178 | .subhead { 179 | COLOR: #000000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; FONT-WEIGHT: bold 180 | } 181 | .lgsubhead { 182 | COLOR: #000000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 12pt; FONT-WEIGHT: bold 183 | } 184 | .quote { 185 | COLOR: #555555; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt 186 | } 187 | .smquote { 188 | COLOR: #555555; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt 189 | } 190 | .smgray { 191 | COLOR: #7a7a7a; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt 192 | } 193 | .homecopy { 194 | COLOR: #000000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt 195 | } 196 | TD { 197 | COLOR: #000000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt 198 | } 199 | P { 200 | COLOR: #000000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt 201 | } 202 | OL { 203 | COLOR: #000000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt 204 | } 205 | UL { 206 | COLOR: #000000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt 207 | } 208 | BODY { 209 | COLOR: #000000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt 210 | } 211 | .searchresulttext { 212 | COLOR: #000000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 9pt 213 | } 214 | A.searchresultlink:link { 215 | COLOR: #3399ff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 9pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 216 | } 217 | A.searchresultlink:visited { 218 | COLOR: #ff9933; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 9pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 219 | } 220 | A.searchresultlink:active { 221 | COLOR: #3399ff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 9pt; FONT-WEIGHT: bold 222 | } 223 | -------------------------------------------------------------------------------- /code-samples/geo/fr/button3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/fr/button3.gif -------------------------------------------------------------------------------- /code-samples/geo/fr/core_arrow.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/fr/core_arrow.gif -------------------------------------------------------------------------------- /code-samples/geo/fr/core_arrow_blue.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/fr/core_arrow_blue.gif -------------------------------------------------------------------------------- /code-samples/geo/fr/dot_clear.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/fr/dot_clear.gif -------------------------------------------------------------------------------- /code-samples/geo/fr/fr_core_news_hd.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/fr/fr_core_news_hd.gif -------------------------------------------------------------------------------- /code-samples/geo/fr/fr_n_aa.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/fr/fr_n_aa.gif -------------------------------------------------------------------------------- /code-samples/geo/fr/fr_n_cs.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/fr/fr_n_cs.gif -------------------------------------------------------------------------------- /code-samples/geo/fr/fr_n_cu.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/fr/fr_n_cu.gif -------------------------------------------------------------------------------- /code-samples/geo/fr/fr_n_ia.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/fr/fr_n_ia.gif -------------------------------------------------------------------------------- /code-samples/geo/fr/fr_n_ir.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/fr/fr_n_ir.gif -------------------------------------------------------------------------------- /code-samples/geo/fr/fr_n_nr.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/fr/fr_n_nr.gif -------------------------------------------------------------------------------- /code-samples/geo/fr/fr_n_op.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/fr/fr_n_op.gif -------------------------------------------------------------------------------- /code-samples/geo/fr/fr_n_sh.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/fr/fr_n_sh.gif -------------------------------------------------------------------------------- /code-samples/geo/fr/fr_n_sv.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/fr/fr_n_sv.gif -------------------------------------------------------------------------------- /code-samples/geo/fr/fr_n_tc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/fr/fr_n_tc.gif -------------------------------------------------------------------------------- /code-samples/geo/fr/fr_sitesearch2_off.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/fr/fr_sitesearch2_off.gif -------------------------------------------------------------------------------- /code-samples/geo/fr/global_logo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/fr/global_logo.gif -------------------------------------------------------------------------------- /code-samples/geo/fr/home_fr_hd.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/fr/home_fr_hd.gif -------------------------------------------------------------------------------- /code-samples/geo/fr/index.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/fr/index.html -------------------------------------------------------------------------------- /code-samples/geo/fr/stylesheet.js: -------------------------------------------------------------------------------- 1 | /* Copyright 2017 Akamai Technologies, Inc. All Rights Reserved. 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | 28 | -------------------------------------------------------------------------------- /code-samples/geo/index.html: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /code-samples/geo/jp/core_arrow_blue.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/jp/core_arrow_blue.gif -------------------------------------------------------------------------------- /code-samples/geo/jp/core_content_hd2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/jp/core_content_hd2.gif -------------------------------------------------------------------------------- /code-samples/geo/jp/core_hd_nav.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/jp/core_hd_nav.jpg -------------------------------------------------------------------------------- /code-samples/geo/jp/core_logo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/jp/core_logo.gif -------------------------------------------------------------------------------- /code-samples/geo/jp/core_logos_top2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/jp/core_logos_top2.gif -------------------------------------------------------------------------------- /code-samples/geo/jp/core_main_hd.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/jp/core_main_hd.jpg -------------------------------------------------------------------------------- /code-samples/geo/jp/dot_clear.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/jp/dot_clear.gif -------------------------------------------------------------------------------- /code-samples/geo/jp/index.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/jp/index.html -------------------------------------------------------------------------------- /code-samples/geo/jp/navi_edge.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/jp/navi_edge.gif -------------------------------------------------------------------------------- /code-samples/geo/jp/navi_ff.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/jp/navi_ff.gif -------------------------------------------------------------------------------- /code-samples/geo/jp/navi_ffstream.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/jp/navi_ffstream.gif -------------------------------------------------------------------------------- /code-samples/geo/jp/navi_getting.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/jp/navi_getting.gif -------------------------------------------------------------------------------- /code-samples/geo/jp/navi_ia.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/jp/navi_ia.gif -------------------------------------------------------------------------------- /code-samples/geo/jp/navi_news.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/jp/navi_news.gif -------------------------------------------------------------------------------- /code-samples/geo/jp/navi_service.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/jp/navi_service.gif -------------------------------------------------------------------------------- /code-samples/geo/jp/to_us.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/jp/to_us.gif -------------------------------------------------------------------------------- /code-samples/geo/jp/top_news_hd.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/jp/top_news_hd.gif -------------------------------------------------------------------------------- /code-samples/geo/us/NKZvNiaXdmuN22HSfQwSc.js: -------------------------------------------------------------------------------- 1 | /* Copyright 2017 Akamai Technologies, Inc. All Rights Reserved. 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | if (typeof(SERVER) == 'string') 18 | W+="&server="+escape(SERVER); 19 | if (typeof(ORDER) == 'string') 20 | W+="&order="+escape(ORDER); 21 | if (typeof(CONTENTGROUP) == 'string') 22 | W+="&Group="+escape(CONTENTGROUP); 23 | W+="&browserDate="+escape(new Date()); 24 | if (typeof(wtl_Title) == 'string') 25 | {W+="&title="+escape(wtl_Title);} 26 | else 27 | {W+="&title="+escape(document.title);} 28 | if (typeof(wtl_URL) == 'string') 29 | {W+="&url="+escape(wtl_URL);} 30 | else 31 | {W+="&url="+escape(window.document.URL);} 32 | W+="&referrer="+escape(window.document.referrer); 33 | W+="&appname="+escape(navigator.appName); 34 | W+="&appversion="+escape(navigator.appVersion); 35 | W+="&cookieOK="+(navigator.cookieEnabled?"Yes":"No"); 36 | W+="&userLanguage="+(navigator.appName=="Netscape"?navigator.language:navigator.userLanguage); 37 | W+="&platform="+navigator.platform; 38 | W+="&bgColor="+escape(document.bgColor); 39 | W+="&javaOK=Yes"; 40 | if(typeof(screen)=="object") 41 | { 42 | W+="&screenResolution="+screen.width+"x"+screen.height; 43 | W+="&colorDepth="+screen.colorDepth; 44 | W+="&NSpluginList="; 45 | for( var i=0; i< navigator.plugins.length; i++) 46 | W+=escape(navigator.plugins[i].name)+";"; 47 | } 48 | document.write(''); 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /code-samples/geo/us/akamai.js: -------------------------------------------------------------------------------- 1 | /* Copyright 2017 Akamai Technologies, Inc. All Rights Reserved. 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | 110 | 111 | 112 | 113 | -------------------------------------------------------------------------------- /code-samples/geo/us/akamai_win.css: -------------------------------------------------------------------------------- 1 | /* Copyright 2017 Akamai Technologies, Inc. All Rights Reserved. 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. */ 15 | 16 | A:link { 17 | COLOR: #3399ff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; TEXT-DECORATION: none 18 | } 19 | A:visited { 20 | COLOR: #ff9933; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; TEXT-DECORATION: none 21 | } 22 | A:active { 23 | COLOR: #3399ff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; TEXT-DECORATION: none 24 | } 25 | A.footer:link { 26 | COLOR: #000099; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; TEXT-DECORATION: none 27 | } 28 | A.footer:visited { 29 | COLOR: #ff9933; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; TEXT-DECORATION: none 30 | } 31 | A.footer:active { 32 | COLOR: #000099; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; TEXT-DECORATION: none 33 | } 34 | A.news:link { 35 | COLOR: #000000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; TEXT-DECORATION: none 36 | } 37 | A.news:visited { 38 | COLOR: #000000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; TEXT-DECORATION: none 39 | } 40 | A.news:active { 41 | COLOR: #000000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; TEXT-DECORATION: none 42 | } 43 | A.bluenews:link { 44 | COLOR: #000099; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 45 | } 46 | A.bluenews:visited { 47 | COLOR: #000099; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 48 | } 49 | A.bluenews:active { 50 | COLOR: #000099; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 51 | } 52 | A.more:link { 53 | COLOR: #0099cc; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 54 | } 55 | A.more:visited { 56 | COLOR: #0099cc; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 57 | } 58 | A.more:active { 59 | COLOR: #0099cc; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 60 | } 61 | A.breadcrumb:link { 62 | COLOR: #3399ff; FONT-FAMILY: Arial,Helvetica,sans-serif; FONT-SIZE: 8pt; TEXT-DECORATION: none 63 | } 64 | A.breadcrumb:visited { 65 | COLOR: #3399ff; FONT-FAMILY: Arial,Helvetica,sans-serif; FONT-SIZE: 8pt; TEXT-DECORATION: none 66 | } 67 | A.breadcrumb:active { 68 | COLOR: #3399ff; FONT-FAMILY: Arial,Helvetica,sans-serif; FONT-SIZE: 8pt; TEXT-DECORATION: none 69 | } 70 | A.subnav:link { 71 | COLOR: #3399ff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 72 | } 73 | A.subnav:visited { 74 | COLOR: #3399ff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 75 | } 76 | A.subnav:active { 77 | COLOR: #3399ff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 78 | } 79 | A.subnavMd:link { 80 | COLOR: #3399ff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 81 | } 82 | A.subnavMd:visited { 83 | COLOR: #3399ff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 84 | } 85 | A.subnavMd:active { 86 | COLOR: #3399ff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 87 | } 88 | A.subnavLg:link { 89 | COLOR: #3399ff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 12pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 90 | } 91 | A.subnavLg:visited { 92 | COLOR: #3399ff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 12pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 93 | } 94 | A.subnavLg:active { 95 | COLOR: #3399ff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 12pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 96 | } 97 | A.sitemap:link { 98 | COLOR: #7a7a7a; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; TEXT-DECORATION: none 99 | } 100 | A.sitemap:visited { 101 | COLOR: #7a7a7a; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; TEXT-DECORATION: none 102 | } 103 | A.sitemap:active { 104 | COLOR: #7a7a7a; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; TEXT-DECORATION: none 105 | } 106 | A.sitemapMd:link { 107 | COLOR: #0092d2; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; TEXT-DECORATION: none 108 | } 109 | A.sitemapMd:visited { 110 | COLOR: #0092d2; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; TEXT-DECORATION: none 111 | } 112 | A.sitemapMd:active { 113 | COLOR: #0092d2; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; TEXT-DECORATION: none 114 | } 115 | A.sitemapLg:link { 116 | COLOR: #000099; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 117 | } 118 | A.sitemapLg:visited { 119 | COLOR: #000099; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 120 | } 121 | A.sitemapLg:active { 122 | COLOR: #000099; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 123 | } 124 | A.small:link { 125 | COLOR: #3399ff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; TEXT-DECORATION: none 126 | } 127 | A.small:visited { 128 | COLOR: #ff9933; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; TEXT-DECORATION: none 129 | } 130 | A.small:active { 131 | COLOR: #3399ff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; TEXT-DECORATION: none 132 | } 133 | A.smwhite:link { 134 | COLOR: #ffffff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; TEXT-DECORATION: none 135 | } 136 | A.smwhite:visited { 137 | COLOR: #ffffff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; TEXT-DECORATION: none 138 | } 139 | A.smwhite:active { 140 | COLOR: #ffffff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; TEXT-DECORATION: none 141 | } 142 | .inactivesubnav { 143 | COLOR: #000000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt; FONT-WEIGHT: bold 144 | } 145 | .smText { 146 | COLOR: #000000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt 147 | } 148 | .smArialText { 149 | COLOR: #ff9933; FONT-FAMILY: Arial,Helvetica,sans-serif; FONT-SIZE: 8pt 150 | } 151 | .smTextOr { 152 | COLOR: #ff9933; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt 153 | } 154 | .lgTextOr { 155 | COLOR: #ff9933; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 12pt 156 | } 157 | .lgText { 158 | COLOR: #000000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 12pt 159 | } 160 | .smredText { 161 | COLOR: #ff0000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt 162 | } 163 | .smwhiteText { 164 | COLOR: #ffffff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt 165 | } 166 | .whiteText { 167 | COLOR: #ffffff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; FONT-WEIGHT: bold 168 | } 169 | .lgwhiteText { 170 | COLOR: #ffffff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 12pt; FONT-WEIGHT: bold 171 | } 172 | .smblueText { 173 | COLOR: #0092d2; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt 174 | } 175 | .smdarkblueText { 176 | COLOR: #000099; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt 177 | } 178 | .subhead { 179 | COLOR: #000000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt; FONT-WEIGHT: bold 180 | } 181 | .lgsubhead { 182 | COLOR: #000000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 12pt; FONT-WEIGHT: bold 183 | } 184 | .quote { 185 | COLOR: #555555; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt 186 | } 187 | .smquote { 188 | COLOR: #555555; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt 189 | } 190 | .smgray { 191 | COLOR: #7a7a7a; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 8pt 192 | } 193 | .homecopy { 194 | COLOR: #000000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt 195 | } 196 | TD { 197 | COLOR: #000000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt 198 | } 199 | P { 200 | COLOR: #000000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt 201 | } 202 | OL { 203 | COLOR: #000000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt 204 | } 205 | UL { 206 | COLOR: #000000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt 207 | } 208 | BODY { 209 | COLOR: #000000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 10pt 210 | } 211 | .searchresulttext { 212 | COLOR: #000000; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 9pt 213 | } 214 | A.searchresultlink:link { 215 | COLOR: #3399ff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 9pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 216 | } 217 | A.searchresultlink:visited { 218 | COLOR: #ff9933; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 9pt; FONT-WEIGHT: bold; TEXT-DECORATION: none 219 | } 220 | A.searchresultlink:active { 221 | COLOR: #3399ff; FONT-FAMILY: Verdana,Tahoma,Arial; FONT-SIZE: 9pt; FONT-WEIGHT: bold 222 | } 223 | -------------------------------------------------------------------------------- /code-samples/geo/us/button3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/us/button3.gif -------------------------------------------------------------------------------- /code-samples/geo/us/company.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/us/company.gif -------------------------------------------------------------------------------- /code-samples/geo/us/gigaReport_ad3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/us/gigaReport_ad3.gif -------------------------------------------------------------------------------- /code-samples/geo/us/header.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/us/header.jpg -------------------------------------------------------------------------------- /code-samples/geo/us/header_left_bottom.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/us/header_left_bottom.jpg -------------------------------------------------------------------------------- /code-samples/geo/us/home_content_bottom.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/us/home_content_bottom.gif -------------------------------------------------------------------------------- /code-samples/geo/us/home_content_top.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/us/home_content_top.gif -------------------------------------------------------------------------------- /code-samples/geo/us/horiz_line_orange.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/us/horiz_line_orange.gif -------------------------------------------------------------------------------- /code-samples/geo/us/index.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/us/index.html -------------------------------------------------------------------------------- /code-samples/geo/us/international.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/us/international.gif -------------------------------------------------------------------------------- /code-samples/geo/us/investor_relations.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/us/investor_relations.gif -------------------------------------------------------------------------------- /code-samples/geo/us/more_info.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/us/more_info.gif -------------------------------------------------------------------------------- /code-samples/geo/us/network1000.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/us/network1000.jpg -------------------------------------------------------------------------------- /code-samples/geo/us/news.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/us/news.gif -------------------------------------------------------------------------------- /code-samples/geo/us/partners.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/us/partners.gif -------------------------------------------------------------------------------- /code-samples/geo/us/press_circle.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/us/press_circle.gif -------------------------------------------------------------------------------- /code-samples/geo/us/quote1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/us/quote1.jpg -------------------------------------------------------------------------------- /code-samples/geo/us/quote_bottom.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/us/quote_bottom.gif -------------------------------------------------------------------------------- /code-samples/geo/us/quote_left.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/us/quote_left.gif -------------------------------------------------------------------------------- /code-samples/geo/us/quote_right.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/us/quote_right.gif -------------------------------------------------------------------------------- /code-samples/geo/us/search.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/us/search.gif -------------------------------------------------------------------------------- /code-samples/geo/us/search_submit.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/us/search_submit.gif -------------------------------------------------------------------------------- /code-samples/geo/us/solutions.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/us/solutions.gif -------------------------------------------------------------------------------- /code-samples/geo/us/spacer.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/us/spacer.gif -------------------------------------------------------------------------------- /code-samples/geo/us/stylesheet.js: -------------------------------------------------------------------------------- 1 | /* Copyright 2017 Akamai Technologies, Inc. All Rights Reserved. 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | 28 | -------------------------------------------------------------------------------- /code-samples/geo/us/support.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/us/support.gif -------------------------------------------------------------------------------- /code-samples/geo/us/technology.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/us/technology.gif -------------------------------------------------------------------------------- /code-samples/geo/us/top_stories.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/geo/us/top_stories.gif -------------------------------------------------------------------------------- /code-samples/image_rotation.html: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 |
67 |
68 | 69 | 70 | 71 | [Previous] 72 | 73 | 74 | 75 | 76 | 77 | [Next] 78 | 79 | 80 | 81 | 82 | 83 | 84 | -------------------------------------------------------------------------------- /code-samples/includebydate.html: -------------------------------------------------------------------------------- 1 | 16 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /code-samples/index.html: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | EdgeSuite 4.2 ESI Examples 19 | 20 | 21 | 22 |

EdgeSuite 4.2 ESI Examples

23 | 24 |
    25 | 26 |
  • Ad Example
  • 27 | 28 |
      29 | 30 |
    • Displays different HTML ad output based upon the users browser type
    • 31 | 32 |
    • The browser is detected using the HTTP_USER_AGENT variable
    • 33 | 34 |
    • Attempts to esi:include the HTML for the ad by referencing an ad server
    • 35 | 36 |
    • If the ad server cannot be contacted, a default ad is sent to the browser
    • 37 | 38 |
    39 | 40 |
  • Geographic Example using EdgeScape
  • 41 | 42 |
      43 | 44 |
    • Displays the geographic information associated with the client's IP 45 | address
    • 46 | 47 |
    • The geographic information for the client's IP address is stored in 48 | the EdgeScape database and made available through the $(GEO) variable 49 |
    • 50 | 51 |
    • Displays only the geographic information that 52 | is currently available for the client's IP address
    • 53 | 54 |
    • Includes description of each geographic value available
    • 55 | 56 |
    57 | 58 |
  • 59 | 60 |
  • 61 | 62 |
      63 | 64 |
    • Based on the country location of the client, loads corresponding 65 | country home page for the web site.
    • 66 | 67 |
    • Note, only the ESI source code is displayed in this example.
    • 68 |
    69 |
  • Eliminating a Splash Screen for Geographies Example using EdgeScape  70 | 71 |
  • 72 |
      73 |
    • The following ESI example eliminates the need for a splash screen 74 | that gathers an end-users geographic information and directs them to
      75 | the appropriate page accordingly. Using ESI the spash screen can be eliminated 76 | as it can use the EdgeScape information in ESI to send the user automatically 77 | to the appropriate page.
    • 78 |
    • End users country code is checked by ESI's $(GEO) variable and if 79 | it matches US, DE, JP or FR the appropriate country page is returned. If 80 | none of the country codes checked match, a default page is returned.    81 |
    • 82 |
    83 |
      84 | 85 |
    86 | 87 |
      88 | 89 |
    90 | 91 |
  • User Agent Example
  • 92 | 93 |
      94 | 95 |
    • Example to show how to use the HTTP_USER_AGENT variable to determine 96 | the client's browser type, and OS type
    • 97 | 98 |
    99 | 100 |
  • Page footer with View ESI Source Example
  • 101 | 102 |
      103 | 104 |
    • Dynamically creates the view source link based upon the query string 105 | value
    • 106 | 107 |
    • Determines if the page is being called as an esi:included fragment 108 | or being referenced directly so you can view the source of the page itself. 109 |
    • 110 | 111 |
    112 | 113 | 114 |
  • Date Example
  • 115 | 116 |
      117 | 118 |
    • Displays a date string using the $strftime()   function 119 |
    • 120 | 121 |
    122 | 123 |
  • 124 | 125 |
  • 126 | 127 |
      128 | 129 |
    • The example dynamically builds the esi:include source URL based on  130 | the current date.
    • 131 | 132 |
    • Note, only the ESI source code is displayed in this example.
    • 133 | 134 |
    135 | 136 |
  • Loop Example
  • 137 | 138 |
      139 | 140 |
    141 | 142 |
      143 | 144 |
    • Displays multiple values of query string with the same name using 145 |   a list, and recursively iterating through the list by using a recursive 146 | esi:include
    • 147 | 148 |
    • Note, ESI supports up to five levels of includes
    • 149 | 150 |
    151 | 152 |
  • Page Rotation Example (Query String)
  • 153 | 154 |
      155 | 156 |
    • Uses a query string parameter to determine which page to esi:include from a list of pages
    • 157 | 158 |
    • Uses a dictionary of numbers as strings to numbers as numbers to create 159 | the navigation, which requires numeric operators
    • 160 | 161 |
    • Dynamically builds the previous and next links using the $(REQUEST_PATH) 162 | variable
    • 163 | 164 |
    165 | 166 |
  • Page Rotation Example (Cookies)
  • 167 | 168 |
      169 | 170 |
    • Uses a cookie to determine which page to esi:include from a list of pages
    • 171 | 172 |
    • Uses a dictionary of numbers as strings to numbers as numbers to determine 173 | which page to display based on numeric operators
      174 |
    • 175 | 176 |
    • Uses a dictionary of numbers as numbers to numbers as strings to add 177 | the number as string value to the cookie
    • 178 | 179 |
    • The function $add_header() is used to set the cookie used to determine 180 | which page to esi:include
      181 |
    • 182 | 183 |
    184 | 185 |
  • Image Rotation Example
  • 186 | 187 |
      188 | 189 |
    • Uses a query string parameter to determine which image to display in the HTML image tag from a list of images
    • 190 | 191 |
    • Uses a dictionary of numbers as strings to numbers as numbers to create 192 | the navigation, which requires numeric operators
    • 193 | 194 |
    • Dynamically builds the previous and next links using the $(REQUEST_PATH) 195 | variable
      196 |
    • 197 | 198 |
    199 | 200 |
  • Randomly Chosen Image Example
  • 201 | 202 |
      203 |
    • Uses rand() function to randomly display an image picked from a predefined list of images
    • 204 |
    205 | 206 |
  • Web Tour using Query String Example  207 | 208 |
  • 209 | 210 |
      211 | 212 |
    • Uses a query string parameter to 213 | determine which URL to display in the HTML frame from a list of URLs
    • 214 | 215 |
    • The browser will automatically refresh the page after five seconds 216 | with the query string, which will cause next URL to be displayed in the 217 | frame
      218 |
    • 219 | 220 |
    • Dynamically builds the URL to the frame source
    • 221 | 222 |
    223 | 224 |
  • Web Tour using Cookie Example  225 | 226 |
  • 227 | 228 |
      229 | 230 |
    • Uses a cookie to determine which URL to display in the HTML frame from a list of URLs
    • 231 | 232 |
    • The browser will automatically refresh the page after five seconds sending along the cookie, which will cause next URL to be displayed in the frame
    • 233 | 234 |
    • Dynamically builds the URL to the frame source
    • 235 | 236 |
    237 | 238 |
      239 | 240 |
    241 | 242 |
  • Quote Navigation Example      243 |         244 |
      245 | 246 |
    • Uses a query string parameter to determine which humorous quote to include from a list of humorous quotes
    • 247 | 248 |
    • Uses a dictionary of numbers as strings to numbers as numbers to create the navigation, which requires numeric operators
    • 249 | 250 |
    • Dynamically builds the previous and next links using the $(REQUEST_PATH) variable
    • 251 | 252 |
    253 |
  • 254 | 255 |
  • Set Cookie Example
  • 256 | 257 |
      258 | 259 |
    • Determines if a cookie is present and if the cookie if present, displays 260 | the cookie using $(HTTP_COOKIE) variable
    • 261 | 262 |
    • If the cookie is not present, uses the $set 263 | _header() function to add a presistent cookie with a 24 hour expiration 264 | to the response
    • 265 | 266 |
    267 | 268 |
  • Setting Expires and Cache Control Headers for 269 | Downstream Caching
  • 270 | 271 |
      272 | 273 |
    • Sets a 24 hour HTTP Expires and Cache-Control headers to the response 274 | to allow for downstream caches to cache the page and the Expires HTTP-EQUIV 275 | tag to allow browsers to cache the page
      276 |
    • 277 | 278 |
    279 | 280 |
  • Setting Expires and Cache Control Headers 281 | for Downstream Cache Busting
  • 282 | 283 |
      284 | 285 |
    • Sets a HTTP Expires, Cache-Control and Pragma headers to the response 286 | to disallow for downstream caches from caching the page and the Expires 287 | and Pragma HTTP-EQUIV tags to disallow browsers from caching the page.
    • 288 | 289 |
    290 | 291 |
      292 | 293 |
    294 | 295 |
  • Form Processing Example
  • 296 | 297 |
      298 | 299 |
    • Demonstrates how to store state of a multiple page and multiple form submission process
    • 300 | 301 |
    • Uses the $url_decode() function to properly decode the form variables
    • 302 | 303 |
    304 | 305 |
  • Quiz Example
  • 306 | 307 |
      308 | 309 |
    • Demonstrates using form processing logic with ESI and other ESI features.
    • 310 | 311 |
    312 |
313 | 314 | 315 | Download ESI Examples
316 | 317 | 318 | 319 | 320 | 321 | -------------------------------------------------------------------------------- /code-samples/loop.html: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /code-samples/loop_body.html: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | Symbol: $(iter)
20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /code-samples/page1.html: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 |

This is page 1

19 | 20 | -------------------------------------------------------------------------------- /code-samples/page2.html: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 |

This is page 2

19 | 20 | -------------------------------------------------------------------------------- /code-samples/page3.html: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 |

This is page 3

19 | 20 | -------------------------------------------------------------------------------- /code-samples/page_rotation.html: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 20 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | [Previous] 67 | 68 | 69 | 70 | 71 | 72 | [Next] 73 | 74 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /code-samples/page_rotation_cookie.html: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 20 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | $add_header('Set-Cookie','i=' + $(strings{$(page_number)})) 43 | 44 | 45 | 46 | $add_header('Set-Cookie','i=2') 47 | 48 | 49 | 50 | 51 | Cookies: $(HTTP_COOKIE)
52 |
53 | 54 | 55 | 56 | Refresh the page to view new output.
57 | 58 | 59 | -------------------------------------------------------------------------------- /code-samples/quiz.html: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 20 | 21 | ['Alabama','Alaska','Arizona','Arkansas','California','Colorado','Connecticut','Delaware','Florida','Georgia','Hawaii','Idaho','Illinois','Indiana','Iowa','Kansas','Kentucky','Louisiana','Maine','Maryland','Massachusetts','Michigan','Minnesota','Mississippi','Missouri','Montana','Nebraska','Nevada','New Hampshire','New Jersey','New Mexico','New York','North Carolina','North Dakota','Ohio','Oklahoma','Oregon','Pennsylvania','Rhode Island','South Carolina','South Dakota','Tennessee','Texas','Utah','Vermont','Virginia', 'Washington', 'West Virginia', 'Wisconsin', 'Wyoming'] 22 | 23 | 24 | 25 | 26 | ['Montgomery','Juneau','Phoenix','Little Rock','Sacramento','Denver','Hartford','Dover','Tallahaaaassee','Atlanta','Honolulu','Boise','Springfield','Indianapolis','Des Moines','Topeka','Frankfort','Baton Rouge','Augusta','Annapolis','Boston','Lansing','St. Paul','Jackson','Jefferson City','Helena','Lincoln','Carson City','Concord','Trenton','Santa Fe','Albany','Raleigh','Bismarck','Columbus','Oklahoma City','Salem','Harrisburg','Providence','Columbia','Pierre','Nashville','Austin','Salt Lake City','Montpelier','Richmond','Olympia','Charleston','Madison','Cheyenne'] 27 | 28 | 29 | 30 | 31 | {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9,'10':10,'11':11,'12':12,'13':13,'14':14,'15':15,'16':16,'17':17,'18':18,'19':19,'20':20,'21':21,'22':22,'23':23,'24':24,'25':25,'26':26,'27':27,'28':28,'29':29,'30':30,'31':31,'32':32,'33':33,'34':34,'35':35,'36':36,'37':37,'38':38,'39':39,'40':40,'41':41,'42':42,'43':43,'44':44,'45':45,'46':46,'47':47,'48':48,'49':49,'50':50,'51':50} 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | [($rand()%$len($(quiz_w))),($rand()%$len($(quiz_w))),($rand()%$len($(quiz_w))),$(chosen)] 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 |

Welcome!

87 | The quiz consists of ten questions. See if you get them all correct. 88 |
89 | 90 |

Correct!

91 | 92 | 93 |
You have answered $(score) out of $(total) questions correctly. 94 |
95 | 96 |

Wrong!

97 | The capital of $url_decode($(QUERY_STRING{question})) is $(correct_v). 98 |
You have answered $(score) out of $(total) questions correctly. 99 |
100 |
101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 |

Congratulations you are done.

109 | You got $(percent)% of answers correct. 110 | 111 | 112 |

You are perfect!

113 |
114 |
115 |
116 | 117 | 118 | 119 |
120 | 121 | 122 | 123 | 124 | 125 | 126 |

What is the capital of $(quiz_w{$(chosen)})?

127 | 128 | $(choice1) 129 | $(choice2) 130 | $(choice3) 131 | $(choice4) 132 | 133 |

134 |
135 | 136 | 137 | 138 |
139 |
140 |


141 |
142 | -------------------------------------------------------------------------------- /code-samples/quote1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/quote1.gif -------------------------------------------------------------------------------- /code-samples/quote1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/quote1.jpg -------------------------------------------------------------------------------- /code-samples/quote2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/quote2.gif -------------------------------------------------------------------------------- /code-samples/quote2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/quote2.jpg -------------------------------------------------------------------------------- /code-samples/quote3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/quote3.gif -------------------------------------------------------------------------------- /code-samples/quote3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/quote3.jpg -------------------------------------------------------------------------------- /code-samples/quote4.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/quote4.gif -------------------------------------------------------------------------------- /code-samples/quote4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/quote4.jpg -------------------------------------------------------------------------------- /code-samples/quote5.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/quote5.gif -------------------------------------------------------------------------------- /code-samples/quote5.jpg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /code-samples/quote6.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/quote6.gif -------------------------------------------------------------------------------- /code-samples/quote7.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/code-samples/quote7.gif -------------------------------------------------------------------------------- /code-samples/quotes.html: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 20 | 21 | 34 | 35 | 37 | 38 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | $(quote)
92 |
93 | 94 | 95 | 96 | [Previous] 97 | 98 | 99 | 100 | 101 | 102 | [Next] 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | -------------------------------------------------------------------------------- /code-samples/random-image.html: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 20 | 21 | ['quote1.gif','quote2.gif','quote3.gif','quote4.gif','quote5.gif','quote6.gif','quote7.gif'] 22 | 23 | 24 | 25 | 26 | 27 | 28 | 32 | 33 | 34 |
35 | 36 | 37 | 38 |
39 | 40 |
Refresh the page to randomly display an image picked from a predefined list of images. 41 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /code-samples/setcookie.html: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 20 | 21 |

MyCookie: $(HTTP_COOKIE{'MyCookie'})

22 |
23 | 24 |

Setting a Cookie

25 | $add_header('Set-Cookie', 'MyCookie=SomeValue; expires='+$http_time($time()+36000)+'; path=/;') 26 |
27 |
28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /code-samples/today.html: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | Today is $strftime($time(), '%A %B %d, %Y')
20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /code-samples/ua.html: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 20 | 21 |

You are using Microsoft Windows and Microsoft Internet Explorer 5

22 |
23 | 24 |

You are using Microsoft Windows and Microsoft Internet Explorer 4

25 |
26 | 27 |

You are using Microsoft Windows and Netscape

28 |
29 | 30 |

You are using a MacIntosh and Microsoft Internet Explorer

31 |
32 | 33 |

You are using a MacIntosh and Netscape

34 |
35 | 36 |

You are using Unix and Netscape

37 |
38 | 39 |

I don't know what you're using

40 |
41 |
42 | 43 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /code-samples/utils/footer.html: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |

24 | 25 | (You may have to view the page source to view the ESI code after clicking on the link) 26 |

27 | 28 | 29 | Example Home Page
30 |
31 |
32 | 33 | 34 | -------------------------------------------------------------------------------- /code-samples/utils/viewsource.html: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 20 | $(QUERY_STRING{'linktext'})
21 |
22 | 23 | $(QUERY_STRING{'linktext'})
24 |
25 |
26 | -------------------------------------------------------------------------------- /code-samples/web_tour.html: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 29 | 30 | 32 | 33 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | ESI Web Tour 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | -------------------------------------------------------------------------------- /code-samples/web_tour_cookie.html: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 29 | 30 | 32 | 33 | 45 | 46 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | $add_header('Set-Cookie','i=' + $(strings{$(url_number)})) 84 | 85 | 86 | 87 | $add_header('Set-Cookie','i=2') 88 | 89 | 90 | 91 | 92 | 93 | ESI Web Tour 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | -------------------------------------------------------------------------------- /dockerimage-tests/.gitignore: -------------------------------------------------------------------------------- 1 | # Created by .ignore support plugin (hsz.mobi) 2 | ### JetBrains template 3 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm 4 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 5 | 6 | # User-specific stuff: 7 | .idea/**/workspace.xml 8 | .idea/**/tasks.xml 9 | .idea/dictionaries 10 | 11 | # Sensitive or high-churn files: 12 | .idea/**/dataSources/ 13 | .idea/**/dataSources.ids 14 | .idea/**/dataSources.xml 15 | .idea/**/dataSources.local.xml 16 | .idea/**/sqlDataSources.xml 17 | .idea/**/dynamic.xml 18 | .idea/**/uiDesigner.xml 19 | 20 | # Gradle: 21 | .idea/**/gradle.xml 22 | .idea/**/libraries 23 | 24 | # Mongo Explorer plugin: 25 | .idea/**/mongoSettings.xml 26 | 27 | ## File-based project format: 28 | *.iws 29 | 30 | ## Plugin-specific files: 31 | 32 | # IntelliJ 33 | /out/ 34 | 35 | # mpeltonen/sbt-idea plugin 36 | .idea_modules/ 37 | 38 | # JIRA plugin 39 | atlassian-ide-plugin.xml 40 | 41 | # Crashlytics plugin (for Android Studio and IntelliJ) 42 | com_crashlytics_export_strings.xml 43 | crashlytics.properties 44 | crashlytics-build.properties 45 | fabric.properties 46 | ### Ruby template 47 | *.gem 48 | *.rbc 49 | /.config 50 | /coverage/ 51 | /InstalledFiles 52 | /pkg/ 53 | /spec/reports/ 54 | /spec/examples.txt 55 | /test/tmp/ 56 | /test/version_tmp/ 57 | /tmp/ 58 | 59 | # Used by dotenv library to load environment variables. 60 | # .env 61 | 62 | ## Specific to RubyMotion: 63 | .dat* 64 | .repl_history 65 | build/ 66 | *.bridgesupport 67 | build-iPhoneOS/ 68 | build-iPhoneSimulator/ 69 | 70 | ## Specific to RubyMotion (use of CocoaPods): 71 | # 72 | # We recommend against adding the Pods directory to your .gitignore. However 73 | # you should judge for yourself, the pros and cons are mentioned at: 74 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 75 | # 76 | # vendor/Pods/ 77 | 78 | ## Documentation cache and generated files: 79 | /.yardoc/ 80 | /_yardoc/ 81 | /doc/ 82 | /rdoc/ 83 | 84 | ## Environment normalization: 85 | /.bundle/ 86 | /vendor/bundle 87 | /lib/bundler/man/ 88 | 89 | # for a library or gem, you might want to ignore these files since the code is 90 | # intended to run in multiple environments; otherwise, check them in: 91 | # Gemfile.lock 92 | # .ruby-version 93 | # .ruby-gemset 94 | 95 | # unless supporting rvm < 1.11.0 or doing something fancy, ignore this: 96 | .rvmrc 97 | -------------------------------------------------------------------------------- /dockerimage-tests/.idea/.rakeTasks: -------------------------------------------------------------------------------- 1 | 2 | 8 | -------------------------------------------------------------------------------- /dockerimage-tests/.idea/dockerimage-tests.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /dockerimage-tests/.idea/inspectionProfiles/Project_Default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /dockerimage-tests/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /dockerimage-tests/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /dockerimage-tests/.rubocop.yml: -------------------------------------------------------------------------------- 1 | # Relaxed.Ruby.Style 2 | ## Version 2.2 3 | 4 | Style/Alias: 5 | Enabled: false 6 | StyleGuide: https://relaxed.ruby.style/#stylealias 7 | 8 | Style/AsciiComments: 9 | Enabled: false 10 | StyleGuide: https://relaxed.ruby.style/#styleasciicomments 11 | 12 | Style/BeginBlock: 13 | Enabled: false 14 | StyleGuide: https://relaxed.ruby.style/#stylebeginblock 15 | 16 | Style/BlockDelimiters: 17 | Enabled: false 18 | StyleGuide: https://relaxed.ruby.style/#styleblockdelimiters 19 | 20 | Style/CommentAnnotation: 21 | Enabled: false 22 | StyleGuide: https://relaxed.ruby.style/#stylecommentannotation 23 | 24 | Style/Documentation: 25 | Enabled: false 26 | StyleGuide: https://relaxed.ruby.style/#styledocumentation 27 | 28 | Layout/DotPosition: 29 | Enabled: false 30 | StyleGuide: https://relaxed.ruby.style/#layoutdotposition 31 | 32 | Style/DoubleNegation: 33 | Enabled: false 34 | StyleGuide: https://relaxed.ruby.style/#styledoublenegation 35 | 36 | Style/EndBlock: 37 | Enabled: false 38 | StyleGuide: https://relaxed.ruby.style/#styleendblock 39 | 40 | Style/FormatString: 41 | Enabled: false 42 | StyleGuide: https://relaxed.ruby.style/#styleformatstring 43 | 44 | Style/IfUnlessModifier: 45 | Enabled: false 46 | StyleGuide: https://relaxed.ruby.style/#styleifunlessmodifier 47 | 48 | Style/Lambda: 49 | Enabled: false 50 | StyleGuide: https://relaxed.ruby.style/#stylelambda 51 | 52 | Style/ModuleFunction: 53 | Enabled: false 54 | StyleGuide: https://relaxed.ruby.style/#stylemodulefunction 55 | 56 | Style/MultilineBlockChain: 57 | Enabled: false 58 | StyleGuide: https://relaxed.ruby.style/#stylemultilineblockchain 59 | 60 | Style/NegatedIf: 61 | Enabled: false 62 | StyleGuide: https://relaxed.ruby.style/#stylenegatedif 63 | 64 | Style/NegatedWhile: 65 | Enabled: false 66 | StyleGuide: https://relaxed.ruby.style/#stylenegatedwhile 67 | 68 | Style/ParallelAssignment: 69 | Enabled: false 70 | StyleGuide: https://relaxed.ruby.style/#styleparallelassignment 71 | 72 | Style/PercentLiteralDelimiters: 73 | Enabled: false 74 | StyleGuide: https://relaxed.ruby.style/#stylepercentliteraldelimiters 75 | 76 | Style/PerlBackrefs: 77 | Enabled: false 78 | StyleGuide: https://relaxed.ruby.style/#styleperlbackrefs 79 | 80 | Style/Semicolon: 81 | Enabled: false 82 | StyleGuide: https://relaxed.ruby.style/#stylesemicolon 83 | 84 | Style/SignalException: 85 | Enabled: false 86 | StyleGuide: https://relaxed.ruby.style/#stylesignalexception 87 | 88 | Style/SingleLineBlockParams: 89 | Enabled: false 90 | StyleGuide: https://relaxed.ruby.style/#stylesinglelineblockparams 91 | 92 | Style/SingleLineMethods: 93 | Enabled: false 94 | StyleGuide: https://relaxed.ruby.style/#stylesinglelinemethods 95 | 96 | Layout/SpaceBeforeBlockBraces: 97 | Enabled: false 98 | StyleGuide: https://relaxed.ruby.style/#layoutspacebeforeblockbraces 99 | 100 | Layout/SpaceInsideParens: 101 | Enabled: false 102 | StyleGuide: https://relaxed.ruby.style/#layoutspaceinsideparens 103 | 104 | Style/SpecialGlobalVars: 105 | Enabled: false 106 | StyleGuide: https://relaxed.ruby.style/#stylespecialglobalvars 107 | 108 | Style/StringLiterals: 109 | Enabled: false 110 | StyleGuide: https://relaxed.ruby.style/#stylestringliterals 111 | 112 | Style/TrailingCommaInArguments: 113 | Enabled: false 114 | StyleGuide: https://relaxed.ruby.style/#styletrailingcommainarguments 115 | 116 | Style/TrailingCommaInArrayLiteral: 117 | Enabled: false 118 | StyleGuide: https://relaxed.ruby.style/#styletrailingcommainarrayliteral 119 | 120 | Style/TrailingCommaInHashLiteral: 121 | Enabled: false 122 | StyleGuide: https://relaxed.ruby.style/#styletrailingcommainhashliteral 123 | 124 | Style/WhileUntilModifier: 125 | Enabled: false 126 | StyleGuide: https://relaxed.ruby.style/#stylewhileuntilmodifier 127 | 128 | Style/WordArray: 129 | Enabled: false 130 | StyleGuide: https://relaxed.ruby.style/#stylewordarray 131 | 132 | Lint/AmbiguousRegexpLiteral: 133 | Enabled: false 134 | StyleGuide: https://relaxed.ruby.style/#lintambiguousregexpliteral 135 | 136 | Lint/AssignmentInCondition: 137 | Enabled: false 138 | StyleGuide: https://relaxed.ruby.style/#lintassignmentincondition 139 | 140 | Metrics/AbcSize: 141 | Enabled: false 142 | 143 | Metrics/BlockNesting: 144 | Enabled: false 145 | 146 | Metrics/ClassLength: 147 | Enabled: false 148 | 149 | Metrics/ModuleLength: 150 | Enabled: false 151 | 152 | Metrics/CyclomaticComplexity: 153 | Enabled: false 154 | 155 | Metrics/LineLength: 156 | Enabled: false 157 | 158 | Metrics/MethodLength: 159 | Enabled: false 160 | 161 | Metrics/ParameterLists: 162 | Enabled: false 163 | 164 | Metrics/PerceivedComplexity: 165 | Enabled: false 166 | -------------------------------------------------------------------------------- /dockerimage-tests/.ruby-version: -------------------------------------------------------------------------------- 1 | 2.3.3 2 | -------------------------------------------------------------------------------- /dockerimage-tests/Gemfile: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | # Copyright 2017 Akamai Technologies, Inc. All Rights Reserved. 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | 18 | source 'https://rubygems.org' 19 | 20 | gem 'httparty', '~>0.16' 21 | gem 'minitest', '~>5.11' 22 | gem 'rake', '~>12.3' 23 | gem 'rubocop', '~>0.57' 24 | -------------------------------------------------------------------------------- /dockerimage-tests/Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: https://rubygems.org/ 3 | specs: 4 | ast (2.4.0) 5 | httparty (0.16.2) 6 | multi_xml (>= 0.5.2) 7 | jaro_winkler (1.5.1) 8 | minitest (5.11.3) 9 | multi_xml (0.6.0) 10 | parallel (1.12.1) 11 | parser (2.5.1.0) 12 | ast (~> 2.4.0) 13 | powerpack (0.1.2) 14 | rainbow (3.0.0) 15 | rake (12.3.1) 16 | rubocop (0.57.2) 17 | jaro_winkler (~> 1.5.1) 18 | parallel (~> 1.10) 19 | parser (>= 2.5) 20 | powerpack (~> 0.1) 21 | rainbow (>= 2.2.2, < 4.0) 22 | ruby-progressbar (~> 1.7) 23 | unicode-display_width (~> 1.0, >= 1.0.1) 24 | ruby-progressbar (1.9.0) 25 | unicode-display_width (1.4.0) 26 | 27 | PLATFORMS 28 | ruby 29 | 30 | DEPENDENCIES 31 | httparty (~> 0.16) 32 | minitest (~> 5.11) 33 | rake (~> 12.3) 34 | rubocop (~> 0.57) 35 | 36 | BUNDLED WITH 37 | 1.16.1 38 | -------------------------------------------------------------------------------- /dockerimage-tests/README.md: -------------------------------------------------------------------------------- 1 | Tests for the Docker image. 2 | 3 | Ensure you have `docker-compose` installed. 4 | 5 | Use RBenv to ensure you have an appropriate Ruby version. 6 | 7 | Install dependencies using Bundler (`bundle install`). 8 | 9 | Run tests using `bundle exec rake`. -------------------------------------------------------------------------------- /dockerimage-tests/Rakefile: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | # Copyright 2017 Akamai Technologies, Inc. All Rights Reserved. 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | 18 | require 'rake/testtask' 19 | require 'rubocop/rake_task' 20 | 21 | Rake::TestTask.new do |t| 22 | t.test_files = FileList['test/**/*_test.rb'] 23 | end 24 | 25 | RuboCop::RakeTask.new 26 | 27 | task default: %i(rubocop test) 28 | -------------------------------------------------------------------------------- /dockerimage-tests/html/advanced/insensitive_regex.html: -------------------------------------------------------------------------------- 1 | 16 | 17 | true 18 | false 19 | -------------------------------------------------------------------------------- /dockerimage-tests/html/advanced/utf8_assignment.html: -------------------------------------------------------------------------------- 1 | 16 | 17 | $(avalue) -------------------------------------------------------------------------------- /dockerimage-tests/html/advanced/utf8_querystring.html: -------------------------------------------------------------------------------- 1 | 16 | $url_decode($(QUERY_STRING{'value'})) -------------------------------------------------------------------------------- /dockerimage-tests/html/advanced/utf8_regex_1.html: -------------------------------------------------------------------------------- 1 | 16 | 17 | true 18 | false 19 | -------------------------------------------------------------------------------- /dockerimage-tests/html/advanced/utf8_regex_2.html: -------------------------------------------------------------------------------- 1 | 16 | 17 | true 18 | false 19 | -------------------------------------------------------------------------------- /dockerimage-tests/html/advanced/xslt.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 19 | 20 | 21 | 22 | 23 | x 24 | y 25 | z 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /dockerimage-tests/html/advanced/xslt.xsl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 18 | 19 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 |

HTTP variables

35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 |
Request Path REQUEST_PATH:
Request Method REQUEST_METHOD:
Query String QUERY_STRING:
Cookie string HTTP_COOKIE:
User agent string HTTP_USER_AGENT:
57 | 58 | 59 | 60 | 61 | 62 |

Edgescape variables

63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 77 | 78 |
Geo string geo():
Country code geo('country_code'):
Location geo('city'): , 75 | geo('region_code'): 76 |
79 |
80 | 81 | 82 | 83 | 84 | 85 |

Cookie strings

86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 |
Cookie string(full) cookie():
Cookie string(name) cookie('name'):
Cookie string(age) cookie('age'):
100 |
101 | 102 | 103 | 104 | 105 |

Query string strings

106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 |
Query string query-string():
Query string(a) query-string('a'):
Query string(b) akamai:query-string('b'):
120 |
121 | 122 | 123 | 124 | 125 |

UserAgent

126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 |
User Agent - full user-agent():
User Agent (browser) user-agent('browser'):
User Agent (version) user-agent('version'):
User Agent (os) user-agent('os'):
145 |
146 | 147 | 148 | 149 | 150 | 151 | 152 | -------------------------------------------------------------------------------- /dockerimage-tests/html/basic/akamai-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/dockerimage-tests/html/basic/akamai-logo.png -------------------------------------------------------------------------------- /dockerimage-tests/html/basic/geo.html: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 |
My IP Address: $(REMOTE_ADDR)
My Geographical Information
AttributeValue
Country Code$(GEO{'country_code'})
Region Code$(GEO{'region_code'})
City$(GEO{'city'})
DMA$(GEO{'dma'})
MSA$(GEO{'msa'})
PMSA$(GEO{'pmsa'})
Areacode$(GEO{'areacode'})
Latitude$(GEO{'lat'})
Longitude$(GEO{'long'})
County$(GEO{'county'})
FIPS$(GEO{'fips'})
Timezone$(GEO{'timezone'})
Network$(GEO{'network'})
Network Type $(GEO{'network_type'})
Throughput $(GEO{'throughput'})
GEO region $(GEO{'georegion'})
121 | 122 | -------------------------------------------------------------------------------- /dockerimage-tests/html/basic/index.html: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | ESI Test Server <esi:include src="version.txt"/> | Akamai 20 | 21 | 22 | 23 |
24 |
25 |
26 | Akamai 27 |
28 |
29 |

ESI Test Server

30 |
31 |

32 |

Welcome

33 |

34 | Welcome to the ESI Test Server (ETS). ETS allows you 35 | to view and test content that has been accelerated using Edge Side Includes (ESI). 36 |

37 |

38 | 39 |

40 |
41 | 42 |
43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /dockerimage-tests/html/basic/sample.html: -------------------------------------------------------------------------------- 1 | 16 |

If you see this text, inclusions via ESI from localhost are working.

-------------------------------------------------------------------------------- /dockerimage-tests/html/basic/style.css: -------------------------------------------------------------------------------- 1 | /* Copyright 2017 Akamai Technologies, Inc. All Rights Reserved. 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. */ 15 | 16 | html { 17 | } 18 | body { 19 | background: white; 20 | font-family: Arial; 21 | margin: 0; 22 | padding: 0; 23 | color: #444444; 24 | background-color: rgb(71, 74, 76); 25 | } 26 | .page { 27 | color: #57656e; 28 | background-color: white; 29 | } 30 | .page .content { 31 | margin: 0 auto; 32 | padding: 20px 10px; 33 | max-width: 600px; 34 | font-size: 18px; 35 | } 36 | .header a.akamai { 37 | position: fixed; 38 | top: 50px; 39 | left: 50px; 40 | display: block; 41 | width: 140px; 42 | height: 41px; 43 | background: transparent url(akamai-logo.png) 0 0 no-repeat; 44 | text-decoration: none; 45 | } 46 | .header a.akamai:visited { 47 | } 48 | .header a.akamai span { 49 | color: transparent; 50 | } 51 | 52 | h1 { 53 | font-size: 40px; 54 | color: #0193ce; 55 | background-color: #98D3EE; 56 | background-image:linear-gradient(to right, white 0%, #98D3EE 100%); 57 | text-align: right; 58 | padding: 0 4px; 59 | height: 37px; 60 | } 61 | h2 { 62 | /*color: #E36014;*/ 63 | color: #F1843B; 64 | font-size: 20px; 65 | } 66 | .footer { 67 | color: white; 68 | background-color: rgb(71, 74, 76); 69 | text-align: right; 70 | font-size: 11px; 71 | padding: 30px 100px; 72 | } -------------------------------------------------------------------------------- /dockerimage-tests/html/basic/version.txt: -------------------------------------------------------------------------------- 1 | 6.0.0.6 2 | -------------------------------------------------------------------------------- /dockerimage-tests/test/complex_args_test.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | # Copyright 2017 Akamai Technologies, Inc. All Rights Reserved. 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | 18 | require './test/test_helper' 19 | 20 | class ComplexArgsTest < Minitest::Test 21 | def test_multiple_remote_origins_separate_settings 22 | args = '--remote_origin www.example.com --remote_origin www.example.org ' \ 23 | '--remote_origin esi-examples.akamai.com ' \ 24 | '--geo esi-examples.akamai.com:country_code=JP,city=TOKYO ' \ 25 | '--debug www.example.org' 26 | start_containers(args) 27 | 28 | url = "http://#{HOST_HOSTNAME}:#{@esi_port}" 29 | puts "URL: #{url}" 30 | response = HTTParty.get(url, headers: { 'Host' => 'www.example.org' }) 31 | assert_equal(200, response.code) 32 | assert(response.body.include?('/*********************Debugging Section*********************/')) 33 | assert(response.body.downcase.include?('example')) 34 | 35 | url = "http://#{HOST_HOSTNAME}:#{@esi_port}" 36 | puts "URL: #{url}" 37 | response = HTTParty.get(url, headers: { 'Host' => 'www.example.com' }) 38 | assert_equal(200, response.code) 39 | assert(response.body.downcase.include?('example')) 40 | 41 | url = "http://#{HOST_HOSTNAME}:#{@esi_port}/viewsource/geo.html" 42 | puts "URL: #{url}" 43 | response = HTTParty.get(url, headers: { 'Host' => 'esi-examples.akamai.com' }) 44 | assert_equal(200, response.code) 45 | assert(response.body.include?('TOKYO')) 46 | assert(response.body.include?('JP')) 47 | end 48 | end 49 | -------------------------------------------------------------------------------- /dockerimage-tests/test/debug_flag_test.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | # Copyright 2017 Akamai Technologies, Inc. All Rights Reserved. 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | 18 | require './test/test_helper' 19 | 20 | class DebugUsageTest < Minitest::Test 21 | def setup 22 | start_containers("--debug #{DEFAULT_APACHE_HOST}") 23 | end 24 | 25 | def test_esi_debug_works 26 | url = "http://#{HOST_HOSTNAME}:#{@esi_port}/basic/" 27 | puts "URL: #{url}" 28 | response = HTTParty.get(url) 29 | assert_equal(200, response.code) 30 | assert(response.body.include?('/*********************Debugging Section*********************/')) 31 | end 32 | end 33 | -------------------------------------------------------------------------------- /dockerimage-tests/test/geo_test.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | # Copyright 2017 Akamai Technologies, Inc. All Rights Reserved. 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | 18 | require './test/test_helper' 19 | 20 | class GeoTest < Minitest::Test 21 | def test_geo_can_be_disabled 22 | start_containers("--geo #{DEFAULT_APACHE_HOST}:off") 23 | url = "http://#{HOST_HOSTNAME}:#{@esi_port}/basic/geo.html" 24 | puts "URL: #{url}" 25 | response = HTTParty.get(url) 26 | assert_equal(200, response.code) 27 | 28 | geo_values = %w(246 US CA SANJOSE 807 7400 408 SANTACLARA 06085 37.3353 -121.8938 PST dialup) 29 | geo_values.each { |val| assert(!response.body.include?(val), "Value #{val} found in output when it should be absent") } 30 | end 31 | end 32 | -------------------------------------------------------------------------------- /dockerimage-tests/test/gzip/docker-compose.yml: -------------------------------------------------------------------------------- 1 | # Copyright 2017 Akamai Technologies, Inc. All Rights Reserved. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # 6 | # You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | 16 | version: '2' # older version for broader compat 17 | services: 18 | ets: 19 | image: "akamaiesi/ets-docker:latest" 20 | environment: 21 | - ETS_CLI_ARGS=--remote_origin origin --debug origin 22 | links: 23 | - origin 24 | ports: 25 | - 80 26 | origin: 27 | build: nginx-gzip 28 | image: "nginx-gzip" 29 | volumes: 30 | - .:/usr/share/nginx/html -------------------------------------------------------------------------------- /dockerimage-tests/test/gzip/gzip.html: -------------------------------------------------------------------------------- 1 | 16 | $(a_var) -------------------------------------------------------------------------------- /dockerimage-tests/test/gzip/gzip_test.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | # Copyright 2017 Akamai Technologies, Inc. All Rights Reserved. 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | 18 | require './test/test_helper' 19 | 20 | class GzipTest < Minitest::Test 21 | def setup 22 | Dir.chdir(__dir__) { `docker-compose up -d` } 23 | 24 | @esi_port = host_port_for('gzip_ets_1', INTERNAL_PORT) 25 | wait_for_port_or_fail(HOST_HOSTNAME, @esi_port) 26 | end 27 | 28 | def test_gzip_from_origin_supported 29 | url = "http://#{HOST_HOSTNAME}:#{@esi_port}/gzip.html" 30 | puts "URL: #{url}" 31 | 32 | ua_to_expect = Random.new_seed.to_s 33 | response = HTTParty.get( url, headers: { 'Accept-Encoding' => 'deflate, gzip', 'Host' => 'origin', 'User-Agent' => ua_to_expect }) 34 | assert_equal(200, response.code) 35 | 36 | assert(string_has_no_esi_tags?(response.body), "ESI wasn't processed.") 37 | assert(response.body.include?('hello'), "Value 'hello' not found in output") 38 | 39 | nginx_logs = `docker logs gzip_origin_1`.lines 40 | matching_lines = nginx_logs.select do |line| 41 | line.include?(ua_to_expect) && line.include?('deflate, gzip') 42 | end 43 | 44 | assert(matching_lines.length == 1, "Didn't find matching log lines for a request with gzip enabled") 45 | end 46 | 47 | def teardown 48 | Dir.chdir(__dir__) { `docker-compose stop` } 49 | end 50 | end 51 | -------------------------------------------------------------------------------- /dockerimage-tests/test/gzip/nginx-gzip/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM nginx 2 | RUN sed -i'' -e 's/#gzip/gzip/' /etc/nginx/nginx.conf 3 | RUN sed -i'' -e 's/"$http_x_forwarded_for"/"$http_x_forwarded_for" "$http_accept_encoding"/' /etc/nginx/nginx.conf -------------------------------------------------------------------------------- /dockerimage-tests/test/help_test.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | # Copyright 2017 Akamai Technologies, Inc. All Rights Reserved. 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | 18 | require './test/test_helper' 19 | 20 | class HelpTest < Minitest::Test 21 | def test_help_text_should_show 22 | start_containers('--help', true) 23 | sleep 5 24 | assert(container_stderr.include?('For additional documentation')) 25 | end 26 | end 27 | -------------------------------------------------------------------------------- /dockerimage-tests/test/noargs_defaults_test.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | # Copyright 2017 Akamai Technologies, Inc. All Rights Reserved. 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | 18 | require './test/test_helper' 19 | 20 | # Tests that the default no-args config works as expected 21 | class NoArgsDefaultsTest < Minitest::Test 22 | def setup 23 | start_containers 24 | end 25 | 26 | def test_esi_available 27 | url = "http://#{HOST_HOSTNAME}:#{@esi_port}/basic/" 28 | puts "URL: #{url}" 29 | response = HTTParty.get(url) 30 | assert_equal(200, response.code) 31 | assert(response.body.include?('If you see this text, inclusions via ESI from localhost are working.')) 32 | end 33 | 34 | def test_sandbox_available 35 | url = "http://#{HOST_HOSTNAME}:#{@esi_port}/sandbox/basic/" 36 | puts "URL: #{url}" 37 | response = HTTParty.get(url) 38 | assert_equal(200, response.code) 39 | assert(response.body.include?('')) 40 | end 41 | 42 | def test_playground_available 43 | url = "http://#{HOST_HOSTNAME}:#{@esi_port}/playground" 44 | puts "URL: #{url}" 45 | response = HTTParty.get(url) 46 | assert_equal(200, response.code) 47 | assert(response.body.include?('')) 48 | end 49 | 50 | def test_esi_respects_location_dir_no_trailing_slash 51 | url = "http://#{HOST_HOSTNAME}:#{@esi_port}/basic" 52 | puts "URL: #{url}" 53 | response = HTTParty.get(url) 54 | assert_equal(200, response.code) 55 | assert_equal("http://#{HOST_HOSTNAME}:#{@esi_port}/basic/", response.request.last_uri.to_s) 56 | end 57 | 58 | def test_default_geo 59 | url = "http://#{HOST_HOSTNAME}:#{@esi_port}/basic/geo.html" 60 | puts "URL: #{url}" 61 | response = HTTParty.get(url) 62 | assert_equal(200, response.code) 63 | 64 | geo_values = %w(246 US CA SANJOSE 807 7400 408 SANTACLARA 06085 37.3353 -121.8938 PST dialup) 65 | geo_values.each { |val| assert(response.body.include?(val), "Value #{val} not found in output") } 66 | end 67 | end 68 | -------------------------------------------------------------------------------- /dockerimage-tests/test/regex_test.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | # Copyright 2017 Akamai Technologies, Inc. All Rights Reserved. 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | 18 | require './test/test_helper' 19 | 20 | class RegexTest < Minitest::Test 21 | def test_case_insensitive_regex_works 22 | start_containers 23 | url = "http://#{HOST_HOSTNAME}:#{@esi_port}/advanced/insensitive_regex.html" 24 | puts "URL: #{url}" 25 | response = HTTParty.get(url) 26 | assert_equal(200, response.code) 27 | 28 | assert(string_has_no_esi_tags?(response.body), "ESI wasn't processed.") 29 | assert(response.body.include?('true'), "Value 'true' not found in output") 30 | end 31 | 32 | def test_utf8_regex_works_latin 33 | start_containers 34 | url = "http://#{HOST_HOSTNAME}:#{@esi_port}/advanced/utf8_regex_1.html" 35 | puts "URL: #{url}" 36 | response = HTTParty.get(url) 37 | assert_equal(200, response.code) 38 | 39 | assert(string_has_no_esi_tags?(response.body), "ESI wasn't processed.") 40 | assert(response.body.include?('true'), "Value 'true' not found in output") 41 | end 42 | 43 | def test_utf8_regex_works_japanese 44 | skip 'ESITS-32: Need to investigate why Unicode character test class is failing.' 45 | 46 | start_containers 47 | url = "http://#{HOST_HOSTNAME}:#{@esi_port}/advanced/utf8_regex_2.html" 48 | puts "URL: #{url}" 49 | response = HTTParty.get(url) 50 | assert_equal(200, response.code) 51 | 52 | assert(string_has_no_esi_tags?(response.body), "ESI wasn't processed.") 53 | assert(response.body.include?('true'), "Value 'true' not found in output") 54 | end 55 | end 56 | -------------------------------------------------------------------------------- /dockerimage-tests/test/remote_origin_test.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | # Copyright 2017 Akamai Technologies, Inc. All Rights Reserved. 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | 18 | require './test/test_helper' 19 | 20 | # Tests that the debug flag works as expected 21 | class RemoteOriginTest < Minitest::Test 22 | def test_remote_origin_no_port_works 23 | start_containers('--remote_origin www.example.com') 24 | 25 | url = "http://#{HOST_HOSTNAME}:#{@esi_port}" 26 | puts "URL: #{url}" 27 | response = HTTParty.get(url, headers: { 'Host' => 'www.example.com' }) 28 | assert_equal(200, response.code) 29 | assert(response.body.downcase.include?('example')) 30 | end 31 | 32 | def test_remote_origin_defined_port_works 33 | start_containers('--remote_origin www.example.com:443') 34 | 35 | url = "http://#{HOST_HOSTNAME}:#{@esi_port}" 36 | puts "URL: #{url}" 37 | response = HTTParty.get(url, headers: { 'Host' => 'www.example.com' }) 38 | assert_equal(200, response.code) 39 | assert(response.body.downcase.include?('example')) 40 | end 41 | end 42 | -------------------------------------------------------------------------------- /dockerimage-tests/test/short_flags_test.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | # Copyright 2017 Akamai Technologies, Inc. All Rights Reserved. 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | 18 | require './test/test_helper' 19 | 20 | class ShortFlagsTest < Minitest::Test 21 | def test_localhost_debug_shortflag_works 22 | start_containers("-d #{DEFAULT_APACHE_HOST}") 23 | url = "http://#{HOST_HOSTNAME}:#{@esi_port}/basic/" 24 | puts "URL: #{url}" 25 | response = HTTParty.get(url) 26 | assert_equal(200, response.code) 27 | assert(response.body.include?('/*********************Debugging Section*********************/')) 28 | end 29 | 30 | def test_localhost_geo_shortflag_works 31 | start_containers("-g #{DEFAULT_APACHE_HOST}:throughput=ludicrous") 32 | url = "http://#{HOST_HOSTNAME}:#{@esi_port}/basic/geo.html" 33 | puts "URL: #{url}" 34 | response = HTTParty.get(url) 35 | assert_equal(200, response.code) 36 | assert(response.body.include?('ludicrous')) 37 | end 38 | 39 | def test_remote_origin_shortflag_works 40 | start_containers('-r www.example.com') 41 | url = "http://#{HOST_HOSTNAME}:#{@esi_port}" 42 | puts "URL: #{url}" 43 | response = HTTParty.get(url, headers: { 'Host' => 'www.example.com' }) 44 | assert_equal(200, response.code) 45 | assert(response.body.downcase.include?('example')) 46 | end 47 | 48 | def test_help_shortflag_works 49 | start_containers('-h', true) 50 | sleep 5 51 | assert(container_stderr.include?('For additional documentation')) 52 | end 53 | end 54 | -------------------------------------------------------------------------------- /dockerimage-tests/test/test_helper.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | # Copyright 2017 Akamai Technologies, Inc. All Rights Reserved. 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | 18 | require 'minitest/autorun' 19 | require 'httparty' 20 | require 'open3' 21 | 22 | module Minitest 23 | class Test 24 | IMAGE_NAME = 'akamaiesi/ets-docker:latest' 25 | LOCAL_MOUNT_DIR = "#{File.expand_path(__dir__)}/../html" 26 | REMOTE_MOUNT_DIR = '/opt/akamai-ets/virtual/localhost/docs' 27 | MAX_PORT_WAIT = 5 # seconds 28 | HOST_HOSTNAME = 'localhost' 29 | DEFAULT_APACHE_HOST = 'localhost' 30 | INTERNAL_PORT = 80 31 | 32 | def start_containers(args = nil, expect_startup_failure = false) 33 | docker_cmd = 'docker run -d -P ' \ 34 | "-v #{LOCAL_MOUNT_DIR}:#{REMOTE_MOUNT_DIR} #{IMAGE_NAME} #{args.nil? ? '' : args}" 35 | puts "Docker run command: #{docker_cmd}" 36 | 37 | stdout_stderr, status = Open3.capture2(docker_cmd) 38 | unless status.success? 39 | msg = "Docker run exited with code #{status.to_i} and output:\n#{stdout_stderr}" 40 | puts msg 41 | fail msg 42 | end 43 | 44 | @container_id = stdout_stderr.delete("\n") 45 | 46 | return if expect_startup_failure 47 | 48 | @esi_port = host_port_for(@container_id, INTERNAL_PORT) 49 | wait_for_port_or_fail(HOST_HOSTNAME, @esi_port) 50 | rescue StandardError => e 51 | if `docker inspect -f {{.State.Running}} #{@container_id}`.start_with? 'false' 52 | puts "Container #{@container_id} wasn't running after " \ 53 | 'port check failure.' 54 | puts "Container exit code was: #{`docker inspect -f {{.State.ExitCode}} #{@container_id}`}" 55 | puts "Container output was:\n#{`docker logs #{@container_id}`}" 56 | end 57 | puts 'Error in start_containers' 58 | puts e 59 | fail 'Error in start_containers' 60 | end 61 | 62 | def teardown 63 | `docker kill #{@container_id}` 64 | `docker rm #{@container_id}` 65 | rescue StandardError => e 66 | puts 'Error in teardown:' 67 | puts e 68 | end 69 | 70 | ## 71 | # Waits for the ports to be open, with retries in between 72 | def wait_for_port_or_fail(host, port) 73 | result = false 74 | 3.times do 75 | # ensure we wait a minimum between retries 76 | start_time = Time.now 77 | result = check_port_for_http_response(host, port) 78 | check_time = Time.now - start_time 79 | break if result 80 | 81 | if check_time < 10 82 | sleep 10 - check_time 83 | end 84 | end 85 | return if result 86 | fail 'Timeout waiting for port to be open.' 87 | end 88 | 89 | def check_port_for_http_response(host, port) 90 | url = "http://#{host}:#{port}" 91 | response = HTTParty.get(url, timeout: MAX_PORT_WAIT) 92 | !response.code.nil? 93 | rescue StandardError 94 | false 95 | end 96 | 97 | def string_has_no_esi_tags?(str) 98 | str !~ / echoval }) 39 | assert_equal(200, response.code) 40 | 41 | response.body.force_encoding('UTF-8') 42 | assert(response.body.include?(echoval), "Value '#{echoval}' not found in output") 43 | end 44 | end 45 | -------------------------------------------------------------------------------- /dockerimage-tests/test/xslt_test.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | # Copyright 2018 Akamai Technologies, Inc. All Rights Reserved. 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | 18 | require './test/test_helper' 19 | 20 | class XsltTest < Minitest::Test 21 | def setup 22 | @test_file = '/advanced/xslt.xml' 23 | @param_a = '482e3f' 24 | @param_b = '2ce330' 25 | @query_string = "a=#{@param_a}&b=#{@param_b}" 26 | @expected_query_string = @query_string.gsub(/&/, '&') 27 | 28 | @user_agent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:60.0) Gecko/20100101 Firefox/60.0" 29 | @ua_browser = 'MOZILLA' 30 | @ua_version = 5 31 | @ua_os = 'MAC' 32 | 33 | @cookie_name = 'Bora Horza Gobuchul' 34 | @cookie_age = 314 35 | @cookies = ["name=#{@cookie_name}", "age=#{@cookie_age}"] 36 | @cookie_header = @cookies.join('; ') 37 | 38 | @geo_str = 'georegion=246,country_code=US,region_code=CA,city=SANJOSE,dma=807,pmsa=7400,areacode=408,county=SANTACLARA,fips=06085,lat=37.3353,long=-121.8938,timezone=PST,network_type=dialup' 39 | @geo_country = 'US' 40 | @geo_region = 'CA' 41 | 42 | start_containers 43 | end 44 | 45 | def request 46 | url = "http://#{HOST_HOSTNAME}:#{@esi_port}#{@test_file}?#{@query_string}" 47 | puts "URL: #{url}" 48 | 49 | headers = { 50 | 'User-Agent' => @user_agent, 51 | 'Cookie' => @cookie_header 52 | } 53 | 54 | response = HTTParty.get( 55 | url, 56 | headers: headers 57 | ) 58 | 59 | assert_equal(200, response.code) 60 | response 61 | end 62 | 63 | def test_http_vars 64 | response = request 65 | 66 | assert_includes(response.body, "REQUEST_PATH: #{@test_file}") 67 | assert_includes(response.body, 'REQUEST_METHOD: GET') 68 | assert_includes(response.body, "QUERY_STRING: #{@expected_query_string}") 69 | assert_includes(response.body, "HTTP_COOKIE: #{@cookie_header}") 70 | assert_includes(response.body, "HTTP_USER_AGENT: #{@user_agent}") 71 | end 72 | 73 | def test_geo_fn 74 | response = request 75 | 76 | assert_includes(response.body, "geo(): #{@geo_str}") 77 | assert_includes(response.body, "geo('country_code'): #{@geo_country}") 78 | assert_includes(response.body, "geo('region_code'): #{@geo_region}") 79 | end 80 | 81 | def test_cookie_fn 82 | response = request 83 | 84 | assert_includes(response.body, "cookie(): #{@cookie_header}") 85 | assert_includes(response.body, "cookie('name'): #{@cookie_name}") 86 | assert_includes(response.body, "cookie('age'): #{@cookie_age}") 87 | end 88 | 89 | def test_querystring_fn 90 | response = request 91 | 92 | assert_includes(response.body, "query-string(): #{@expected_query_string}") 93 | assert_includes(response.body, "query-string('a'): #{@param_a}") 94 | assert_includes(response.body, "query-string('b'): #{@param_b}") 95 | end 96 | 97 | def test_useragent_fn 98 | response = request 99 | 100 | assert_includes(response.body, "user-agent(): #{@user_agent}") 101 | assert_includes(response.body, "user-agent('browser'): #{@ua_browser}") 102 | assert_includes(response.body, "user-agent('version'): #{@ua_version}") 103 | assert_includes(response.body, "user-agent('os'): #{@ua_os}") 104 | end 105 | end 106 | -------------------------------------------------------------------------------- /ets-diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akamai/esi-test-server-docker/a35d47f08e435735d90517b50d010cb7895ee69e/ets-diagram.png -------------------------------------------------------------------------------- /licenses/Akamai.md: -------------------------------------------------------------------------------- 1 | LICENSE AGREEMENT 2 | 3 | By downloading software ("Software") of Akamai Technologies, Inc. ("Akamai") 4 | from this site, you agree to the terms and conditions contained in this License 5 | Agreement (the "Agreement"). Please read this Agreement carefully before 6 | downloading or attempting to download this Software. Akamai will license the 7 | Software to you only if you first accept the terms of this Agreement. By 8 | downloading the Software, you agree to these terms. If you do not agree to the 9 | terms of this Agreement, do not download the Software. The Software includes 10 | computer programs (machine-readable instructions, data, and related 11 | documentation). The Software is owned by Akamai and is copyrighted and licensed 12 | and not sold. 13 | 14 | 1. License. You have a non-exclusive, personal and non-transferable license to 15 | use the Software solely in connection with Akamai EdgeSuite Services. You 16 | will ensure that anyone who uses the Software does so only in compliance with 17 | the terms of this Agreement. 18 | 19 | 2. Restrictions. You may not use, copy, modify or distribute the Software except 20 | as provided in this Agreement. Except as permitted by applicable law and this 21 | Agreement, you may not decompile, reverse engineer, disassemble, modify, 22 | rent, lease, loan, distribute, sublicense, or create derivative works from, 23 | the Software or transmit the Software over a network. You may not use or 24 | otherwise export the Software except as authorized by United States law and 25 | the laws of the jurisdiction in which the Software was obtained. In 26 | particular, but without limitation, none of the Software may be used or 27 | otherwise exported or reexported (a) into (or to a national or resident of) a 28 | United States embargoed country or (b) to anyone on the U.S. Treasury 29 | Department's list of Specially Designated Nationals or the U.S. Department of 30 | Commerce's Table of Denial Orders. By using the Software, you represent and 31 | warrant that you are not located in, under control of, or a national or 32 | resident of any country or on any such list. 33 | 34 | 3. No Warranty On Software. You use the Software entirely at your own risk. 35 | Akamai is providing the Software to you "AS IS" and without warranty. You are 36 | not entitled to any hard copy documentation, maintenance, support or updates for 37 | the Software. AKAMAI EXPRESSLY DISCLAIMS ALL WARRANTIES RELATED TO THE SOFTWARE, 38 | EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 39 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. AKAMAI DOES NOT WARRANT 40 | THAT THE FUNCTIONS CONTAINED IN THE SOFTWARE WILL MEET YOUR REQUIREMENTS, OR 41 | THAT THE OPERATION OF THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR-FREE, OR THAT 42 | DEFECTS IN THE SOFTWARE WILL BE CORRECTED.  FURTHERMORE, AKAMAI DOES NOT WARRANT 43 | OR MAKE ANY REPRESENTATIONS REGARDING THE USE OR THE RESULTS OF THE USE OF THE 44 | SOFTWARE OR RELATED DOCUMENTATION IN TERMS OF THEIR CORRECTNESS, ACCURACY, 45 | RELIABILITY OR OTHERWISE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF 46 | IMPLIED WARRANTIES, SO PORTIONS OF THE ABOVE EXCLUSION MAY NOT APPLY TO YOU. 47 | 48 | 4. Limitation Of Liability. In no event shall Akamai be liable to you for any 49 | damages exceeding the amount paid for the Software. UNDER NO CIRCUMSTANCES, 50 | INCLUDING NEGLIGENCE, SHALL AKAMAI BE LIABLE FOR ANY INCIDENTAL, SPECIAL, 51 | INDIRECT OR CONSEQUENTIAL DAMAGES ARISING OUT OF OR RELATING TO THIS LICENSE, 52 | INCLUDING, BUT NOT LIMITED TO, DAMAGES RESULTING FROM ANY LOSS OF DATA CAUSED BY 53 | THE SOFTWARE. SOME JURISDICTIONS DO NOT ALLOW THE LIMITATION OF INCIDENTAL OR 54 | CONSEQUENTIAL DAMAGES SO THIS LIMITATION MAY NOT APPLY TO YOU. 55 | 56 | 5. Government End Users. If you are acquiring the Software on behalf of any part 57 | of the United States Government, the following provisions apply. The Software 58 | and accompanying documentation are deemed to be "commercial computer 59 | software" and "commercial computer software documentation," respectively, 60 | pursuant to DFAR Section 227.7202 and FAR 12.212(b), as applicable. Any use, 61 | modification, reproduction, release, performance, display or disclosure of 62 | the Software and/or the accompanying documentation by the U.S. Government or 63 | any of its agencies shall be governed solely by the terms of this Agreement 64 | and shall be prohibited except to the extent expressly permitted by the terms 65 | of this Agreement. Any technical data provided that is not covered by the 66 | above provisions is deemed to be "technical data-commercial items" pursuant 67 | to DFAR Section 227.7015(a). Any use, modification, reproduction, release, 68 | performance, display or disclosure of such technical data shall be governed 69 | by the terms of DFAR Section 220.7015(b). 70 | 71 | 6. Controlling Law and Severability. This Agreement shall be governed by the 72 | laws of the United States and The Commonwealth of Massachusetts. If for any 73 | reason a court of competent jurisdiction finds any provision, or portion 74 | thereof, to be unenforceable, the remainder of this Agreement shall continue 75 | in full force and effect. Any dispute regarding this Agreement shall be 76 | resolved in either the state or federal courts in Massachusetts. 77 | 78 | 7. Complete Agreement. This Agreement constitutes the entire agreement between 79 | the parties with respect to the subject matter hereof and supersedes all 80 | prior or contemporaneous understandings regarding such subject matter. No 81 | amendment to or modification of this Agreement will be binding unless in 82 | writing. 83 | 84 | 8. Included in this software package is code from third parties. Such code is 85 | licensed under its own terms and conditions which, by installing and using 86 | the Software you also hereby agree to abide by. 87 | -------------------------------------------------------------------------------- /licenses/Apache.md: -------------------------------------------------------------------------------- 1 | Certain code licensed under the Apache License, Version 2.0 (the "License"); you 2 | may not use this file except in compliance with the License. You may obtain a 3 | copy of the License at http://www.apache.org/licenses/LICENSE-2.0 4 | 5 | Unless required by applicable law or agreed to in writing, software distributed 6 | under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 7 | CONDITIONS OF ANY KIND, either express or implied. See the License for the 8 | specific language governing permissions and limitations under the License. 9 | -------------------------------------------------------------------------------- /licenses/Curl.md: -------------------------------------------------------------------------------- 1 | COPYRIGHT AND PERMISSION NOTICE 2 | 3 | Copyright (c) 1996 - 2017, Daniel Stenberg, daniel@haxx.se, and many contributors, see the THANKS file. 4 | 5 | All rights reserved. 6 | 7 | Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | 11 | Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization of the copyright holder. -------------------------------------------------------------------------------- /licenses/NewsCorpAustralia.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2017 News Corp Australia 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 6 | 7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /playground/esi_local_playground.conf.tmpl: -------------------------------------------------------------------------------- 1 | # Copyright 2017 Akamai Technologies, Inc. All Rights Reserved. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # 6 | # You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | 16 | LoadModule macro_module modules/mod_macro.so 17 | 18 | IncludeOptional conf/ets/macros/*.macro 19 | 20 | Listen 82 21 | 22 | 23 | SetOutputFilter INFLATE 24 | 25 | 26 | Use Playground "preview" "off" "SUBST_GEO_SUBST" 27 | Use Playground "debug" "on" "SUBST_GEO_SUBST" 28 | UndefMacro Playground 29 | 30 | IncludeOptional conf/ets/vh_*.conf -------------------------------------------------------------------------------- /run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Copyright 2017 Akamai Technologies, Inc. All Rights Reserved. 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | 18 | set -e 19 | 20 | /opt/akamai-ets/bin/ets-cli-config $ETS_CLI_ARGS $@ 21 | PATH=/opt/akamai-ets/bin:$PATH 22 | akamai-ets > /tmp/nodejs.log 2>&1 --------------------------------------------------------------------------------