commit 82eaa31d0a8e82c0934d8639a6b2e99830b0b293
parent b4025837dad5952e60c31cc16b83498d1e4f33ba
Author: Martin Schanzenbach <schanzen@gnunet.org>
Date: Tue, 19 Jul 2022 15:52:46 +0200
add tos rest
Diffstat:
| M | go.mod | | | 7 | +++++++ |
| A | go.sum | | | 18 | ++++++++++++++++++ |
| A | pkg/rest/tos.go | | | 98 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
3 files changed, 123 insertions(+), 0 deletions(-)
diff --git a/go.mod b/go.mod
@@ -1,3 +1,10 @@
module taler.net/taler-go.git
go 1.18
+
+require (
+ golang.org/x/text v0.3.7
+ gopkg.in/ini.v1 v1.66.6
+)
+
+require github.com/stretchr/testify v1.8.0 // indirect
diff --git a/go.sum b/go.sum
@@ -0,0 +1,18 @@
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
+github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk=
+github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
+golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
+golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/ini.v1 v1.66.6 h1:LATuAqN/shcYAOkv3wl2L4rkaKqkcgTBQjOyYDvcPKI=
+gopkg.in/ini.v1 v1.66.6/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
+gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/pkg/rest/tos.go b/pkg/rest/tos.go
@@ -0,0 +1,98 @@
+package tos
+
+import (
+ "fmt"
+ "io/ioutil"
+ "log"
+ "mime"
+ "net/http"
+ "strings"
+
+ "golang.org/x/text/language"
+ "gopkg.in/ini.v1"
+)
+
+func ServiceTermsResponse(s ini.Section, w http.ResponseWriter, r *http.Request) {
+ fileType := s.Key("default_doc_filetype").MustString("text/html")
+ termsLocation := s.Key("default_tos_path").MustString("terms/")
+ for _, typ := range r.Header["Accept"] {
+ for _, a := range strings.Split(s.Key("supported_doc_filetypes").String(), " ") {
+ if typ == a {
+ fileType = a
+ }
+ }
+ }
+
+ if len(r.Header.Get("Accept-Language")) != 0 {
+ acceptLangs, _, _ := language.ParseAcceptLanguage(r.Header.Get("Accept-Language"))
+ for _, lang := range acceptLangs {
+ extensions, _ := mime.ExtensionsByType(fileType)
+ for _, ext := range extensions {
+ docFile := fmt.Sprintf("%s/%s/0%s", termsLocation, lang.String(), ext)
+ log.Printf("Trying %s\n", docFile)
+ fileBytes, err := ioutil.ReadFile(docFile)
+ if nil == err {
+ w.Header().Set("Content-Type", fileType)
+ w.Write(fileBytes)
+ return
+ }
+ }
+ }
+ }
+ // Default document in expected/default format
+ defaultLanguage := s.Key("default_doc_lang").MustString("en")
+ extensions, _ := mime.ExtensionsByType(fileType)
+ for _, ext := range extensions {
+ docFile := fmt.Sprintf("%s/%s/0%s", termsLocation, defaultLanguage, ext)
+ log.Println("Trying " + docFile)
+ fileBytes, err := ioutil.ReadFile(docFile)
+ if nil == err {
+ w.Header().Set("Content-Type", fileType)
+ w.Write(fileBytes)
+ return
+ }
+ }
+ w.WriteHeader(http.StatusNotFound)
+}
+
+func ServicePrivacyPolicyResponse(s *ini.Section, w http.ResponseWriter, r *http.Request) {
+ fileType := s.Key("default_doc_filetype").MustString("text/html")
+ termsLocation := s.Key("default_pp_path").MustString("privacy/")
+ for _, typ := range r.Header["Accept"] {
+ for _, a := range strings.Split(s.Key("supported_doc_filetypes").String(), " ") {
+ if typ == a {
+ fileType = a
+ }
+ }
+ }
+
+ if len(r.Header.Get("Accept-Language")) != 0 {
+ acceptLangs, _, _ := language.ParseAcceptLanguage(r.Header.Get("Accept-Language"))
+ for _, lang := range acceptLangs {
+ extensions, _ := mime.ExtensionsByType(fileType)
+ for _, ext := range extensions {
+ docFile := fmt.Sprintf("%s/%s/0%s", termsLocation, lang.String(), ext)
+ log.Printf("Trying %s\n", docFile)
+ fileBytes, err := ioutil.ReadFile(docFile)
+ if nil == err {
+ w.Header().Set("Content-Type", fileType)
+ w.Write(fileBytes)
+ return
+ }
+ }
+ }
+ }
+ // Default document in expected/default format
+ defaultLanguage := s.Key("default_doc_lang").MustString("en")
+ extensions, _ := mime.ExtensionsByType(fileType)
+ for _, ext := range extensions {
+ docFile := fmt.Sprintf("%s/%s/0%s", termsLocation, defaultLanguage, ext)
+ fileBytes, err := ioutil.ReadFile(docFile)
+ if nil == err {
+ w.Header().Set("Content-Type", fileType)
+ w.Write(fileBytes)
+ return
+ }
+ }
+ w.WriteHeader(http.StatusNotFound)
+}