taler-go

Utility functions in Go language
Log | Files | Refs | LICENSE

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 }