1
0
mirror of https://github.com/muety/wakapi.git synced 2023-08-10 21:12:56 +03:00

feat: add basic sign up instructions

This commit is contained in:
Ferdinand Mütsch 2020-05-24 21:42:15 +02:00
parent 2cca2cb0bb
commit 625994d1e9
8 changed files with 57 additions and 12 deletions

View File

@ -16,6 +16,7 @@ var cfg *Config
type Config struct { type Config struct {
Env string Env string
Version string
Port int Port int
Addr string Addr string
BasePath string BasePath string
@ -56,11 +57,28 @@ func LookupFatal(key string) string {
return v return v
} }
func readVersion() string {
file, err := os.Open("version.txt")
if err != nil {
log.Fatal(err)
}
defer file.Close()
bytes, err := ioutil.ReadAll(file)
if err != nil {
log.Fatal(err)
}
return string(bytes)
}
func readConfig() *Config { func readConfig() *Config {
if err := godotenv.Load(); err != nil { if err := godotenv.Load(); err != nil {
log.Fatal(err) log.Fatal(err)
} }
version := readVersion()
env := LookupFatal("ENV") env := LookupFatal("ENV")
dbType := LookupFatal("WAKAPI_DB_TYPE") dbType := LookupFatal("WAKAPI_DB_TYPE")
dbUser := LookupFatal("WAKAPI_DB_USER") dbUser := LookupFatal("WAKAPI_DB_USER")
@ -131,6 +149,7 @@ func readConfig() *Config {
return &Config{ return &Config{
Env: env, Env: env,
Version: version,
Port: port, Port: port,
Addr: addr, Addr: addr,
BasePath: basePath, BasePath: basePath,

View File

@ -16,3 +16,9 @@ type Signup struct {
Password string `schema:"password"` Password string `schema:"password"`
PasswordRepeat string `schema:"password_repeat"` PasswordRepeat string `schema:"password_repeat"`
} }
func (s *Signup) IsValid() bool {
return len(s.Username) >= 3 &&
len(s.Password) >= 6 &&
s.Password == s.PasswordRepeat
}

View File

@ -164,8 +164,8 @@ func (h *IndexHandler) handlePostSignup(w http.ResponseWriter, r *http.Request)
return return
} }
if signup.Password != signup.PasswordRepeat { if !signup.IsValid() {
respondAlert(w, "passwords do not match", "", "signup.tpl.html", http.StatusBadRequest) respondAlert(w, "invalid parameters", "", "signup.tpl.html", http.StatusBadRequest)
return return
} }

View File

@ -27,6 +27,9 @@ func loadTemplates() {
"getBasePath": func() string { "getBasePath": func() string {
return models.GetConfig().BasePath return models.GetConfig().BasePath
}, },
"getVersion": func() string {
return models.GetConfig().Version
},
}) })
templates = make(map[string]*template.Template) templates = make(map[string]*template.Template)

View File

@ -1 +1 @@
1.4.0 1.4.1

View File

@ -1,3 +1,11 @@
<footer class="w-full text-center text-gray-300 text-xs mt-12"> <footer class="flex justify-between w-full text-center text-gray-500 text-xs mt-12">
Made by <a href="https://muetsch.io" class="border-b border-green-700">Ferdinand Mütsch</a> as <a href="https://github.com/muety/wakapi" class="border-b border-green-700">open-source</a>. <div class="text-xs font-mono">
v{{ getVersion }}
</div>
<div>
Made with &nbsp; 🤍 &nbsp; by <a href="https://muetsch.io" class="border-b border-green-700">Ferdinand Mütsch</a> as <a
href="https://github.com/muety/wakapi" class="border-b border-green-700">open-source</a> software
</div>
<div>
</div>
</footer> </footer>

View File

@ -16,13 +16,13 @@
<label class="inline-block text-sm mb-1 text-gray-500" for="username">Username</label> <label class="inline-block text-sm mb-1 text-gray-500" for="username">Username</label>
<input class="shadow appearance-none bg-gray-800 focus:bg-gray-700 text-gray-300 border-green-700 focus:border-gray-500 border rounded w-full py-1 px-3" <input class="shadow appearance-none bg-gray-800 focus:bg-gray-700 text-gray-300 border-green-700 focus:border-gray-500 border rounded w-full py-1 px-3"
type="text" id="username" type="text" id="username"
name="username" placeholder="Enter your username" required> name="username" placeholder="Enter your username" minlength="3" required autofocus>
</div> </div>
<div class="mb-8"> <div class="mb-8">
<label class="inline-block text-sm mb-1 text-gray-500" for="password">Password</label> <label class="inline-block text-sm mb-1 text-gray-500" for="password">Password</label>
<input class="shadow appearance-none bg-gray-800 focus:bg-gray-700 text-gray-300 border-green-700 focus:border-gray-500 border rounded w-full py-1 px-3" <input class="shadow appearance-none bg-gray-800 focus:bg-gray-700 text-gray-300 border-green-700 focus:border-gray-500 border rounded w-full py-1 px-3"
type="password" id="password" type="password" id="password"
name="password" placeholder="******" required> name="password" placeholder="******" minlength="6" required>
</div> </div>
<div class="flex justify-between"> <div class="flex justify-between">
<a href="signup"> <a href="signup">

View File

@ -10,22 +10,31 @@
{{ template "alerts.tpl.html" . }} {{ template "alerts.tpl.html" . }}
<main class="mt-10 flex-grow flex justify-center w-full" id="grid-container"> <main class="mt-10 flex-grow flex justify-center w-full" id="grid-container">
<div class="flex-grow max-w-lg mt-12"> <div class="flex-grow max-w-lg mt-8">
<form action="signup" method="post"> <div>
<p class="text-sm text-gray-300">
💡 In order to use Wakapi, you need to create an account.
After successful signup, you still need to set up the <a href="https://wakatime.com" target="_blank" class="border-b border-green-700">WakaTime</a> client tools.
Please refer to <a href="https://github.com/muety/wakapi#client-setup" target="_blank" class="border-b border-green-700">this readme section</a> for instructions.
You will be able to view you <strong>API Key</strong> once you log in.
</p>
</div>
<form class="mt-10" action="signup" method="post">
<div class="mb-8"> <div class="mb-8">
<label class="inline-block text-sm mb-1 text-gray-500" for="username">Username</label> <label class="inline-block text-sm mb-1 text-gray-500" for="username">Username</label>
<input class="shadow appearance-none bg-gray-800 focus:bg-gray-700 text-gray-300 border-green-700 focus:border-gray-500 border rounded w-full py-1 px-3" type="text" id="username" <input class="shadow appearance-none bg-gray-800 focus:bg-gray-700 text-gray-300 border-green-700 focus:border-gray-500 border rounded w-full py-1 px-3" type="text" id="username"
name="username" placeholder="Choose a username" required> name="username" placeholder="Choose a username" minlength="3" required autofocus>
</div> </div>
<div class="mb-8"> <div class="mb-8">
<label class="inline-block text-sm mb-1 text-gray-500" for="password">Password</label> <label class="inline-block text-sm mb-1 text-gray-500" for="password">Password</label>
<input class="shadow appearance-none bg-gray-800 focus:bg-gray-700 text-gray-300 border-green-700 focus:border-gray-500 border rounded w-full py-1 px-3" type="password" id="password" <input class="shadow appearance-none bg-gray-800 focus:bg-gray-700 text-gray-300 border-green-700 focus:border-gray-500 border rounded w-full py-1 px-3" type="password" id="password"
name="password" placeholder="Choose a password" required> name="password" placeholder="Choose a password" minlength="6" required>
</div> </div>
<div class="mb-8"> <div class="mb-8">
<label class="inline-block text-sm mb-1 text-gray-500" for="password">And again ...</label> <label class="inline-block text-sm mb-1 text-gray-500" for="password">And again ...</label>
<input class="shadow appearance-none bg-gray-800 focus:bg-gray-700 text-gray-300 border-green-700 focus:border-gray-500 border rounded w-full py-1 px-3" type="password" id="password_repeat" <input class="shadow appearance-none bg-gray-800 focus:bg-gray-700 text-gray-300 border-green-700 focus:border-gray-500 border rounded w-full py-1 px-3" type="password" id="password_repeat"
name="password_repeat" placeholder="Repeat your password" required> name="password_repeat" placeholder="Repeat your password" minlength="6" required>
</div> </div>
<div class="flex justify-between float-right"> <div class="flex justify-between float-right">
<button type="submit" class="py-1 px-3 rounded bg-green-700 hover:bg-green-800 text-white text-sm">Create Account</button> <button type="submit" class="py-1 px-3 rounded bg-green-700 hover:bg-green-800 text-white text-sm">Create Account</button>