Package core/template for TemplateHandler¶
Summary¶
This is the design document of core/template package that provides TemplateHandler resource.
TemplateHandler serves static contents.
Motivation¶
Serving static content is used in some situation such as serving static error pages or login pages.
Goals¶
- TemplateHandler serves static content.
Non-Goals¶
Technical Design¶
Serving template content¶
TemplateHandler serve static content that are defined in configuration file.
Serving static content flows:
- TemplateHandler checks
Acceptheader to determine the response content. - TemplateHandler looks for the pre-defined content that matches to the accepted content type.
- TemplateHandler generate response content. JSON or Queries in the request can be embedded to the template.
- TemplateHandler returns generated content.
So the request header should contain Accept like this.
/foo HTTP/1.1
Accept: text/plain
This figure shows how the TemplateHandler works.
TemplateHandler implements http.Handler interface.
type Handler interface {
ServeHTTP(ResponseWriter, *Request)
}
Template engines¶
TemplateHandler provides 3 types of templates.
- Text: Template engine that use the given text as it is.
- GoText: Template engine that leverages text/template.
- GoHTML: Template engine that leverages html/template.
Example of Text template will be like below.
This is just a plain text.
Key-value information given by the JSON requests, form requests or requests with URL queries CANNOT be embedded in the template.
AILERON Gateway
Hello World!
Example of GoText template will be like below.
This template should follow the text/template format.
Key-value information given by the JSON requests, form requests or requests with URL queries CAN be embedded in the template.
{
"app": "AILERON Gateway",
"hello": "world!",
"foo": "{{ .foo }}"
}
Example of GoHTML template will be like below.
This template should follow the html/template format.
Key-value information given by the JSON requests, form requests or requests with URL queries CAN be embedded in the template.
<!doctype html>
<html>
<head>
<title>AILERON Gateway</title>
</head>
<body>
<h1>AILERON Gateway</h1>
<p>Hello World!</p>
<p>foo={{ .foo }}</p>
</body>
</html>
Security consideration¶
TemplateHandler consider these things for security.
- MIME sniffing
X-Content-Type-Options: nosniffis added to the responses.
Test Plan¶
Unit Tests¶
Unit tests are implemented and passed.
- All functions and methods are covered.
- Coverage objective 98%.
Integration Tests¶
Integration tests are implemented with these aspects.
- TemplateHandler works as a handler.
- TemplateHandler works with input configuration.
- TemplateHandler can serve pre-defined template by checking the
Acceptheader. - TemplateHandler returns HTTP error correctly when an error occurred.
e2e Tests¶
e2e tests are implemented with these aspects.
- TemplateHandler works as a handler.
- TemplateHandler works with input configuration.
- TemplateHandler can serve pre-defined template by checking the
Acceptheader. - TemplateHandler returns HTTP error correctly when an error occurred.
Fuzz Tests¶
Not planned.
Benchmark Tests¶
Not planned.
Chaos Tests¶
Not planned.
Future works¶
None.
References¶
None.