| @ -0,0 +1,61 @@ | |||||
| package main | |||||
| import ( | |||||
| "log" | |||||
| "flag" | |||||
| "os" | |||||
| "path/filepath" | |||||
| "github.com/BurntSushi/toml" | |||||
| ) | |||||
| type Config struct { | |||||
| Database DatabaseConfig | |||||
| } | |||||
| type DatabaseConfig struct { | |||||
| Type string | |||||
| } | |||||
| var ConfigFolder string | |||||
| var ConfigFilename string | |||||
| var Configuration Config | |||||
| func init() { | |||||
| const baseFolder string = "jdr" | |||||
| dir, varSet := os.LookupEnv("XDG_CONFIG_HOME") | |||||
| if varSet { | |||||
| ConfigFolder = filepath.Join(dir, baseFolder) | |||||
| } else { | |||||
| dir, varSet = os.LookupEnv("HOME") | |||||
| if !varSet { | |||||
| log.Fatal("Cannot find a config folder") | |||||
| } | |||||
| ConfigFolder = filepath.Join(dir, "." + baseFolder) | |||||
| } | |||||
| } | |||||
| func ParseArguments() { | |||||
| log.Println("Parsing arguments") | |||||
| flag.StringVar(&ConfigFilename, "config", filepath.Join(ConfigFolder, "config.toml"), "configuration file") | |||||
| flag.Parse() | |||||
| } | |||||
| func LoadConfig() { | |||||
| configFilename, err := filepath.Abs(ConfigFilename) | |||||
| if err != nil { | |||||
| log.Fatal(err) | |||||
| } | |||||
| log.Println("Loading config from", configFilename) | |||||
| _, err = toml.DecodeFile(configFilename, &Configuration) | |||||
| if err != nil { | |||||
| log.Fatal(err) | |||||
| } | |||||
| log.Println(Configuration.Database.Type) | |||||
| } | |||||
| @ -0,0 +1,4 @@ | |||||
| package jdr | |||||
| type Character struct { | |||||
| } | |||||
| @ -0,0 +1,4 @@ | |||||
| package jdr | |||||
| type DungeonMaster struct { | |||||
| } | |||||
| @ -0,0 +1,5 @@ | |||||
| package jdr | |||||
| type Game struct { | |||||
| } | |||||
| @ -1,4 +1,35 @@ | |||||
| package main | package main | ||||
| import ( | |||||
| //"fmt" | |||||
| "log" | |||||
| "net/http" | |||||
| "html/template" | |||||
| "github.com/gorilla/mux" | |||||
| ) | |||||
| var templates = template.Must(template.ParseGlob("templates/*.html")) | |||||
| func mainPageHandler(w http.ResponseWriter, r *http.Request) { | |||||
| err := templates.ExecuteTemplate(w, "login.html", nil) | |||||
| if err != nil { | |||||
| log.Println(err) | |||||
| } | |||||
| } | |||||
| func playerPageHandler(w http.ResponseWriter, r *http.Request) { | |||||
| err := templates.ExecuteTemplate(w, "player.html", nil) | |||||
| if err != nil { | |||||
| log.Println(err) | |||||
| } | |||||
| } | |||||
| func main() { | func main() { | ||||
| ParseArguments() | |||||
| LoadConfig() | |||||
| r := mux.NewRouter() | |||||
| r.HandleFunc("/", mainPageHandler) | |||||
| r.HandleFunc("/player", playerPageHandler) | |||||
| log.Fatal(http.ListenAndServe(":8080", r)) | |||||
| } | } | ||||
| @ -0,0 +1,9 @@ | |||||
| <!DOCTYPE html> | |||||
| <html> | |||||
| <head> | |||||
| <title>login</title> | |||||
| </head> | |||||
| <body> | |||||
| <h1>Login</h1> | |||||
| </body> | |||||
| </html> | |||||
| @ -0,0 +1,16 @@ | |||||
| <!DOCTYPE html> | |||||
| <html> | |||||
| <head> | |||||
| </head> | |||||
| <body> | |||||
| <form> | |||||
| <input type="text" name="name" /> | |||||
| <input type="text" name="player" /> | |||||
| <input type="text" name="race" /> | |||||
| <input type="text" name="gender" /> | |||||
| <input type="text" name="job" /> | |||||
| <input type="text" name="origin" /> | |||||
| <input type="text" name="inheritance" /> | |||||
| </form> | |||||
| </body> | |||||
| </html> | |||||