[server] Add support for index files

This commit is contained in:
Ciprian Dorin Craciun 2018-11-09 16:11:32 +02:00
parent 40826c8e3a
commit f595b7653f
2 changed files with 98 additions and 6 deletions

70
.x-run
View file

@ -52,7 +52,7 @@
<< go / execute / archiver << go / execute / archiver / debug
"${X_RUN[@]}" ':: go / build / archiver / debug' "${X_RUN[@]}" ':: go / build / archiver / debug'
exec -- ./.outputs/archiver-debug.elf "${@}" exec -- ./.outputs/archiver-debug.elf "${@}"
exit -- 1 exit -- 1
@ -181,3 +181,71 @@
exit -- 0 exit -- 0
!! !!
<< examples / python-2.7.15-docs-html / archive
exec -- "${X_RUN[@]}" ':: go / execute / archiver / debug' \
--sources ./.databases/python-2.7.15-docs-html \
--archive ./.databases/python-2.7.15-docs-html.cdb \
--debug \
"${@}" \
#
exit -- 1
!!
<< examples / python-2.7.15-docs-html / archive / gzip
exec -- "${X_RUN[@]}" ':: go / execute / archiver / debug' \
--sources ./.databases/python-2.7.15-docs-html \
--archive ./.databases/python-2.7.15-docs-html-gzip.cdb \
--compress gzip \
--debug \
"${@}" \
#
exit -- 1
!!
<< examples / python-2.7.15-docs-html / archive / brotli
exec -- "${X_RUN[@]}" ':: go / execute / archiver / debug' \
--sources ./.databases/python-2.7.15-docs-html \
--archive ./.databases/python-2.7.15-docs-html-brotli.cdb \
--compress brotli \
--debug \
"${@}" \
#
exit -- 1
!!
<< examples / python-2.7.15-docs-html / serve
exec -- "${X_RUN[@]}" ':: go / execute / server / debug' \
--archive ./.databases/python-2.7.15-docs-html.cdb \
--bind 127.198.53.69:8080 \
--debug \
"${@}" \
#
exit -- 1
!!
<< examples / python-2.7.15-docs-html / serve / gzip
exec -- "${X_RUN[@]}" ':: go / execute / server / debug' \
--archive ./.databases/python-2.7.15-docs-html-gzip.cdb \
--bind 127.198.53.69:8080 \
--debug \
"${@}" \
#
exit -- 1
!!
<< examples / python-2.7.15-docs-html / serve / brotli
exec -- "${X_RUN[@]}" ':: go / execute / server / debug' \
--archive ./.databases/python-2.7.15-docs-html-brotli.cdb \
--bind 127.198.53.69:8080 \
--debug \
"${@}" \
#
exit -- 1
!!

View file

@ -54,16 +54,40 @@ func (_server *server) ServeHTTP (_response http.ResponseWriter, _request *http.
if (_path != "/") && (_path[len (_path) - 1] == '/') { if (_path != "/") && (_path[len (_path) - 1] == '/') {
_path_0 = _path[: len (_path) - 1] _path_0 = _path[: len (_path) - 1]
} }
for _, _namespace := range []string {NamespaceFilesContent, NamespaceFoldersContent, NamespaceFoldersEntries} { _found : for _, _namespace := range []string {NamespaceFilesContent, NamespaceFoldersContent, NamespaceFoldersEntries} {
_key := fmt.Sprintf ("%s:%s", _namespace, _path_0) _key := fmt.Sprintf ("%s:%s", _namespace, _path_0)
if _value, _error := _server.cdbReader.Get ([]byte (_key)); _error == nil { if _value, _error := _server.cdbReader.Get ([]byte (_key)); _error == nil {
if _value != nil { if _value != nil {
_fingerprint = string (_value) _fingerprint = string (_value)
if ((_namespace == NamespaceFoldersContent) || (_namespace == NamespaceFoldersEntries)) && (_path == _path_0) && (_path != "/") { if (_namespace == NamespaceFoldersContent) || (_namespace == NamespaceFoldersEntries) {
if (_path == _path_0) && (_path != "/") {
_server.ServeRedirect (_response, http.StatusTemporaryRedirect, _path + "/") _server.ServeRedirect (_response, http.StatusTemporaryRedirect, _path + "/")
return return
} }
break }
if _namespace == NamespaceFoldersEntries {
for _, _index := range []string {
"index.html", "index.htm",
"index.xhtml", "index.xht",
"index.txt",
"index.json",
"index.xml",
} {
_pathIndex := _path_0 + "/" + _index
if _path_0 == "/" {
_pathIndex = "/" + _index
}
_key := fmt.Sprintf ("%s:%s", NamespaceFilesContent, _pathIndex)
if _value, _error := _server.cdbReader.Get ([]byte (_key)); _error == nil {
_fingerprint = string (_value)
break _found
} else {
_server.ServeError (_response, http.StatusInternalServerError, _error)
return
}
}
}
break _found
} }
} else { } else {
_server.ServeError (_response, http.StatusInternalServerError, _error) _server.ServeError (_response, http.StatusInternalServerError, _error)