taldir

Directory service to resolve wallet mailboxes by messenger addresses
Log | Files | Refs | Submodules | README | LICENSE

tos.go (2958B)


      1 package tos
      2 
      3 import (
      4 	"fmt"
      5 	"log"
      6 	"mime"
      7 	"net/http"
      8 	"os"
      9 
     10 	"golang.org/x/text/language"
     11 )
     12 
     13 type TalerTosConfig struct {
     14   // The default file type
     15   DefaultFileType string
     16 
     17   // Supported file types
     18   SupportedFileTypes []string
     19 
     20   // Default language
     21   DefaultLanguage string
     22 }
     23 
     24 func ServiceTermsResponse(w http.ResponseWriter, r *http.Request, termsdatahome string, cfg TalerTosConfig) {
     25 	fileType := cfg.DefaultFileType
     26 	termsLocation := termsdatahome
     27 	for _, typ := range r.Header["Accept"] {
     28 		for _, a := range cfg.SupportedFileTypes {
     29 			if typ == a {
     30 				fileType = a
     31 			}
     32 		}
     33 	}
     34 
     35 	if len(r.Header.Get("Accept-Language")) != 0 {
     36 		acceptLangs, _, _ := language.ParseAcceptLanguage(r.Header.Get("Accept-Language"))
     37 		for _, lang := range acceptLangs {
     38 			extensions, _ := mime.ExtensionsByType(fileType)
     39 			for _, ext := range extensions {
     40 				docFile := fmt.Sprintf("%s/%s/0%s", termsLocation, lang.String(), ext)
     41 				log.Printf("Trying %s\n", docFile)
     42 				fileBytes, err := os.ReadFile(docFile)
     43 				if nil == err {
     44 					w.Header().Set("Content-Type", fileType)
     45 					w.Write(fileBytes)
     46 					return
     47 				}
     48 			}
     49 		}
     50 	}
     51 	// Default document in expected/default format
     52 	defaultLanguage := cfg.DefaultLanguage
     53 	extensions, _ := mime.ExtensionsByType(fileType)
     54 	for _, ext := range extensions {
     55 		docFile := fmt.Sprintf("%s/%s/0%s", termsLocation, defaultLanguage, ext)
     56 		log.Println("Trying " + docFile)
     57 		fileBytes, err := os.ReadFile(docFile)
     58 		if nil == err {
     59 			w.Header().Set("Content-Type", fileType)
     60 			w.Write(fileBytes)
     61 			return
     62 		}
     63 	}
     64 	w.WriteHeader(http.StatusNotFound)
     65 }
     66 
     67 
     68 func PrivacyPolicyResponse(w http.ResponseWriter, r *http.Request, policydatahome string, cfg TalerTosConfig) {
     69 	fileType := cfg.DefaultFileType
     70 	termsLocation := policydatahome
     71   for _, typ := range r.Header["Accept"] {
     72     for _, a := range cfg.SupportedFileTypes {
     73       if typ == a {
     74         fileType = a
     75       }
     76     }
     77   }
     78 
     79   if len(r.Header.Get("Accept-Language")) != 0 {
     80     acceptLangs, _, _ := language.ParseAcceptLanguage(r.Header.Get("Accept-Language"))
     81     for _, lang := range acceptLangs {
     82       extensions, _ := mime.ExtensionsByType(fileType)
     83       for _, ext := range extensions {
     84         docFile := fmt.Sprintf("%s/%s/0%s", termsLocation, lang.String(), ext)
     85         log.Printf("Trying %s\n", docFile)
     86         fileBytes, err := os.ReadFile(docFile)
     87         if nil == err {
     88           w.Header().Set("Content-Type", fileType)
     89           w.Write(fileBytes)
     90           return
     91         }
     92       }
     93     }
     94   }
     95   // Default document in expected/default format
     96   defaultLanguage := cfg.DefaultLanguage
     97   extensions, _ := mime.ExtensionsByType(fileType)
     98   for _, ext := range extensions {
     99     docFile := fmt.Sprintf("%s/%s/0%s", termsLocation, defaultLanguage, ext)
    100     fileBytes, err := os.ReadFile(docFile)
    101     if nil == err {
    102       w.Header().Set("Content-Type", fileType)
    103       w.Write(fileBytes)
    104       return
    105     }
    106   }
    107   w.WriteHeader(http.StatusNotFound)
    108 }