tos.go (2935B)
1 package tos 2 3 import ( 4 "fmt" 5 "io/ioutil" 6 "log" 7 "mime" 8 "net/http" 9 "strings" 10 11 "golang.org/x/text/language" 12 "gopkg.in/ini.v1" 13 ) 14 15 func ServiceTermsResponse(s *ini.Section, w http.ResponseWriter, r *http.Request) { 16 fileType := s.Key("default_doc_filetype").MustString("text/html") 17 termsLocation := s.Key("default_tos_path").MustString("terms/") 18 for _, typ := range r.Header["Accept"] { 19 for _, a := range strings.Split(s.Key("supported_doc_filetypes").String(), " ") { 20 if typ == a { 21 fileType = a 22 } 23 } 24 } 25 26 if len(r.Header.Get("Accept-Language")) != 0 { 27 acceptLangs, _, _ := language.ParseAcceptLanguage(r.Header.Get("Accept-Language")) 28 for _, lang := range acceptLangs { 29 extensions, _ := mime.ExtensionsByType(fileType) 30 for _, ext := range extensions { 31 docFile := fmt.Sprintf("%s/%s/0%s", termsLocation, lang.String(), ext) 32 log.Printf("Trying %s\n", docFile) 33 fileBytes, err := ioutil.ReadFile(docFile) 34 if nil == err { 35 w.Header().Set("Content-Type", fileType) 36 w.Write(fileBytes) 37 return 38 } 39 } 40 } 41 } 42 // Default document in expected/default format 43 defaultLanguage := s.Key("default_doc_lang").MustString("en") 44 extensions, _ := mime.ExtensionsByType(fileType) 45 for _, ext := range extensions { 46 docFile := fmt.Sprintf("%s/%s/0%s", termsLocation, defaultLanguage, ext) 47 log.Println("Trying " + docFile) 48 fileBytes, err := ioutil.ReadFile(docFile) 49 if nil == err { 50 w.Header().Set("Content-Type", fileType) 51 w.Write(fileBytes) 52 return 53 } 54 } 55 w.WriteHeader(http.StatusNotFound) 56 } 57 58 func PrivacyPolicyResponse(s *ini.Section, w http.ResponseWriter, r *http.Request) { 59 fileType := s.Key("default_doc_filetype").MustString("text/html") 60 termsLocation := s.Key("default_pp_path").MustString("privacy/") 61 for _, typ := range r.Header["Accept"] { 62 for _, a := range strings.Split(s.Key("supported_doc_filetypes").String(), " ") { 63 if typ == a { 64 fileType = a 65 } 66 } 67 } 68 69 if len(r.Header.Get("Accept-Language")) != 0 { 70 acceptLangs, _, _ := language.ParseAcceptLanguage(r.Header.Get("Accept-Language")) 71 for _, lang := range acceptLangs { 72 extensions, _ := mime.ExtensionsByType(fileType) 73 for _, ext := range extensions { 74 docFile := fmt.Sprintf("%s/%s/0%s", termsLocation, lang.String(), ext) 75 log.Printf("Trying %s\n", docFile) 76 fileBytes, err := ioutil.ReadFile(docFile) 77 if nil == err { 78 w.Header().Set("Content-Type", fileType) 79 w.Write(fileBytes) 80 return 81 } 82 } 83 } 84 } 85 // Default document in expected/default format 86 defaultLanguage := s.Key("default_doc_lang").MustString("en") 87 extensions, _ := mime.ExtensionsByType(fileType) 88 for _, ext := range extensions { 89 docFile := fmt.Sprintf("%s/%s/0%s", termsLocation, defaultLanguage, ext) 90 fileBytes, err := ioutil.ReadFile(docFile) 91 if nil == err { 92 w.Header().Set("Content-Type", fileType) 93 w.Write(fileBytes) 94 return 95 } 96 } 97 w.WriteHeader(http.StatusNotFound) 98 }