aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pkg/handler/auth/login.go20
-rw-r--r--pkg/handler/router.go3
-rw-r--r--scss/main.scss14
-rw-r--r--templates/login.qtpl31
-rw-r--r--templates/login.qtpl.go173
-rw-r--r--templates/navbar.qtpl2
-rw-r--r--templates/navbar.qtpl.go6
7 files changed, 244 insertions, 5 deletions
diff --git a/pkg/handler/auth/login.go b/pkg/handler/auth/login.go
new file mode 100644
index 0000000..7e77a67
--- /dev/null
+++ b/pkg/handler/auth/login.go
@@ -0,0 +1,20 @@
+package auth
+
+import (
+ "net/http"
+
+ "git.gabrielgio.me/cerrado/pkg/ext"
+ "git.gabrielgio.me/cerrado/templates"
+)
+
+type (
+ LoginHandler struct{}
+)
+
+func (g *LoginHandler) Login(w http.ResponseWriter, r *http.Request) error {
+ ext.SetHTML(w)
+
+ login := &templates.LoginPage{}
+ templates.WritePageTemplate(w, login)
+ return nil
+}
diff --git a/pkg/handler/router.go b/pkg/handler/router.go
index a2ac98a..32bd78a 100644
--- a/pkg/handler/router.go
+++ b/pkg/handler/router.go
@@ -6,6 +6,7 @@ import (
serverconfig "git.gabrielgio.me/cerrado/pkg/config"
"git.gabrielgio.me/cerrado/pkg/ext"
"git.gabrielgio.me/cerrado/pkg/handler/about"
+ "git.gabrielgio.me/cerrado/pkg/handler/auth"
"git.gabrielgio.me/cerrado/pkg/handler/git"
"git.gabrielgio.me/cerrado/pkg/handler/static"
"git.gabrielgio.me/cerrado/pkg/service"
@@ -21,6 +22,7 @@ func MountHandler(
var (
gitHandler = git.NewGitHandler(gitService, configRepo)
aboutHandler = about.NewAboutHandler(configRepo)
+ loginHandler = &auth.LoginHandler{}
)
staticHandler, err := static.ServeStaticHandler()
@@ -33,6 +35,7 @@ func MountHandler(
mux.AddMiddleware(ext.Log)
mux.HandleFunc("/static/{file}", staticHandler)
+ mux.HandleFunc("/login/{$}", loginHandler.Login)
mux.HandleFunc("/{name}/about/{$}", gitHandler.About)
mux.HandleFunc("/{name}/", gitHandler.Summary)
mux.HandleFunc("/{name}/refs/{$}", gitHandler.Refs)
diff --git a/scss/main.scss b/scss/main.scss
index b76423f..21701f5 100644
--- a/scss/main.scss
+++ b/scss/main.scss
@@ -5,6 +5,10 @@ $base-font-size: 1rem;
$font-family-monospace: monospace;
$headings-margin-bottom: 0;
+$input-border-radius: 0;
+
+$btn-border-radius: 0;
+
// basic functionality
@import "bootstrap/scss/_functions.scss";
@import "bootstrap/scss/_variables.scss";
@@ -21,6 +25,8 @@ $navbar-nav-link-padding-x: $spacer;
@import "bootstrap/scss/_nav.scss";
@import "bootstrap/scss/_navbar.scss";
@import "bootstrap/scss/_grid.scss";
+@import "bootstrap/scss/_forms.scss";
+@import "bootstrap/scss/_buttons.scss";
@import "tree.scss";
// TODO remove once is not needed
@@ -80,7 +86,6 @@ $utilities: (
class: ms,
values: map-merge($spacers, (auto: auto))
),
-
);
@import "bootstrap/scss/utilities/_api.scss";
@@ -162,3 +167,10 @@ pre {
max-width: calc(100% - calc(2 * #{$spacer}));
}
}
+
+input {
+ width: 100%;
+ box-sizing: border-box;
+ -webkit-box-sizing:border-box;
+ -moz-box-sizing: border-box;
+}
diff --git a/templates/login.qtpl b/templates/login.qtpl
new file mode 100644
index 0000000..eee5711
--- /dev/null
+++ b/templates/login.qtpl
@@ -0,0 +1,31 @@
+{% code
+type LoginPage struct {
+}
+%}
+
+{% func (p *LoginPage) Title() %}Hello{% endfunc %}
+
+{% func (p *LoginPage) Navbar() %}{%= Navbar(Login) %}{% endfunc %}
+
+{% func (p *LoginPage) Content() %}
+<div class="row">
+ <div class="col-md-6 offset-md-3">
+ <form>
+ <div class="form-group m-3">
+ <label for="username" class="form-label">Username</label>
+ <input type="text" class="form-control" id="username" aria-describedby="emailHelp">
+ </div>
+ <div class="form-group m-3">
+ <label for="password" class="form-label">Password</label>
+ <input type="password" class="form-control" id="password">
+ </div>
+ <div class="form-group m-3">
+ <button type="submit" class="btn btn-primary">Login</button>
+ </div>
+ </form>
+ </div>
+</div>
+{% endfunc %}
+
+{% func (p *LoginPage) Script() %}
+{% endfunc %}
diff --git a/templates/login.qtpl.go b/templates/login.qtpl.go
new file mode 100644
index 0000000..0d3d2b0
--- /dev/null
+++ b/templates/login.qtpl.go
@@ -0,0 +1,173 @@
+// Code generated by qtc from "login.qtpl". DO NOT EDIT.
+// See https://github.com/valyala/quicktemplate for details.
+
+//line templates/login.qtpl:1
+package templates
+
+//line templates/login.qtpl:1
+import (
+ qtio422016 "io"
+
+ qt422016 "github.com/valyala/quicktemplate"
+)
+
+//line templates/login.qtpl:1
+var (
+ _ = qtio422016.Copy
+ _ = qt422016.AcquireByteBuffer
+)
+
+//line templates/login.qtpl:2
+type LoginPage struct {
+}
+
+//line templates/login.qtpl:6
+func (p *LoginPage) StreamTitle(qw422016 *qt422016.Writer) {
+//line templates/login.qtpl:6
+ qw422016.N().S(`Hello`)
+//line templates/login.qtpl:6
+}
+
+//line templates/login.qtpl:6
+func (p *LoginPage) WriteTitle(qq422016 qtio422016.Writer) {
+//line templates/login.qtpl:6
+ qw422016 := qt422016.AcquireWriter(qq422016)
+//line templates/login.qtpl:6
+ p.StreamTitle(qw422016)
+//line templates/login.qtpl:6
+ qt422016.ReleaseWriter(qw422016)
+//line templates/login.qtpl:6
+}
+
+//line templates/login.qtpl:6
+func (p *LoginPage) Title() string {
+//line templates/login.qtpl:6
+ qb422016 := qt422016.AcquireByteBuffer()
+//line templates/login.qtpl:6
+ p.WriteTitle(qb422016)
+//line templates/login.qtpl:6
+ qs422016 := string(qb422016.B)
+//line templates/login.qtpl:6
+ qt422016.ReleaseByteBuffer(qb422016)
+//line templates/login.qtpl:6
+ return qs422016
+//line templates/login.qtpl:6
+}
+
+//line templates/login.qtpl:8
+func (p *LoginPage) StreamNavbar(qw422016 *qt422016.Writer) {
+//line templates/login.qtpl:8
+ StreamNavbar(qw422016, Login)
+//line templates/login.qtpl:8
+}
+
+//line templates/login.qtpl:8
+func (p *LoginPage) WriteNavbar(qq422016 qtio422016.Writer) {
+//line templates/login.qtpl:8
+ qw422016 := qt422016.AcquireWriter(qq422016)
+//line templates/login.qtpl:8
+ p.StreamNavbar(qw422016)
+//line templates/login.qtpl:8
+ qt422016.ReleaseWriter(qw422016)
+//line templates/login.qtpl:8
+}
+
+//line templates/login.qtpl:8
+func (p *LoginPage) Navbar() string {
+//line templates/login.qtpl:8
+ qb422016 := qt422016.AcquireByteBuffer()
+//line templates/login.qtpl:8
+ p.WriteNavbar(qb422016)
+//line templates/login.qtpl:8
+ qs422016 := string(qb422016.B)
+//line templates/login.qtpl:8
+ qt422016.ReleaseByteBuffer(qb422016)
+//line templates/login.qtpl:8
+ return qs422016
+//line templates/login.qtpl:8
+}
+
+//line templates/login.qtpl:10
+func (p *LoginPage) StreamContent(qw422016 *qt422016.Writer) {
+//line templates/login.qtpl:10
+ qw422016.N().S(`
+<div class="row">
+ <div class="col-md-6 offset-md-3">
+ <form>
+ <div class="form-group m-3">
+ <label for="username" class="form-label">Username</label>
+ <input type="text" class="form-control" id="username" aria-describedby="emailHelp">
+ </div>
+ <div class="form-group m-3">
+ <label for="password" class="form-label">Password</label>
+ <input type="password" class="form-control" id="password">
+ </div>
+ <div class="form-group m-3">
+ <button type="submit" class="btn btn-primary">Login</button>
+ </div>
+ </form>
+ </div>
+</div>
+`)
+//line templates/login.qtpl:28
+}
+
+//line templates/login.qtpl:28
+func (p *LoginPage) WriteContent(qq422016 qtio422016.Writer) {
+//line templates/login.qtpl:28
+ qw422016 := qt422016.AcquireWriter(qq422016)
+//line templates/login.qtpl:28
+ p.StreamContent(qw422016)
+//line templates/login.qtpl:28
+ qt422016.ReleaseWriter(qw422016)
+//line templates/login.qtpl:28
+}
+
+//line templates/login.qtpl:28
+func (p *LoginPage) Content() string {
+//line templates/login.qtpl:28
+ qb422016 := qt422016.AcquireByteBuffer()
+//line templates/login.qtpl:28
+ p.WriteContent(qb422016)
+//line templates/login.qtpl:28
+ qs422016 := string(qb422016.B)
+//line templates/login.qtpl:28
+ qt422016.ReleaseByteBuffer(qb422016)
+//line templates/login.qtpl:28
+ return qs422016
+//line templates/login.qtpl:28
+}
+
+//line templates/login.qtpl:30
+func (p *LoginPage) StreamScript(qw422016 *qt422016.Writer) {
+//line templates/login.qtpl:30
+ qw422016.N().S(`
+`)
+//line templates/login.qtpl:31
+}
+
+//line templates/login.qtpl:31
+func (p *LoginPage) WriteScript(qq422016 qtio422016.Writer) {
+//line templates/login.qtpl:31
+ qw422016 := qt422016.AcquireWriter(qq422016)
+//line templates/login.qtpl:31
+ p.StreamScript(qw422016)
+//line templates/login.qtpl:31
+ qt422016.ReleaseWriter(qw422016)
+//line templates/login.qtpl:31
+}
+
+//line templates/login.qtpl:31
+func (p *LoginPage) Script() string {
+//line templates/login.qtpl:31
+ qb422016 := qt422016.AcquireByteBuffer()
+//line templates/login.qtpl:31
+ p.WriteScript(qb422016)
+//line templates/login.qtpl:31
+ qs422016 := string(qb422016.B)
+//line templates/login.qtpl:31
+ qt422016.ReleaseByteBuffer(qb422016)
+//line templates/login.qtpl:31
+ return qs422016
+//line templates/login.qtpl:31
+}
diff --git a/templates/navbar.qtpl b/templates/navbar.qtpl
index 8f5f9e1..62de219 100644
--- a/templates/navbar.qtpl
+++ b/templates/navbar.qtpl
@@ -5,6 +5,7 @@ const (
List
About
Config
+ Login
)
%}
@@ -16,7 +17,6 @@ const (
Summary
Refs
Tree
- Login
)
%}
diff --git a/templates/navbar.qtpl.go b/templates/navbar.qtpl.go
index e6ca0aa..ad857f7 100644
--- a/templates/navbar.qtpl.go
+++ b/templates/navbar.qtpl.go
@@ -25,9 +25,10 @@ const (
List
About
Config
+ Login
)
-//line templates/navbar.qtpl:12
+//line templates/navbar.qtpl:13
type GitSelection int
const (
@@ -36,7 +37,6 @@ const (
Summary
Refs
Tree
- Login
)
//line templates/navbar.qtpl:23
@@ -93,7 +93,7 @@ func StreamNavbar(qw422016 *qt422016.Writer, s Selection) {
//line templates/navbar.qtpl:31
streaminsertIfEqual(qw422016, s, Login)
//line templates/navbar.qtpl:31
- qw422016.N().S(`" href="/">login</a>
+ qw422016.N().S(`" href="/login">login</a>
`)
//line templates/navbar.qtpl:35
qw422016.N().S(`