Set templates and data directories via flag, use sane defaults.

このコミットが含まれているのは:
Christian Heller 2016-02-09 23:18:05 +01:00
コミット c0e4d5f32a
2個のファイルの変更24行の追加16行の削除

ファイルの表示

@ -20,12 +20,10 @@ $GOPATH set:
git clone https://github.com/plomlompom/htwtxt $GOPATH/src/htwtxt git clone https://github.com/plomlompom/htwtxt $GOPATH/src/htwtxt
go get htwtxt go get htwtxt
mkdir ~/htwtxt mkdir ~/htwtxt
cp -R $GOPATH/src/htwtxt/templates ~/htwtxt
cd ~/htwtxt
$GOPATH/bin/htwtxt $GOPATH/bin/htwtxt
This will build and start the server, and set up directories and files expected This will build and start the server, which will store login and feed data below
by it below ~/htwtxt (or any other path you prefer instead of this). ~/htwtxt. An alternate directory may be specified with the --dir flag.
Configuring port number and TLS Configuring port number and TLS
------------------------------- -------------------------------

34
main.go
ファイルの表示

@ -19,6 +19,8 @@ import "time"
const loginsFile = "logins.txt" const loginsFile = "logins.txt"
const twtsDir = "feeds" const twtsDir = "feeds"
var dataDir string
var loginsPath string
var templ *template.Template var templ *template.Template
func createFileIfNotExists(path string) { func createFileIfNotExists(path string) {
@ -65,7 +67,7 @@ func login(w http.ResponseWriter, r *http.Request) (string, error) {
name := r.FormValue("name") name := r.FormValue("name")
pw := r.FormValue("password") pw := r.FormValue("password")
loginValid := false loginValid := false
file, err := os.Open(loginsFile) file, err := os.Open(loginsPath)
defer file.Close() defer file.Close()
if err != nil { if err != nil {
log.Fatal("Can't open file for reading", err) log.Fatal("Can't open file for reading", err)
@ -106,7 +108,7 @@ func accountLine(w http.ResponseWriter, r *http.Request,
return "", errors.New("") return "", errors.New("")
} }
if checkDupl { if checkDupl {
fileRead, err := os.Open(loginsFile) fileRead, err := os.Open(loginsPath)
defer fileRead.Close() defer fileRead.Close()
if err != nil { if err != nil {
log.Fatal("Can't open file for reading", err) log.Fatal("Can't open file for reading", err)
@ -144,7 +146,7 @@ func signUpHandler(w http.ResponseWriter, r *http.Request) {
if err != nil { if err != nil {
return return
} }
appendToFile(loginsFile, newLine+"\n") appendToFile(loginsPath, newLine+"\n")
execTemplate(w, "feedset.html", "") execTemplate(w, "feedset.html", "")
} }
@ -161,7 +163,7 @@ func accountPostHandler(w http.ResponseWriter, r *http.Request) {
if err != nil { if err != nil {
return return
} }
text, err := ioutil.ReadFile(loginsFile) text, err := ioutil.ReadFile(loginsPath)
if err != nil { if err != nil {
log.Fatal("Can't read file", err) log.Fatal("Can't read file", err)
} }
@ -174,24 +176,24 @@ func accountPostHandler(w http.ResponseWriter, r *http.Request) {
} }
} }
text = []byte(strings.Join(lines, "\n")) text = []byte(strings.Join(lines, "\n"))
tmpFile := "tmp_" + loginsFile tmpFile := "tmp_" + loginsPath
if err := ioutil.WriteFile(tmpFile, []byte(text), 0600); err != nil { if err := ioutil.WriteFile(tmpFile, []byte(text), 0600); err != nil {
log.Fatal("Trouble writing file", err) log.Fatal("Trouble writing file", err)
} }
if err := os.Rename(loginsFile, "_"+loginsFile); err != nil { if err := os.Rename(loginsPath, "_"+loginsFile); err != nil {
log.Fatal("Trouble moving file", err) log.Fatal("Trouble moving file", err)
} }
if err := os.Rename(tmpFile, loginsFile); err != nil { if err := os.Rename(tmpFile, loginsPath); err != nil {
log.Fatal("Trouble moving file", err) log.Fatal("Trouble moving file", err)
} }
if err := os.Remove("_" + loginsFile); err != nil { if err := os.Remove("_" + loginsPath); err != nil {
log.Fatal("Trouble removing file", err) log.Fatal("Trouble removing file", err)
} }
execTemplate(w, "feedset.html", "") execTemplate(w, "feedset.html", "")
} }
func listHandler(w http.ResponseWriter, r *http.Request) { func listHandler(w http.ResponseWriter, r *http.Request) {
file, err := os.Open(loginsFile) file, err := os.Open(loginsPath)
defer file.Close() defer file.Close()
if err != nil { if err != nil {
log.Fatal("Can't open file for reading", err) log.Fatal("Can't open file for reading", err)
@ -247,13 +249,21 @@ func main() {
portPtr := flag.Int("port", 8000, "port to serve") portPtr := flag.Int("port", 8000, "port to serve")
keyPtr := flag.String("key", "", "SSL key file") keyPtr := flag.String("key", "", "SSL key file")
certPtr := flag.String("cert", "", "SSL certificate file") certPtr := flag.String("cert", "", "SSL certificate file")
templDirPtr := flag.String("templates",
os.Getenv("GOPATH")+"/src/htwtxt/templates",
"directory where to expect HTML templates")
flag.StringVar(&dataDir, "dir", os.Getenv("HOME")+"/htwtxt",
"directory to store feeds and login data")
flag.Parse() flag.Parse()
log.Println("Using as templates dir:", *templDirPtr)
log.Println("Using as data dir:", dataDir)
loginsPath = dataDir + "/" + loginsFile
if ("" == *keyPtr && "" != *certPtr) || if ("" == *keyPtr && "" != *certPtr) ||
("" != *keyPtr && "" == *certPtr) { ("" != *keyPtr && "" == *certPtr) {
log.Fatal("Expect either both key and certificate or none.") log.Fatal("Expect either both key and certificate or none.")
} }
if "" != *keyPtr { if "" != *keyPtr {
log.Println("using TLS") log.Println("Using TLS.")
if _, err := os.Stat(*certPtr); err != nil { if _, err := os.Stat(*certPtr); err != nil {
log.Fatal("No certificate file found.") log.Fatal("No certificate file found.")
} }
@ -261,10 +271,10 @@ func main() {
log.Fatal("No server key file found.") log.Fatal("No server key file found.")
} }
} }
createFileIfNotExists(loginsFile) createFileIfNotExists(loginsPath)
// TODO: Handle err here. // TODO: Handle err here.
_ = os.Mkdir(twtsDir, 0700) _ = os.Mkdir(twtsDir, 0700)
templ, err = template.New("main").ParseGlob("./templates/*.html") templ, err = template.New("main").ParseGlob(*templDirPtr + "/*.html")
if err != nil { if err != nil {
log.Fatal("Can't set up new template: ", err) log.Fatal("Can't set up new template: ", err)
} }