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:
parent
2cca2cb0bb
commit
625994d1e9
@ -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,
|
||||||
|
@ -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
|
||||||
|
}
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
@ -1 +1 @@
|
|||||||
1.4.0
|
1.4.1
|
@ -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 🤍 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>
|
@ -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">
|
||||||
|
@ -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>
|
||||||
|
Loading…
Reference in New Issue
Block a user