[tor-commits] [check/master] Add a command line arg for a base path.

arlo at torproject.org arlo at torproject.org
Sat Oct 26 20:40:40 UTC 2013


commit 11d242c18549beae13f44307eb98f7a297a672aa
Author: Arlo Breault <arlolra at gmail.com>
Date:   Sat Oct 26 13:36:48 2013 -0700

    Add a command line arg for a base path.
---
 check.go          |   16 +++++++++-------
 datastore.go      |   10 +++++-----
 datastore_test.go |    4 ++--
 handlers.go       |    4 +---
 utils.go          |   23 ++++++++++++-----------
 5 files changed, 29 insertions(+), 28 deletions(-)

diff --git a/check.go b/check.go
index 76cdd25..73e6a7c 100644
--- a/check.go
+++ b/check.go
@@ -14,7 +14,8 @@ func main() {
 
 	// command line args
 	logPath := flag.String("log", "", "path to log file; otherwise stdout")
-	pidPath := flag.String("pid", "./", "path to create pid")
+	pidPath := flag.String("pid", "./check.pid", "path to create pid")
+	basePath := flag.String("base", "./", "path to base dir")
 	port := flag.Int("port", 8000, "port to listen on")
 	flag.Parse()
 
@@ -28,7 +29,7 @@ func main() {
 	}
 
 	// write pid
-	pid, err := os.Create(path.Join(*pidPath, "check.pid"))
+	pid, err := os.Create(*pidPath)
 	if err != nil {
 		log.Fatal(err)
 	}
@@ -40,24 +41,25 @@ func main() {
 	}
 
 	// load i18n
-	domain, err := gettext.NewDomain("check", "locale")
+	domain, err := gettext.NewDomain("check", path.Join(*basePath, "locale"))
 	if err != nil {
 		log.Fatal(err)
 	}
+	Locales := GetLocaleList(*basePath)
 
 	// Load Tor exits and listen for SIGUSR2 to reload
 	exits := new(Exits)
-	exits.Run()
+	exits.Run(path.Join(*basePath, "data/exit-policies"))
 
 	// files
-	files := http.FileServer(http.Dir("./public"))
+	files := http.FileServer(http.Dir(path.Join(*basePath, "public")))
 	Phttp := http.NewServeMux()
 	Phttp.Handle("/torcheck/", http.StripPrefix("/torcheck/", files))
 	Phttp.Handle("/", files)
 
 	// routes
-	http.HandleFunc("/", RootHandler(CompileTemplate(domain, "index.html"), exits, domain, Phttp))
-	bulk := BulkHandler(CompileTemplate(domain, "bulk.html"), exits, domain)
+	http.HandleFunc("/", RootHandler(CompileTemplate(*basePath, domain, "index.html"), exits, domain, Phttp, Locales))
+	bulk := BulkHandler(CompileTemplate(*basePath, domain, "bulk.html"), exits, domain)
 	http.HandleFunc("/torbulkexitlist", bulk)
 	http.HandleFunc("/cgi-bin/TorBulkExitList.py", bulk)
 
diff --git a/datastore.go b/datastore.go
index e1e981d..c01acc6 100644
--- a/datastore.go
+++ b/datastore.go
@@ -182,8 +182,8 @@ func (e *Exits) Load(source io.Reader, update bool) error {
 	return nil
 }
 
-func (e *Exits) LoadFromFile(update bool) {
-	file, err := os.Open(os.ExpandEnv("${TORCHECKBASE}data/exit-policies"))
+func (e *Exits) LoadFromFile(filePath string, update bool) {
+	file, err := os.Open(os.ExpandEnv(filePath))
 	defer file.Close()
 	if err != nil {
 		log.Fatal(err)
@@ -193,15 +193,15 @@ func (e *Exits) LoadFromFile(update bool) {
 	}
 }
 
-func (e *Exits) Run() {
+func (e *Exits) Run(filePath string) {
 	e.ReloadChan = make(chan os.Signal, 1)
 	signal.Notify(e.ReloadChan, syscall.SIGUSR2)
 	go func() {
 		for {
 			<-e.ReloadChan
-			e.LoadFromFile(true)
+			e.LoadFromFile(filePath, true)
 			log.Println("Exit list updated.")
 		}
 	}()
-	e.LoadFromFile(false)
+	e.LoadFromFile(filePath, false)
 }
diff --git a/datastore_test.go b/datastore_test.go
index 204f371..ccde0a5 100644
--- a/datastore_test.go
+++ b/datastore_test.go
@@ -183,7 +183,7 @@ func TestPastHours(t *testing.T) {
 
 func BenchmarkIsTor(b *testing.B) {
 	e := new(Exits)
-	e.LoadFromFile(false)
+	e.LoadFromFile("data/exit-policies", false)
 	b.ResetTimer()
 	for i := 0; i < b.N; i++ {
 		e.IsTor("91.121.43.80")
@@ -193,7 +193,7 @@ func BenchmarkIsTor(b *testing.B) {
 
 func BenchmarkDumpList(b *testing.B) {
 	e := new(Exits)
-	e.LoadFromFile(false)
+	e.LoadFromFile("data/exit-policies", false)
 	buf := new(bytes.Buffer)
 	b.ResetTimer()
 	for i := 0; i < b.N; i++ {
diff --git a/handlers.go b/handlers.go
index f4a308f..08fc64b 100644
--- a/handlers.go
+++ b/handlers.go
@@ -13,8 +13,6 @@ import (
 	"time"
 )
 
-var Locales = GetLocaleList()
-
 // page model
 type Page struct {
 	IsTor       bool
@@ -27,7 +25,7 @@ type Page struct {
 	Locales     map[string]string
 }
 
-func RootHandler(Layout *template.Template, Exits *Exits, domain *gettext.Domain, Phttp *http.ServeMux) http.HandlerFunc {
+func RootHandler(Layout *template.Template, Exits *Exits, domain *gettext.Domain, Phttp *http.ServeMux, Locales map[string]string) http.HandlerFunc {
 
 	return func(w http.ResponseWriter, r *http.Request) {
 
diff --git a/utils.go b/utils.go
index ef7be1d..8b0bda2 100644
--- a/utils.go
+++ b/utils.go
@@ -11,6 +11,7 @@ import (
 	"net/http"
 	"net/url"
 	"os"
+	"path"
 	"strconv"
 )
 
@@ -73,20 +74,20 @@ func FuncMap(domain *gettext.Domain) template.FuncMap {
 
 var Layout *template.Template
 
-func CompileTemplate(domain *gettext.Domain, templateName string) *template.Template {
+func CompileTemplate(base string, domain *gettext.Domain, templateName string) *template.Template {
 	if Layout == nil {
 		Layout = template.New("")
 		Layout = Layout.Funcs(FuncMap(domain))
 		Layout = template.Must(Layout.ParseFiles(
-			"public/base.html",
-			"public/torbutton.html",
+			path.Join(base, "public/base.html"),
+			path.Join(base, "public/torbutton.html"),
 		))
 	}
 	l, err := Layout.Clone()
 	if err != nil {
 		log.Fatal(err)
 	}
-	return template.Must(l.ParseFiles("public/" + templateName))
+	return template.Must(l.ParseFiles(path.Join(base, "public/", templateName)))
 }
 
 type locale struct {
@@ -94,7 +95,7 @@ type locale struct {
 	Name string
 }
 
-func GetLocaleList() map[string]string {
+func GetLocaleList(base string) map[string]string {
 	// TODO: This should be it's own translation file
 	haveTranslatedNames := map[string]string{
 		"ar":    "عربية (Arabiya)",
@@ -127,17 +128,17 @@ func GetLocaleList() map[string]string {
 
 	// for all folders in locale which match a locale from https://www.transifex.com/api/2/languages/
 	// use the language name unless we have an override
-	webLocales, err := FetchTranslationLocales()
+	webLocales, err := FetchTranslationLocales(base)
 	if err != nil {
 		log.Printf("Failed to get up to date language list, using fallback.")
 		return haveTranslatedNames
 	}
 
-	return GetInstalledLocales(webLocales, haveTranslatedNames)
+	return GetInstalledLocales(base, webLocales, haveTranslatedNames)
 }
 
-func FetchTranslationLocales() (map[string]locale, error) {
-	file, err := os.Open(os.ExpandEnv("${TORCHECKBASE}data/langs"))
+func FetchTranslationLocales(base string) (map[string]locale, error) {
+	file, err := os.Open(path.Join(base, "data/langs"))
 	if err != nil {
 		return nil, err
 	}
@@ -164,8 +165,8 @@ func FetchTranslationLocales() (map[string]locale, error) {
 }
 
 // Get a list of all languages installed in our locale folder with translations if available
-func GetInstalledLocales(webLocales map[string]locale, nameTranslations map[string]string) map[string]string {
-	localFiles, err := ioutil.ReadDir(os.ExpandEnv("${TORCHECKBASE}locale"))
+func GetInstalledLocales(base string, webLocales map[string]locale, nameTranslations map[string]string) map[string]string {
+	localFiles, err := ioutil.ReadDir(path.Join(base, "locale"))
 
 	if err != nil {
 		log.Print("No locales found in 'locale'. Try running 'make i18n'.")





More information about the tor-commits mailing list