diff options
-rw-r--r-- | main.go | 10 | ||||
-rw-r--r-- | pkg/config/config.go | 16 | ||||
-rw-r--r-- | pkg/ext/auth.go | 45 | ||||
-rw-r--r-- | pkg/ext/router.go | 18 | ||||
-rw-r--r-- | pkg/handler/about/handler.go | 4 | ||||
-rw-r--r-- | pkg/handler/auth/login.go | 75 | ||||
-rw-r--r-- | pkg/handler/git/handler.go | 24 | ||||
-rw-r--r-- | pkg/handler/router.go | 5 | ||||
-rw-r--r-- | pkg/service/auth.go | 8 | ||||
-rw-r--r-- | pkg/service/git.go | 4 | ||||
-rw-r--r-- | templates/about.qtpl | 11 | ||||
-rw-r--r-- | templates/about.qtpl.go | 176 | ||||
-rw-r--r-- | templates/base.qtpl | 27 | ||||
-rw-r--r-- | templates/base.qtpl.go | 143 | ||||
-rw-r--r-- | templates/error.qtpl | 10 | ||||
-rw-r--r-- | templates/error.qtpl.go | 165 | ||||
-rw-r--r-- | templates/gititem.qtpl | 10 | ||||
-rw-r--r-- | templates/gititem.qtpl.go | 189 | ||||
-rw-r--r-- | templates/gitlist.qtpl | 9 | ||||
-rw-r--r-- | templates/gitlist.qtpl.go | 215 | ||||
-rw-r--r-- | templates/login.qtpl | 24 | ||||
-rw-r--r-- | templates/login.qtpl.go | 195 | ||||
-rw-r--r-- | templates/navbar.qtpl | 8 | ||||
-rw-r--r-- | templates/navbar.qtpl.go | 211 |
24 files changed, 920 insertions, 682 deletions
@@ -74,8 +74,7 @@ func run() error { return err } - // checking chroma configurationo - + // checking chroma configuration if _, ok := styles.Registry[configRepo.GetSyntaxHighlight()]; !ok { slog.Warn( "Invalid Syntax highlight selected", @@ -87,8 +86,13 @@ func run() error { // services gitService := service.NewGitService(configRepo) + authService := service.NewAuthService(configRepo) - handler, err := handler.MountHandler(gitService, configRepo) + handler, err := handler.MountHandler( + gitService, + authService, + configRepo, + ) if err != nil { return err } diff --git a/pkg/config/config.go b/pkg/config/config.go index 812a06e..da6e0e7 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -55,8 +55,8 @@ type ( ConfigurationRepository struct { rootReadme string listenAddr string - passphrase string - aesKey string + passphrase []byte + aesKey []byte syntaxHighlight string repositories []*GitRepositoryConfiguration } @@ -74,9 +74,9 @@ func LoadConfigurationRepository(configPath string) (*ConfigurationRepository, e } repo := &ConfigurationRepository{ - aesKey: config.AESKey, + aesKey: []byte(config.AESKey), listenAddr: config.ListenAddr, - passphrase: config.Passphrase, + passphrase: []byte(config.Passphrase), repositories: config.Repositories, rootReadme: config.RootReadme, syntaxHighlight: config.SyntaxHighlight, @@ -105,6 +105,14 @@ func (c *ConfigurationRepository) GetListenAddr() string { return c.listenAddr } +func (c *ConfigurationRepository) GetPassphrase() []byte { + return c.passphrase +} + +func (c *ConfigurationRepository) GetBase64AesKey() []byte { + return c.aesKey +} + // GetByName returns configuration of repository for a given name. // It returns nil if there is not match for it. func (c *ConfigurationRepository) GetByName(name string) *GitRepositoryConfiguration { diff --git a/pkg/ext/auth.go b/pkg/ext/auth.go new file mode 100644 index 0000000..bb6c0a2 --- /dev/null +++ b/pkg/ext/auth.go @@ -0,0 +1,45 @@ +package ext + +import ( + "context" + "encoding/base64" + "log/slog" + "net/http" +) + +type authService interface { + ValidateToken(token []byte) (bool, error) +} + +func Authenticate(auth authService) func(next http.HandlerFunc) http.HandlerFunc { + return func(next http.HandlerFunc) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + cookie, err := r.Cookie("auth") + if err != nil { + slog.Error("Error loading cookie", "error", err) + next(w, r) + return + } + + value, err := base64.StdEncoding.DecodeString(cookie.Value) + if err != nil { + slog.Error("Error decoding", "error", err) + next(w, r) + return + } + + valid, err := auth.ValidateToken(value) + if err != nil { + slog.Error("Error validating token", "error", err, "cookie", cookie.Value) + next(w, r) + return + } + + ctx := r.Context() + ctx = context.WithValue(ctx, "logged", true) + + slog.Info("Validated token", "valid?", valid) + next(w, r.WithContext(ctx)) + } + } +} diff --git a/pkg/ext/router.go b/pkg/ext/router.go index 96da1c9..956254d 100644 --- a/pkg/ext/router.go +++ b/pkg/ext/router.go @@ -23,6 +23,7 @@ func NewRouter() *Router { router: http.NewServeMux(), } } + func (r *Router) Handler() http.Handler { return r.router } @@ -35,9 +36,9 @@ func wrapError(next ErrorRequestHandler) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { if err := next(w, r); err != nil { if errors.Is(err, service.ErrRepositoryNotFound) { - NotFound(w) + NotFound(w, r) } else { - InternalServerError(w, err) + InternalServerError(r, w, err) } } } @@ -57,16 +58,21 @@ func (r *Router) HandleFunc(path string, handler ErrorRequestHandler) { r.router.HandleFunc(path, r.run(handler)) } -func NotFound(w http.ResponseWriter) { +func NotFound(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusNotFound) templates.WritePageTemplate(w, &templates.ErrorPage{ Message: "Not Found", - }) + }, r.Context()) +} + +func Redirect(w http.ResponseWriter, location string) { + w.Header().Add("location", location) + w.WriteHeader(http.StatusTemporaryRedirect) } -func InternalServerError(w http.ResponseWriter, err error) { +func InternalServerError(r *http.Request, w http.ResponseWriter, err error) { w.WriteHeader(http.StatusInternalServerError) templates.WritePageTemplate(w, &templates.ErrorPage{ Message: fmt.Sprintf("Internal Server Error:\n%s", err.Error()), - }) + }, r.Context()) } diff --git a/pkg/handler/about/handler.go b/pkg/handler/about/handler.go index ac3d314..ee084cd 100644 --- a/pkg/handler/about/handler.go +++ b/pkg/handler/about/handler.go @@ -26,7 +26,7 @@ func NewAboutHandler(configRepo configurationRepository) *AboutHandler { return &AboutHandler{configRepo.GetRootReadme()} } -func (g *AboutHandler) About(w http.ResponseWriter, _ *http.Request) error { +func (g *AboutHandler) About(w http.ResponseWriter, r *http.Request) error { f, err := os.Open(g.readmePath) if err != nil { return err @@ -50,6 +50,6 @@ func (g *AboutHandler) About(w http.ResponseWriter, _ *http.Request) error { gitList := &templates.AboutPage{ Body: bs, } - templates.WritePageTemplate(w, gitList) + templates.WritePageTemplate(w, gitList, r.Context()) return nil } diff --git a/pkg/handler/auth/login.go b/pkg/handler/auth/login.go index 7e77a67..7014548 100644 --- a/pkg/handler/auth/login.go +++ b/pkg/handler/auth/login.go @@ -1,20 +1,87 @@ package auth import ( + "encoding/base64" "net/http" + "time" "git.gabrielgio.me/cerrado/pkg/ext" "git.gabrielgio.me/cerrado/templates" ) type ( - LoginHandler struct{} + LoginHandler struct { + auth authService + } + + authService interface { + CheckAuth(username, password string) bool + IssueToken() ([]byte, error) + } ) +func NewLoginHandler(auth authService) *LoginHandler { + return &LoginHandler{ + auth: auth, + } +} + +func (g *LoginHandler) Logout(w http.ResponseWriter, r *http.Request) error { + cookie := &http.Cookie{ + Name: "auth", + Value: "", + Path: "/", + Expires: time.Unix(0, 0), + } + + referer := r.Header.Get("Referer") + if referer == "" { + referer = "/" + } + + http.SetCookie(w, cookie) + ext.Redirect(w, referer) + return nil +} + func (g *LoginHandler) Login(w http.ResponseWriter, r *http.Request) error { - ext.SetHTML(w) + if r.Method == "GET" { + ext.SetHTML(w) + + login := &templates.LoginPage{} + templates.WritePageTemplate(w, login, r.Context()) + } else if r.Method == "POST" { + + username := r.FormValue("username") + password := r.FormValue("password") + + if !g.auth.CheckAuth(username, password) { + login := &templates.LoginPage{ + ErrorMessage: "Invalid login", + } + templates.WritePageTemplate(w, login, r.Context()) + } else { + + bytes, err := g.auth.IssueToken() + if err != nil { + return err + } + + cookie := &http.Cookie{ + Name: "auth", + Value: base64.StdEncoding.EncodeToString(bytes), + Path: "/", + MaxAge: 3600, + HttpOnly: true, + Secure: true, + SameSite: http.SameSiteStrictMode, + } + + http.SetCookie(w, cookie) + ext.Redirect(w, "/") + } + + } - login := &templates.LoginPage{} - templates.WritePageTemplate(w, login) return nil } diff --git a/pkg/handler/git/handler.go b/pkg/handler/git/handler.go index 5739c8e..4276159 100644 --- a/pkg/handler/git/handler.go +++ b/pkg/handler/git/handler.go @@ -43,7 +43,7 @@ func NewGitHandler(gitService *service.GitService, confRepo configurationReposit } } -func (g *GitHandler) List(w http.ResponseWriter, _ *http.Request) error { +func (g *GitHandler) List(w http.ResponseWriter, r *http.Request) error { repos, err := g.gitService.ListRepositories() if err != nil { return err @@ -73,7 +73,7 @@ func (g *GitHandler) List(w http.ResponseWriter, _ *http.Request) error { Respositories: repos, About: bs, } - templates.WritePageTemplate(w, gitList) + templates.WritePageTemplate(w, gitList, r.Context()) return nil } @@ -85,7 +85,7 @@ func (g *GitHandler) Archive(w http.ResponseWriter, r *http.Request) error { // TODO: remove it once we can support more than gzip if !strings.HasSuffix(file, ".tar.gz") { - ext.NotFound(w) + ext.NotFound(w, r) return nil } @@ -135,7 +135,7 @@ func (g *GitHandler) Summary(w http.ResponseWriter, r *http.Request) error { Commits: commits, }, } - templates.WritePageTemplate(w, gitList) + templates.WritePageTemplate(w, gitList, r.Context()) return nil } @@ -155,7 +155,7 @@ func (g *GitHandler) About(w http.ResponseWriter, r *http.Request) error { GitItemBase: &templates.GitItemAboutPage{ About: []byte("About file not configured properly"), }, - }) + }, r.Context()) return nil } if err != nil { @@ -179,7 +179,7 @@ func (g *GitHandler) About(w http.ResponseWriter, r *http.Request) error { About: bs, }, } - templates.WritePageTemplate(w, gitList) + templates.WritePageTemplate(w, gitList, r.Context()) return nil } @@ -210,7 +210,7 @@ func (g *GitHandler) Refs(w http.ResponseWriter, r *http.Request) error { Branches: branches, }, } - templates.WritePageTemplate(w, gitList) + templates.WritePageTemplate(w, gitList, r.Context()) return nil } @@ -239,7 +239,7 @@ func (g *GitHandler) Tree(w http.ResponseWriter, r *http.Request) error { Tree: tree, }, } - templates.WritePageTemplate(w, gitList) + templates.WritePageTemplate(w, gitList, r.Context()) return nil } @@ -270,7 +270,7 @@ func (g *GitHandler) Blob(w http.ResponseWriter, r *http.Request) error { Content: []byte("Binary file"), }, } - templates.WritePageTemplate(w, gitList) + templates.WritePageTemplate(w, gitList, r.Context()) return nil } @@ -307,7 +307,7 @@ func (g *GitHandler) Blob(w http.ResponseWriter, r *http.Request) error { Content: code.Bytes(), }, } - templates.WritePageTemplate(w, gitList) + templates.WritePageTemplate(w, gitList, r.Context()) return nil } @@ -328,7 +328,7 @@ func (g *GitHandler) Log(w http.ResponseWriter, r *http.Request) error { Commits: commits, }, } - templates.WritePageTemplate(w, gitList) + templates.WritePageTemplate(w, gitList, r.Context()) return nil } @@ -355,7 +355,7 @@ func (g *GitHandler) Commit(w http.ResponseWriter, r *http.Request) error { Diff: diff, }, } - templates.WritePageTemplate(w, gitList) + templates.WritePageTemplate(w, gitList, r.Context()) return nil } diff --git a/pkg/handler/router.go b/pkg/handler/router.go index 32bd78a..ee4081b 100644 --- a/pkg/handler/router.go +++ b/pkg/handler/router.go @@ -17,12 +17,13 @@ import ( // its sub package don't leak in other places. func MountHandler( gitService *service.GitService, + authService *service.AuthService, configRepo *serverconfig.ConfigurationRepository, ) (http.Handler, error) { var ( gitHandler = git.NewGitHandler(gitService, configRepo) aboutHandler = about.NewAboutHandler(configRepo) - loginHandler = &auth.LoginHandler{} + loginHandler = auth.NewLoginHandler(authService) ) staticHandler, err := static.ServeStaticHandler() @@ -32,10 +33,12 @@ func MountHandler( mux := ext.NewRouter() mux.AddMiddleware(ext.Compress) + mux.AddMiddleware(ext.Authenticate(authService)) mux.AddMiddleware(ext.Log) mux.HandleFunc("/static/{file}", staticHandler) mux.HandleFunc("/login/{$}", loginHandler.Login) + mux.HandleFunc("/logout/{$}", loginHandler.Logout) mux.HandleFunc("/{name}/about/{$}", gitHandler.About) mux.HandleFunc("/{name}/", gitHandler.Summary) mux.HandleFunc("/{name}/refs/{$}", gitHandler.Refs) diff --git a/pkg/service/auth.go b/pkg/service/auth.go index 1fbf4b6..0dbd960 100644 --- a/pkg/service/auth.go +++ b/pkg/service/auth.go @@ -23,7 +23,13 @@ type ( } ) -var tokenSeed = []byte("cerrado") +var tokenSeed = []byte("this is a token for cerrado") + +func NewAuthService(repostiory authRepository) *AuthService { + return &AuthService{ + authRepository: repostiory, + } +} func (a *AuthService) CheckAuth(username, password string) bool { passphrase := a.authRepository.GetPassphrase() diff --git a/pkg/service/git.go b/pkg/service/git.go index f03ba42..6c3912f 100644 --- a/pkg/service/git.go +++ b/pkg/service/git.go @@ -30,9 +30,7 @@ type ( } ) -var ( - ErrRepositoryNotFound = errors.New("Repository not found") -) +var ErrRepositoryNotFound = errors.New("Repository not found") // TODO: make it configurable const timeFormat = "2006.01.02 15:04:05" diff --git a/templates/about.qtpl b/templates/about.qtpl index faee50e..cfbf0d9 100644 --- a/templates/about.qtpl +++ b/templates/about.qtpl @@ -1,16 +1,19 @@ +{% import "context" %} + {% code type AboutPage struct { + LoggedIn bool Body []byte } %} -{% func (p *AboutPage) Title() %}Hello{% endfunc %} +{% func (p *AboutPage) Title(ctx context.Context) %}Hello{% endfunc %} -{% func (p *AboutPage) Navbar() %}{%= Navbar(About) %}{% endfunc %} +{% func (p *AboutPage) Navbar(ctx context.Context) %}{%= Navbar(ctx, About) %}{% endfunc %} -{% func (p *AboutPage) Content() %} +{% func (p *AboutPage) Content(ctx context.Context) %} {%z= p.Body %} {% endfunc %} -{% func (p *AboutPage) Script() %} +{% func (p *AboutPage) Script(ctx context.Context) %} {% endfunc %} diff --git a/templates/about.qtpl.go b/templates/about.qtpl.go index 2c07ceb..a640f7e 100644 --- a/templates/about.qtpl.go +++ b/templates/about.qtpl.go @@ -5,130 +5,100 @@ package templates //line templates/about.qtpl:1 +import "context" + +//line templates/about.qtpl:3 import ( qtio422016 "io" qt422016 "github.com/valyala/quicktemplate" ) -//line templates/about.qtpl:1 +//line templates/about.qtpl:3 var ( _ = qtio422016.Copy _ = qt422016.AcquireByteBuffer ) -//line templates/about.qtpl:2 +//line templates/about.qtpl:4 type AboutPage struct { - Body []byte + LoggedIn bool + Body []byte } -//line templates/about.qtpl:7 -func (p *AboutPage) StreamTitle(qw422016 *qt422016.Writer) { -//line templates/about.qtpl:7 +//line templates/about.qtpl:10 +func (p *AboutPage) StreamTitle(qw422016 *qt422016.Writer, ctx context.Context) { +//line templates/about.qtpl:10 qw422016.N().S(`Hello`) -//line templates/about.qtpl:7 +//line templates/about.qtpl:10 } -//line templates/about.qtpl:7 -func (p *AboutPage) WriteTitle(qq422016 qtio422016.Writer) { -//line templates/about.qtpl:7 +//line templates/about.qtpl:10 +func (p *AboutPage) WriteTitle(qq422016 qtio422016.Writer, ctx context.Context) { +//line templates/about.qtpl:10 qw422016 := qt422016.AcquireWriter(qq422016) -//line templates/about.qtpl:7 - p.StreamTitle(qw422016) -//line templates/about.qtpl:7 +//line templates/about.qtpl:10 + p.StreamTitle(qw422016, ctx) +//line templates/about.qtpl:10 qt422016.ReleaseWriter(qw422016) -//line templates/about.qtpl:7 +//line templates/about.qtpl:10 } -//line templates/about.qtpl:7 -func (p *AboutPage) Title() string { -//line templates/about.qtpl:7 +//line templates/about.qtpl:10 +func (p *AboutPage) Title(ctx context.Context) string { +//line templates/about.qtpl:10 qb422016 := qt422016.AcquireByteBuffer() -//line templates/about.qtpl:7 - p.WriteTitle(qb422016) -//line templates/about.qtpl:7 +//line templates/about.qtpl:10 + p.WriteTitle(qb422016, ctx) +//line templates/about.qtpl:10 qs422016 := string(qb422016.B) -//line templates/about.qtpl:7 +//line templates/about.qtpl:10 qt422016.ReleaseByteBuffer(qb422016) -//line templates/about.qtpl:7 +//line templates/about.qtpl:10 return qs422016 -//line templates/about.qtpl:7 -} - -//line templates/about.qtpl:9 -func (p *AboutPage) StreamNavbar(qw422016 *qt422016.Writer) { -//line templates/about.qtpl:9 - StreamNavbar(qw422016, About) -//line templates/about.qtpl:9 +//line templates/about.qtpl:10 } -//line templates/about.qtpl:9 -func (p *AboutPage) WriteNavbar(qq422016 qtio422016.Writer) { -//line templates/about.qtpl:9 - qw422016 := qt422016.AcquireWriter(qq422016) -//line templates/about.qtpl:9 - p.StreamNavbar(qw422016) -//line templates/about.qtpl:9 - qt422016.ReleaseWriter(qw422016) -//line templates/about.qtpl:9 -} - -//line templates/about.qtpl:9 -func (p *AboutPage) Navbar() string { -//line templates/about.qtpl:9 - qb422016 := qt422016.AcquireByteBuffer() -//line templates/about.qtpl:9 - p.WriteNavbar(qb422016) -//line templates/about.qtpl:9 - qs422016 := string(qb422016.B) -//line templates/about.qtpl:9 - qt422016.ReleaseByteBuffer(qb422016) -//line templates/about.qtpl:9 - return qs422016 -//line templates/about.qtpl:9 -} - -//line templates/about.qtpl:11 -func (p *AboutPage) StreamContent(qw422016 *qt422016.Writer) { -//line templates/about.qtpl:11 - qw422016.N().S(` -`) //line templates/about.qtpl:12 - qw422016.N().Z(p.Body) +func (p *AboutPage) StreamNavbar(qw422016 *qt422016.Writer, ctx context.Context) { +//line templates/about.qtpl:12 + StreamNavbar(qw422016, ctx, About) //line templates/about.qtpl:12 - qw422016.N().S(` -`) -//line templates/about.qtpl:13 } -//line templates/about.qtpl:13 -func (p *AboutPage) WriteContent(qq422016 qtio422016.Writer) { -//line templates/about.qtpl:13 +//line templates/about.qtpl:12 +func (p *AboutPage) WriteNavbar(qq422016 qtio422016.Writer, ctx context.Context) { +//line templates/about.qtpl:12 qw422016 := qt422016.AcquireWriter(qq422016) -//line templates/about.qtpl:13 - p.StreamContent(qw422016) -//line templates/about.qtpl:13 +//line templates/about.qtpl:12 + p.StreamNavbar(qw422016, ctx) +//line templates/about.qtpl:12 qt422016.ReleaseWriter(qw422016) -//line templates/about.qtpl:13 +//line templates/about.qtpl:12 } -//line templates/about.qtpl:13 -func (p *AboutPage) Content() string { -//line templates/about.qtpl:13 +//line templates/about.qtpl:12 +func (p *AboutPage) Navbar(ctx context.Context) string { +//line templates/about.qtpl:12 qb422016 := qt422016.AcquireByteBuffer() -//line templates/about.qtpl:13 - p.WriteContent(qb422016) -//line templates/about.qtpl:13 +//line templates/about.qtpl:12 + p.WriteNavbar(qb422016, ctx) +//line templates/about.qtpl:12 qs422016 := string(qb422016.B) -//line templates/about.qtpl:13 +//line templates/about.qtpl:12 qt422016.ReleaseByteBuffer(qb422016) -//line templates/about.qtpl:13 +//line templates/about.qtpl:12 return qs422016 -//line templates/about.qtpl:13 +//line templates/about.qtpl:12 } +//line templates/about.qtpl:14 +func (p *AboutPage) StreamContent(qw422016 *qt422016.Writer, ctx context.Context) { +//line templates/about.qtpl:14 + qw422016.N().S(` +`) //line templates/about.qtpl:15 -func (p *AboutPage) StreamScript(qw422016 *qt422016.Writer) { + qw422016.N().Z(p.Body) //line templates/about.qtpl:15 qw422016.N().S(` `) @@ -136,22 +106,22 @@ func (p *AboutPage) StreamScript(qw422016 *qt422016.Writer) { } //line templates/about.qtpl:16 -func (p *AboutPage) WriteScript(qq422016 qtio422016.Writer) { +func (p *AboutPage) WriteContent(qq422016 qtio422016.Writer, ctx context.Context) { //line templates/about.qtpl:16 qw422016 := qt422016.AcquireWriter(qq422016) //line templates/about.qtpl:16 - p.StreamScript(qw422016) + p.StreamContent(qw422016, ctx) //line templates/about.qtpl:16 qt422016.ReleaseWriter(qw422016) //line templates/about.qtpl:16 } //line templates/about.qtpl:16 -func (p *AboutPage) Script() string { +func (p *AboutPage) Content(ctx context.Context) string { //line templates/about.qtpl:16 qb422016 := qt422016.AcquireByteBuffer() //line templates/about.qtpl:16 - p.WriteScript(qb422016) + p.WriteContent(qb422016, ctx) //line templates/about.qtpl:16 qs422016 := string(qb422016.B) //line templates/about.qtpl:16 @@ -160,3 +130,37 @@ func (p *AboutPage) Script() string { return qs422016 //line templates/about.qtpl:16 } + +//line templates/about.qtpl:18 +func (p *AboutPage) StreamScript(qw422016 *qt422016.Writer, ctx context.Context) { +//line templates/about.qtpl:18 + qw422016.N().S(` +`) +//line templates/about.qtpl:19 +} + +//line templates/about.qtpl:19 +func (p *AboutPage) WriteScript(qq422016 qtio422016.Writer, ctx context.Context) { +//line templates/about.qtpl:19 + qw422016 := qt422016.AcquireWriter(qq422016) +//line templates/about.qtpl:19 + p.StreamScript(qw422016, ctx) +//line templates/about.qtpl:19 + qt422016.ReleaseWriter(qw422016) +//line templates/about.qtpl:19 +} + +//line templates/about.qtpl:19 +func (p *AboutPage) Script(ctx context.Context) string { +//line templates/about.qtpl:19 + qb422016 := qt422016.AcquireByteBuffer() +//line templates/about.qtpl:19 + p.WriteScript(qb422016, ctx) +//line templates/about.qtpl:19 + qs422016 := string(qb422016.B) +//line templates/about.qtpl:19 + qt422016.ReleaseByteBuffer(qb422016) +//line templates/about.qtpl:19 + return qs422016 +//line templates/about.qtpl:19 +} diff --git a/templates/base.qtpl b/templates/base.qtpl index 566308f..2a42cb8 100644 --- a/templates/base.qtpl +++ b/templates/base.qtpl @@ -1,5 +1,6 @@ This is a base page template. All the other template pages implement this interface. +{% import "context" %} {% import "strconv" %} {% import "time" %} @@ -9,10 +10,10 @@ This is a base page template. All the other template pages implement this interf {% interface Page { - Title() - Content() - Script() - Navbar() + Title(ctx context.Context) + Content(ctx context.Context) + Script(ctx context.Context) + Navbar(ctx context.Context) } %} @@ -25,6 +26,8 @@ Page { } %} + + {% code func TimeFormat(t time.Time) string { return t.Format("02.01.2006") } @@ -35,24 +38,30 @@ Page { } %} +{% code func IsLoggedIn(ctx context.Context) bool { + t, ok := ctx.Value("logged").(bool) + return ok && t + } +%} + Page prints a page implementing Page interface. -{% func PageTemplate(p Page) %} +{% func PageTemplate(p Page, ctx context.Context) %} <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <link rel="icon" href="data:,"> - <title>{%= p.Title() %}</title> + <title>{%= p.Title(ctx) %}</title> <link rel="stylesheet" href="/static/main{%s Slug %}.css"> <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> <meta name="viewport" content="width=device-width, initial-scale=1" /> </head> <body> - {%= p.Navbar() %} + {%= p.Navbar(ctx) %} <div class="container"> - {%= p.Content() %} + {%= p.Content(ctx) %} </div> </body> - {%= p.Script() %} + {%= p.Script(ctx) %} </html> {% endfunc %} diff --git a/templates/base.qtpl.go b/templates/base.qtpl.go index f8ff91f..5bb4532 100644 --- a/templates/base.qtpl.go +++ b/templates/base.qtpl.go @@ -8,57 +8,60 @@ package templates //line templates/base.qtpl:3 -import "strconv" +import "context" //line templates/base.qtpl:4 +import "strconv" + +//line templates/base.qtpl:5 import "time" -//line templates/base.qtpl:6 +//line templates/base.qtpl:7 import ( qtio422016 "io" qt422016 "github.com/valyala/quicktemplate" ) -//line templates/base.qtpl:6 +//line templates/base.qtpl:7 var ( _ = qtio422016.Copy _ = qt422016.AcquireByteBuffer ) -//line templates/base.qtpl:7 +//line templates/base.qtpl:8 var Slug = "" -//line templates/base.qtpl:11 +//line templates/base.qtpl:12 type Page interface { -//line templates/base.qtpl:11 - Title() string -//line templates/base.qtpl:11 - StreamTitle(qw422016 *qt422016.Writer) -//line templates/base.qtpl:11 - WriteTitle(qq422016 qtio422016.Writer) -//line templates/base.qtpl:11 - Content() string -//line templates/base.qtpl:11 - StreamContent(qw422016 *qt422016.Writer) -//line templates/base.qtpl:11 - WriteContent(qq422016 qtio422016.Writer) -//line templates/base.qtpl:11 - Script() string -//line templates/base.qtpl:11 - StreamScript(qw422016 *qt422016.Writer) -//line templates/base.qtpl:11 - WriteScript(qq422016 qtio422016.Writer) -//line templates/base.qtpl:11 - Navbar() string -//line templates/base.qtpl:11 - StreamNavbar(qw422016 *qt422016.Writer) -//line templates/base.qtpl:11 - WriteNavbar(qq422016 qtio422016.Writer) -//line templates/base.qtpl:11 +//line templates/base.qtpl:12 + Title(ctx context.Context) string +//line templates/base.qtpl:12 + StreamTitle(qw422016 *qt422016.Writer, ctx context.Context) +//line templates/base.qtpl:12 + WriteTitle(qq422016 qtio422016.Writer, ctx context.Context) +//line templates/base.qtpl:12 + Content(ctx context.Context) string +//line templates/base.qtpl:12 + StreamContent(qw422016 *qt422016.Writer, ctx context.Context) +//line templates/base.qtpl:12 + WriteContent(qq422016 qtio422016.Writer, ctx context.Context) +//line templates/base.qtpl:12 + Script(ctx context.Context) string +//line templates/base.qtpl:12 + StreamScript(qw422016 *qt422016.Writer, ctx context.Context) +//line templates/base.qtpl:12 + WriteScript(qq422016 qtio422016.Writer, ctx context.Context) +//line templates/base.qtpl:12 + Navbar(ctx context.Context) string +//line templates/base.qtpl:12 + StreamNavbar(qw422016 *qt422016.Writer, ctx context.Context) +//line templates/base.qtpl:12 + WriteNavbar(qq422016 qtio422016.Writer, ctx context.Context) +//line templates/base.qtpl:12 } -//line templates/base.qtpl:20 +//line templates/base.qtpl:21 func FromUInttoString(u *uint) string { if u != nil { return strconv.FormatUint(uint64(*u), 10) @@ -66,21 +69,27 @@ func FromUInttoString(u *uint) string { return "" } -//line templates/base.qtpl:28 +//line templates/base.qtpl:31 func TimeFormat(t time.Time) string { return t.Format("02.01.2006") } -//line templates/base.qtpl:33 +//line templates/base.qtpl:36 func Ignore[T any](v T, _ error) T { return v } +//line templates/base.qtpl:41 +func IsLoggedIn(ctx context.Context) bool { + t, ok := ctx.Value("logged").(bool) + return ok && t +} + // Page prints a page implementing Page interface. -//line templates/base.qtpl:39 -func StreamPageTemplate(qw422016 *qt422016.Writer, p Page) { -//line templates/base.qtpl:39 +//line templates/base.qtpl:48 +func StreamPageTemplate(qw422016 *qt422016.Writer, p Page, ctx context.Context) { +//line templates/base.qtpl:48 qw422016.N().S(` <!DOCTYPE html> <html lang="en"> @@ -88,64 +97,64 @@ func StreamPageTemplate(qw422016 *qt422016.Writer, p Page) { <meta charset="utf-8"> <link rel="icon" href="data:,"> <title>`) -//line templates/base.qtpl:45 - p.StreamTitle(qw422016) -//line templates/base.qtpl:45 +//line templates/base.qtpl:54 + p.StreamTitle(qw422016, ctx) +//line templates/base.qtpl:54 qw422016.N().S(`</title> <link rel="stylesheet" href="/static/main`) -//line templates/base.qtpl:46 +//line templates/base.qtpl:55 qw422016.E().S(Slug) -//line templates/base.qtpl:46 +//line templates/base.qtpl:55 qw422016.N().S(`.css"> <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> <meta name="viewport" content="width=device-width, initial-scale=1" /> </head> <body> `) -//line templates/base.qtpl:51 - p.StreamNavbar(qw422016) -//line templates/base.qtpl:51 +//line templates/base.qtpl:60 + p.StreamNavbar(qw422016, ctx) +//line templates/base.qtpl:60 qw422016.N().S(` <div class="container"> `) -//line templates/base.qtpl:53 - p.StreamContent(qw422016) -//line templates/base.qtpl:53 +//line templates/base.qtpl:62 + p.StreamContent(qw422016, ctx) +//line templates/base.qtpl:62 qw422016.N().S(` </div> </body> `) -//line templates/base.qtpl:56 - p.StreamScript(qw422016) -//line templates/base.qtpl:56 +//line templates/base.qtpl:65 + p.StreamScript(qw422016, ctx) +//line templates/base.qtpl:65 qw422016.N().S(` </html> `) -//line templates/base.qtpl:58 +//line templates/base.qtpl:67 } -//line templates/base.qtpl:58 -func WritePageTemplate(qq422016 qtio422016.Writer, p Page) { -//line templates/base.qtpl:58 +//line templates/base.qtpl:67 +func WritePageTemplate(qq422016 qtio422016.Writer, p Page, ctx context.Context) { +//line templates/base.qtpl:67 qw422016 := qt422016.AcquireWriter(qq422016) -//line templates/base.qtpl:58 - StreamPageTemplate(qw422016, p) -//line templates/base.qtpl:58 +//line templates/base.qtpl:67 + StreamPageTemplate(qw422016, p, ctx) +//line templates/base.qtpl:67 qt422016.ReleaseWriter(qw422016) -//line templates/base.qtpl:58 +//line templates/base.qtpl:67 } -//line templates/base.qtpl:58 -func PageTemplate(p Page) string { -//line templates/base.qtpl:58 +//line templates/base.qtpl:67 +func PageTemplate(p Page, ctx context.Context) string { +//line templates/base.qtpl:67 qb422016 := qt422016.AcquireByteBuffer() -//line templates/base.qtpl:58 - WritePageTemplate(qb422016, p) -//line templates/base.qtpl:58 +//line templates/base.qtpl:67 + WritePageTemplate(qb422016, p, ctx) +//line templates/base.qtpl:67 qs422016 := string(qb422016.B) -//line templates/base.qtpl:58 +//line templates/base.qtpl:67 qt422016.ReleaseByteBuffer(qb422016) -//line templates/base.qtpl:58 +//line templates/base.qtpl:67 return qs422016 -//line templates/base.qtpl:58 +//line templates/base.qtpl:67 } diff --git a/templates/error.qtpl b/templates/error.qtpl index 771d533..65e1321 100644 --- a/templates/error.qtpl +++ b/templates/error.qtpl @@ -1,16 +1,18 @@ +{% import "context" %} + {% code type ErrorPage struct { Message string } %} -{% func (p *ErrorPage) Title() %}Error{% endfunc %} +{% func (p *ErrorPage) Title(ctx context.Context) %}Error{% endfunc %} -{% func (p *ErrorPage) Navbar() %}{%= Navbar(Git) %}{% endfunc %} +{% func (p *ErrorPage) Navbar(ctx context.Context) %}{%= Navbar(ctx, Git) %}{% endfunc %} -{% func (p *ErrorPage) Content() %} +{% func (p *ErrorPage) Content(ctx context.Context) %} {%s p.Message %} {% endfunc %} -{% func (p *ErrorPage) Script() %} +{% func (p *ErrorPage) Script(ctx context.Context) %} {% endfunc %} diff --git a/templates/error.qtpl.go b/templates/error.qtpl.go index f415968..d4732c5 100644 --- a/templates/error.qtpl.go +++ b/templates/error.qtpl.go @@ -5,80 +5,50 @@ package templates //line templates/error.qtpl:1 +import "context" + +//line templates/error.qtpl:3 import ( qtio422016 "io" qt422016 "github.com/valyala/quicktemplate" ) -//line templates/error.qtpl:1 +//line templates/error.qtpl:3 var ( _ = qtio422016.Copy _ = qt422016.AcquireByteBuffer ) -//line templates/error.qtpl:2 +//line templates/error.qtpl:4 type ErrorPage struct { Message string } -//line templates/error.qtpl:7 -func (p *ErrorPage) StreamTitle(qw422016 *qt422016.Writer) { -//line templates/error.qtpl:7 - qw422016.N().S(`Error`) -//line templates/error.qtpl:7 -} - -//line templates/error.qtpl:7 -func (p *ErrorPage) WriteTitle(qq422016 qtio422016.Writer) { -//line templates/error.qtpl:7 - qw422016 := qt422016.AcquireWriter(qq422016) -//line templates/error.qtpl:7 - p.StreamTitle(qw422016) -//line templates/error.qtpl:7 - qt422016.ReleaseWriter(qw422016) -//line templates/error.qtpl:7 -} - -//line templates/error.qtpl:7 -func (p *ErrorPage) Title() string { -//line templates/error.qtpl:7 - qb422016 := qt422016.AcquireByteBuffer() -//line templates/error.qtpl:7 - p.WriteTitle(qb422016) -//line templates/error.qtpl:7 - qs422016 := string(qb422016.B) -//line templates/error.qtpl:7 - qt422016.ReleaseByteBuffer(qb422016) -//line templates/error.qtpl:7 - return qs422016 -//line templates/error.qtpl:7 -} - //line templates/error.qtpl:9 -func (p *ErrorPage) StreamNavbar(qw422016 *qt422016.Writer) { +func (p *ErrorPage) StreamTitle(qw422016 *qt422016.Writer, ctx context.Context) { //line templates/error.qtpl:9 - StreamNavbar(qw422016, Git) + qw422016.N().S(`Error`) //line templates/error.qtpl:9 } //line templates/error.qtpl:9 -func (p *ErrorPage) WriteNavbar(qq422016 qtio422016.Writer) { +func (p *ErrorPage) WriteTitle(qq422016 qtio422016.Writer, ctx context.Context) { //line templates/error.qtpl:9 qw422016 := qt422016.AcquireWriter(qq422016) //line templates/error.qtpl:9 - p.StreamNavbar(qw422016) + p.StreamTitle(qw422016, ctx) //line templates/error.qtpl:9 qt422016.ReleaseWriter(qw422016) //line templates/error.qtpl:9 } //line templates/error.qtpl:9 -func (p *ErrorPage) Navbar() string { +func (p *ErrorPage) Title(ctx context.Context) string { //line templates/error.qtpl:9 qb422016 := qt422016.AcquireByteBuffer() //line templates/error.qtpl:9 - p.WriteNavbar(qb422016) + p.WriteTitle(qb422016, ctx) //line templates/error.qtpl:9 qs422016 := string(qb422016.B) //line templates/error.qtpl:9 @@ -89,74 +59,107 @@ func (p *ErrorPage) Navbar() string { } //line templates/error.qtpl:11 -func (p *ErrorPage) StreamContent(qw422016 *qt422016.Writer) { +func (p *ErrorPage) StreamNavbar(qw422016 *qt422016.Writer, ctx context.Context) { +//line templates/error.qtpl:11 + StreamNavbar(qw422016, ctx, Git) +//line templates/error.qtpl:11 +} + +//line templates/error.qtpl:11 +func (p *ErrorPage) WriteNavbar(qq422016 qtio422016.Writer, ctx context.Context) { +//line templates/error.qtpl:11 + qw422016 := qt422016.AcquireWriter(qq422016) +//line templates/error.qtpl:11 + p.StreamNavbar(qw422016, ctx) +//line templates/error.qtpl:11 + qt422016.ReleaseWriter(qw422016) +//line templates/error.qtpl:11 +} + +//line templates/error.qtpl:11 +func (p *ErrorPage) Navbar(ctx context.Context) string { +//line templates/error.qtpl:11 + qb422016 := qt422016.AcquireByteBuffer() //line templates/error.qtpl:11 + p.WriteNavbar(qb422016, ctx) +//line templates/error.qtpl:11 + qs422016 := string(qb422016.B) +//line templates/error.qtpl:11 + qt422016.ReleaseByteBuffer(qb422016) +//line templates/error.qtpl:11 + return qs422016 +//line templates/error.qtpl:11 +} + +//line templates/error.qtpl:13 +func (p *ErrorPage) StreamContent(qw422016 *qt422016.Writer, ctx context.Context) { +//line templates/error.qtpl:13 qw422016.N().S(` `) -//line templates/error.qtpl:12 +//line templates/error.qtpl:14 qw422016.E().S(p.Message) -//line templates/error.qtpl:12 +//line templates/error.qtpl:14 qw422016.N().S(` `) -//line templates/error.qtpl:13 +//line templates/error.qtpl:15 } -//line templates/error.qtpl:13 -func (p *ErrorPage) WriteContent(qq422016 qtio422016.Writer) { -//line templates/error.qtpl:13 +//line templates/error.qtpl:15 +func (p *ErrorPage) WriteContent(qq422016 qtio422016.Writer, ctx context.Context) { +//line templates/error.qtpl:15 qw422016 := qt422016.AcquireWriter(qq422016) -//line templates/error.qtpl:13 - p.StreamContent(qw422016) -//line templates/error.qtpl:13 +//line templates/error.qtpl:15 + p.StreamContent(qw422016, ctx) +//line templates/error.qtpl:15 qt422016.ReleaseWriter(qw422016) -//line templates/error.qtpl:13 +//line templates/error.qtpl:15 } -//line templates/error.qtpl:13 -func (p *ErrorPage) Content() string { -//line templates/error.qtpl:13 +//line templates/error.qtpl:15 +func (p *ErrorPage) Content(ctx context.Context) string { +//line templates/error.qtpl:15 qb422016 := qt422016.AcquireByteBuffer() -//line templates/error.qtpl:13 - p.WriteContent(qb422016) -//line templates/error.qtpl:13 +//line templates/error.qtpl:15 + p.WriteContent(qb422016, ctx) +//line templates/error.qtpl:15 qs422016 := string(qb422016.B) -//line templates/error.qtpl:13 +//line templates/error.qtpl:15 qt422016.ReleaseByteBuffer(qb422016) -//line templates/error.qtpl:13 +//line templates/error.qtpl:15 return qs422016 -//line templates/error.qtpl:13 +//line templates/error.qtpl:15 } -//line templates/error.qtpl:15 -func (p *ErrorPage) StreamScript(qw422016 *qt422016.Writer) { -//line templates/error.qtpl:15 +//line templates/error.qtpl:17 +func (p *ErrorPage) StreamScript(qw422016 *qt422016.Writer, ctx context.Context) { +//line templates/error.qtpl:17 qw422016.N().S(` `) -//line templates/error.qtpl:16 +//line templates/error.qtpl:18 } -//line templates/error.qtpl:16 -func (p *ErrorPage) WriteScript(qq422016 qtio422016.Writer) { -//line templates/error.qtpl:16 +//line templates/error.qtpl:18 +func (p *ErrorPage) WriteScript(qq422016 qtio422016.Writer, ctx context.Context) { +//line templates/error.qtpl:18 qw422016 := qt422016.AcquireWriter(qq422016) -//line templates/error.qtpl:16 - p.StreamScript(qw422016) -//line templates/error.qtpl:16 +//line templates/error.qtpl:18 + p.StreamScript(qw422016, ctx) +//line templates/error.qtpl:18 qt422016.ReleaseWriter(qw422016) -//line templates/error.qtpl:16 +//line templates/error.qtpl:18 } -//line templates/error.qtpl:16 -func (p *ErrorPage) Script() string { -//line templates/error.qtpl:16 +//line templates/error.qtpl:18 +func (p *ErrorPage) Script(ctx context.Context) string { +//line templates/error.qtpl:18 qb422016 := qt422016.AcquireByteBuffer() -//line templates/error.qtpl:16 - p.WriteScript(qb422016) -//line templates/error.qtpl:16 +//line templates/error.qtpl:18 + p.WriteScript(qb422016, ctx) +//line templates/error.qtpl:18 qs422016 := string(qb422016.B) -//line templates/error.qtpl:16 +//line templates/error.qtpl:18 qt422016.ReleaseByteBuffer(qb422016) -//line templates/error.qtpl:16 +//line templates/error.qtpl:18 return qs422016 -//line templates/error.qtpl:16 +//line templates/error.qtpl:18 } diff --git a/templates/gititem.qtpl b/templates/gititem.qtpl index a6a312d..c43bbfd 100644 --- a/templates/gititem.qtpl +++ b/templates/gititem.qtpl @@ -1,3 +1,5 @@ +{% import "context" %} + {% interface GitItemBase { Nav(name, ref string) @@ -13,16 +15,16 @@ type GitItemPage struct { } %} -{% func (p *GitItemPage) Title() %}Git | {%s p.Name %}{% endfunc %} +{% func (p *GitItemPage) Title(ctx context.Context) %}Git | {%s p.Name %}{% endfunc %} -{% func (p *GitItemPage) Navbar() %}{%= Navbar(Git) %}{% endfunc %} +{% func (p *GitItemPage) Navbar(ctx context.Context) %}{%= Navbar(ctx, Git) %}{% endfunc %} -{% func (p *GitItemPage) Content() %} +{% func (p *GitItemPage) Content(ctx context.Context) %} {%= p.Nav(p.Name, p.Ref) %} <div class="container"> {%= p.GitContent(p.Name, p.Ref) %} </div> {% endfunc %} -{% func (p *GitItemPage) Script() %} +{% func (p *GitItemPage) Script(ctx context.Context) %} {% endfunc %} diff --git a/templates/gititem.qtpl.go b/templates/gititem.qtpl.go index c9a00b2..5292e44 100644 --- a/templates/gititem.qtpl.go +++ b/templates/gititem.qtpl.go @@ -5,101 +5,71 @@ package templates //line templates/gititem.qtpl:1 +import "context" + +//line templates/gititem.qtpl:3 import ( qtio422016 "io" qt422016 "github.com/valyala/quicktemplate" ) -//line templates/gititem.qtpl:1 +//line templates/gititem.qtpl:3 var ( _ = qtio422016.Copy _ = qt422016.AcquireByteBuffer ) -//line templates/gititem.qtpl:2 +//line templates/gititem.qtpl:4 type GitItemBase interface { -//line templates/gititem.qtpl:2 +//line templates/gititem.qtpl:4 Nav(name, ref string) string -//line templates/gititem.qtpl:2 +//line templates/gititem.qtpl:4 StreamNav(qw422016 *qt422016.Writer, name, ref string) -//line templates/gititem.qtpl:2 +//line templates/gititem.qtpl:4 WriteNav(qq422016 qtio422016.Writer, name, ref string) -//line templates/gititem.qtpl:2 +//line templates/gititem.qtpl:4 GitContent(name, ref string) string -//line templates/gititem.qtpl:2 +//line templates/gititem.qtpl:4 StreamGitContent(qw422016 *qt422016.Writer, name, ref string) -//line templates/gititem.qtpl:2 +//line templates/gititem.qtpl:4 WriteGitContent(qq422016 qtio422016.Writer, name, ref string) -//line templates/gititem.qtpl:2 +//line templates/gititem.qtpl:4 } -//line templates/gititem.qtpl:9 +//line templates/gititem.qtpl:11 type GitItemPage struct { Name string Ref string GitItemBase } -//line templates/gititem.qtpl:16 -func (p *GitItemPage) StreamTitle(qw422016 *qt422016.Writer) { -//line templates/gititem.qtpl:16 - qw422016.N().S(`Git | `) -//line templates/gititem.qtpl:16 - qw422016.E().S(p.Name) -//line templates/gititem.qtpl:16 -} - -//line templates/gititem.qtpl:16 -func (p *GitItemPage) WriteTitle(qq422016 qtio422016.Writer) { -//line templates/gititem.qtpl:16 - qw422016 := qt422016.AcquireWriter(qq422016) -//line templates/gititem.qtpl:16 - p.StreamTitle(qw422016) -//line templates/gititem.qtpl:16 - qt422016.ReleaseWriter(qw422016) -//line templates/gititem.qtpl:16 -} - -//line templates/gititem.qtpl:16 -func (p *GitItemPage) Title() string { -//line templates/gititem.qtpl:16 - qb422016 := qt422016.AcquireByteBuffer() -//line templates/gititem.qtpl:16 - p.WriteTitle(qb422016) -//line templates/gititem.qtpl:16 - qs422016 := string(qb422016.B) -//line templates/gititem.qtpl:16 - qt422016.ReleaseByteBuffer(qb422016) -//line templates/gititem.qtpl:16 - return qs422016 -//line templates/gititem.qtpl:16 -} - //line templates/gititem.qtpl:18 -func (p *GitItemPage) StreamNavbar(qw422016 *qt422016.Writer) { +func (p *GitItemPage) StreamTitle(qw422016 *qt422016.Writer, ctx context.Context) { //line templates/gititem.qtpl:18 - StreamNavbar(qw422016, Git) + qw422016.N().S(`Git | `) +//line templates/gititem.qtpl:18 + qw422016.E().S(p.Name) //line templates/gititem.qtpl:18 } //line templates/gititem.qtpl:18 -func (p *GitItemPage) WriteNavbar(qq422016 qtio422016.Writer) { +func (p *GitItemPage) WriteTitle(qq422016 qtio422016.Writer, ctx context.Context) { //line templates/gititem.qtpl:18 qw422016 := qt422016.AcquireWriter(qq422016) //line templates/gititem.qtpl:18 - p.StreamNavbar(qw422016) + p.StreamTitle(qw422016, ctx) //line templates/gititem.qtpl:18 qt422016.ReleaseWriter(qw422016) //line templates/gititem.qtpl:18 } //line templates/gititem.qtpl:18 -func (p *GitItemPage) Navbar() string { +func (p *GitItemPage) Title(ctx context.Context) string { //line templates/gititem.qtpl:18 qb422016 := qt422016.AcquireByteBuffer() //line templates/gititem.qtpl:18 - p.WriteNavbar(qb422016) + p.WriteTitle(qb422016, ctx) //line templates/gititem.qtpl:18 qs422016 := string(qb422016.B) //line templates/gititem.qtpl:18 @@ -110,81 +80,114 @@ func (p *GitItemPage) Navbar() string { } //line templates/gititem.qtpl:20 -func (p *GitItemPage) StreamContent(qw422016 *qt422016.Writer) { +func (p *GitItemPage) StreamNavbar(qw422016 *qt422016.Writer, ctx context.Context) { +//line templates/gititem.qtpl:20 + StreamNavbar(qw422016, ctx, Git) +//line templates/gititem.qtpl:20 +} + +//line templates/gititem.qtpl:20 +func (p *GitItemPage) WriteNavbar(qq422016 qtio422016.Writer, ctx context.Context) { +//line templates/gititem.qtpl:20 + qw422016 := qt422016.AcquireWriter(qq422016) +//line templates/gititem.qtpl:20 + p.StreamNavbar(qw422016, ctx) +//line templates/gititem.qtpl:20 + qt422016.ReleaseWriter(qw422016) +//line templates/gititem.qtpl:20 +} + +//line templates/gititem.qtpl:20 +func (p *GitItemPage) Navbar(ctx context.Context) string { +//line templates/gititem.qtpl:20 + qb422016 := qt422016.AcquireByteBuffer() +//line templates/gititem.qtpl:20 + p.WriteNavbar(qb422016, ctx) +//line templates/gititem.qtpl:20 + qs422016 := string(qb422016.B) +//line templates/gititem.qtpl:20 + qt422016.ReleaseByteBuffer(qb422016) +//line templates/gititem.qtpl:20 + return qs422016 //line templates/gititem.qtpl:20 +} + +//line templates/gititem.qtpl:22 +func (p *GitItemPage) StreamContent(qw422016 *qt422016.Writer, ctx context.Context) { +//line templates/gititem.qtpl:22 qw422016.N().S(` `) -//line templates/gititem.qtpl:21 +//line templates/gititem.qtpl:23 p.StreamNav(qw422016, p.Name, p.Ref) -//line templates/gititem.qtpl:21 +//line templates/gititem.qtpl:23 qw422016.N().S(` <div class="container"> `) -//line templates/gititem.qtpl:23 +//line templates/gititem.qtpl:25 p.StreamGitContent(qw422016, p.Name, p.Ref) -//line templates/gititem.qtpl:23 +//line templates/gititem.qtpl:25 qw422016.N().S(` </div> `) -//line templates/gititem.qtpl:25 +//line templates/gititem.qtpl:27 } -//line templates/gititem.qtpl:25 -func (p *GitItemPage) WriteContent(qq422016 qtio422016.Writer) { -//line templates/gititem.qtpl:25 +//line templates/gititem.qtpl:27 +func (p *GitItemPage) WriteContent(qq422016 qtio422016.Writer, ctx context.Context) { +//line templates/gititem.qtpl:27 qw422016 := qt422016.AcquireWriter(qq422016) -//line templates/gititem.qtpl:25 - p.StreamContent(qw422016) -//line templates/gititem.qtpl:25 +//line templates/gititem.qtpl:27 + p.StreamContent(qw422016, ctx) +//line templates/gititem.qtpl:27 qt422016.ReleaseWriter(qw422016) -//line templates/gititem.qtpl:25 +//line templates/gititem.qtpl:27 } -//line templates/gititem.qtpl:25 -func (p *GitItemPage) Content() string { -//line templates/gititem.qtpl:25 +//line templates/gititem.qtpl:27 +func (p *GitItemPage) Content(ctx context.Context) string { +//line templates/gititem.qtpl:27 qb422016 := qt422016.AcquireByteBuffer() -//line templates/gititem.qtpl:25 - p.WriteContent(qb422016) -//line templates/gititem.qtpl:25 +//line templates/gititem.qtpl:27 + p.WriteContent(qb422016, ctx) +//line templates/gititem.qtpl:27 qs422016 := string(qb422016.B) -//line templates/gititem.qtpl:25 +//line templates/gititem.qtpl:27 qt422016.ReleaseByteBuffer(qb422016) -//line templates/gititem.qtpl:25 +//line templates/gititem.qtpl:27 return qs422016 -//line templates/gititem.qtpl:25 +//line templates/gititem.qtpl:27 } -//line templates/gititem.qtpl:27 -func (p *GitItemPage) StreamScript(qw422016 *qt422016.Writer) { -//line templates/gititem.qtpl:27 +//line templates/gititem.qtpl:29 +func (p *GitItemPage) StreamScript(qw422016 *qt422016.Writer, ctx context.Context) { +//line templates/gititem.qtpl:29 qw422016.N().S(` `) -//line templates/gititem.qtpl:28 +//line templates/gititem.qtpl:30 } -//line templates/gititem.qtpl:28 -func (p *GitItemPage) WriteScript(qq422016 qtio422016.Writer) { -//line templates/gititem.qtpl:28 +//line templates/gititem.qtpl:30 +func (p *GitItemPage) WriteScript(qq422016 qtio422016.Writer, ctx context.Context) { +//line templates/gititem.qtpl:30 qw422016 := qt422016.AcquireWriter(qq422016) -//line templates/gititem.qtpl:28 - p.StreamScript(qw422016) -//line templates/gititem.qtpl:28 +//line templates/gititem.qtpl:30 + p.StreamScript(qw422016, ctx) +//line templates/gititem.qtpl:30 qt422016.ReleaseWriter(qw422016) -//line templates/gititem.qtpl:28 +//line templates/gititem.qtpl:30 } -//line templates/gititem.qtpl:28 -func (p *GitItemPage) Script() string { -//line templates/gititem.qtpl:28 +//line templates/gititem.qtpl:30 +func (p *GitItemPage) Script(ctx context.Context) string { +//line templates/gititem.qtpl:30 qb422016 := qt422016.AcquireByteBuffer() -//line templates/gititem.qtpl:28 - p.WriteScript(qb422016) -//line templates/gititem.qtpl:28 +//line templates/gititem.qtpl:30 + p.WriteScript(qb422016, ctx) +//line templates/gititem.qtpl:30 qs422016 := string(qb422016.B) -//line templates/gititem.qtpl:28 +//line templates/gititem.qtpl:30 qt422016.ReleaseByteBuffer(qb422016) -//line templates/gititem.qtpl:28 +//line templates/gititem.qtpl:30 return qs422016 -//line templates/gititem.qtpl:28 +//line templates/gititem.qtpl:30 } diff --git a/templates/gitlist.qtpl b/templates/gitlist.qtpl index 7c104ca..fa47008 100644 --- a/templates/gitlist.qtpl +++ b/templates/gitlist.qtpl @@ -1,4 +1,5 @@ {% import "git.gabrielgio.me/cerrado/pkg/service" %} +{% import "context" %} {% code type GitListPage struct { @@ -7,11 +8,11 @@ type GitListPage struct { } %} -{% func (p *GitListPage) Title() %}Git | List{% endfunc %} +{% func (p *GitListPage) Title(ctx context.Context) %}Git | List{% endfunc %} -{% func (p *GitListPage) Navbar() %}{%= Navbar(Git) %}{% endfunc %} +{% func (p *GitListPage) Navbar(ctx context.Context) %}{%= Navbar(ctx, Git) %}{% endfunc %} -{% func (p *GitListPage) Content() %} +{% func (p *GitListPage) Content(ctx context.Context) %} <div class="row"> <div class="col-md-6 order-last order-md-first"> <div class="event-list"> @@ -40,5 +41,5 @@ type GitListPage struct { </div> {% endfunc %} -{% func (p *GitListPage) Script() %} +{% func (p *GitListPage) Script(ctx context.Context) %} {% endfunc %} diff --git a/templates/gitlist.qtpl.go b/templates/gitlist.qtpl.go index 29adbc6..601dbb2 100644 --- a/templates/gitlist.qtpl.go +++ b/templates/gitlist.qtpl.go @@ -7,159 +7,162 @@ package templates //line templates/gitlist.qtpl:1 import "git.gabrielgio.me/cerrado/pkg/service" -//line templates/gitlist.qtpl:3 +//line templates/gitlist.qtpl:2 +import "context" + +//line templates/gitlist.qtpl:4 import ( qtio422016 "io" qt422016 "github.com/valyala/quicktemplate" ) -//line templates/gitlist.qtpl:3 +//line templates/gitlist.qtpl:4 var ( _ = qtio422016.Copy _ = qt422016.AcquireByteBuffer ) -//line templates/gitlist.qtpl:4 +//line templates/gitlist.qtpl:5 type GitListPage struct { Respositories []*service.Repository About []byte } -//line templates/gitlist.qtpl:10 -func (p *GitListPage) StreamTitle(qw422016 *qt422016.Writer) { -//line templates/gitlist.qtpl:10 +//line templates/gitlist.qtpl:11 +func (p *GitListPage) StreamTitle(qw422016 *qt422016.Writer, ctx context.Context) { +//line templates/gitlist.qtpl:11 qw422016.N().S(`Git | List`) -//line templates/gitlist.qtpl:10 +//line templates/gitlist.qtpl:11 } -//line templates/gitlist.qtpl:10 -func (p *GitListPage) WriteTitle(qq422016 qtio422016.Writer) { -//line templates/gitlist.qtpl:10 +//line templates/gitlist.qtpl:11 +func (p *GitListPage) WriteTitle(qq422016 qtio422016.Writer, ctx context.Context) { +//line templates/gitlist.qtpl:11 qw422016 := qt422016.AcquireWriter(qq422016) -//line templates/gitlist.qtpl:10 - p.StreamTitle(qw422016) -//line templates/gitlist.qtpl:10 +//line templates/gitlist.qtpl:11 + p.StreamTitle(qw422016, ctx) +//line templates/gitlist.qtpl:11 qt422016.ReleaseWriter(qw422016) -//line templates/gitlist.qtpl:10 +//line templates/gitlist.qtpl:11 } -//line templates/gitlist.qtpl:10 -func (p *GitListPage) Title() string { -//line templates/gitlist.qtpl:10 +//line templates/gitlist.qtpl:11 +func (p *GitListPage) Title(ctx context.Context) string { +//line templates/gitlist.qtpl:11 qb422016 := qt422016.AcquireByteBuffer() -//line templates/gitlist.qtpl:10 - p.WriteTitle(qb422016) -//line templates/gitlist.qtpl:10 +//line templates/gitlist.qtpl:11 + p.WriteTitle(qb422016, ctx) +//line templates/gitlist.qtpl:11 qs422016 := string(qb422016.B) -//line templates/gitlist.qtpl:10 +//line templates/gitlist.qtpl:11 qt422016.ReleaseByteBuffer(qb422016) -//line templates/gitlist.qtpl:10 +//line templates/gitlist.qtpl:11 return qs422016 -//line templates/gitlist.qtpl:10 +//line templates/gitlist.qtpl:11 } -//line templates/gitlist.qtpl:12 -func (p *GitListPage) StreamNavbar(qw422016 *qt422016.Writer) { -//line templates/gitlist.qtpl:12 - StreamNavbar(qw422016, Git) -//line templates/gitlist.qtpl:12 +//line templates/gitlist.qtpl:13 +func (p *GitListPage) StreamNavbar(qw422016 *qt422016.Writer, ctx context.Context) { +//line templates/gitlist.qtpl:13 + StreamNavbar(qw422016, ctx, Git) +//line templates/gitlist.qtpl:13 } -//line templates/gitlist.qtpl:12 -func (p *GitListPage) WriteNavbar(qq422016 qtio422016.Writer) { -//line templates/gitlist.qtpl:12 +//line templates/gitlist.qtpl:13 +func (p *GitListPage) WriteNavbar(qq422016 qtio422016.Writer, ctx context.Context) { +//line templates/gitlist.qtpl:13 qw422016 := qt422016.AcquireWriter(qq422016) -//line templates/gitlist.qtpl:12 - p.StreamNavbar(qw422016) -//line templates/gitlist.qtpl:12 +//line templates/gitlist.qtpl:13 + p.StreamNavbar(qw422016, ctx) +//line templates/gitlist.qtpl:13 qt422016.ReleaseWriter(qw422016) -//line templates/gitlist.qtpl:12 +//line templates/gitlist.qtpl:13 } -//line templates/gitlist.qtpl:12 -func (p *GitListPage) Navbar() string { -//line templates/gitlist.qtpl:12 +//line templates/gitlist.qtpl:13 +func (p *GitListPage) Navbar(ctx context.Context) string { +//line templates/gitlist.qtpl:13 qb422016 := qt422016.AcquireByteBuffer() -//line templates/gitlist.qtpl:12 - p.WriteNavbar(qb422016) -//line templates/gitlist.qtpl:12 +//line templates/gitlist.qtpl:13 + p.WriteNavbar(qb422016, ctx) +//line templates/gitlist.qtpl:13 qs422016 := string(qb422016.B) -//line templates/gitlist.qtpl:12 +//line templates/gitlist.qtpl:13 qt422016.ReleaseByteBuffer(qb422016) -//line templates/gitlist.qtpl:12 +//line templates/gitlist.qtpl:13 return qs422016 -//line templates/gitlist.qtpl:12 +//line templates/gitlist.qtpl:13 } -//line templates/gitlist.qtpl:14 -func (p *GitListPage) StreamContent(qw422016 *qt422016.Writer) { -//line templates/gitlist.qtpl:14 +//line templates/gitlist.qtpl:15 +func (p *GitListPage) StreamContent(qw422016 *qt422016.Writer, ctx context.Context) { +//line templates/gitlist.qtpl:15 qw422016.N().S(` <div class="row"> <div class="col-md-6 order-last order-md-first"> <div class="event-list"> `) -//line templates/gitlist.qtpl:18 +//line templates/gitlist.qtpl:19 for _, r := range p.Respositories { -//line templates/gitlist.qtpl:18 +//line templates/gitlist.qtpl:19 qw422016.N().S(` <div class="event"> <h4> <a href="/`) -//line templates/gitlist.qtpl:21 +//line templates/gitlist.qtpl:22 qw422016.E().S(r.Name) -//line templates/gitlist.qtpl:21 +//line templates/gitlist.qtpl:22 qw422016.N().S(`/">`) -//line templates/gitlist.qtpl:21 +//line templates/gitlist.qtpl:22 qw422016.E().S(r.Name) -//line templates/gitlist.qtpl:21 +//line templates/gitlist.qtpl:22 qw422016.N().S(`</a> </h4> </hr> <p>`) -//line templates/gitlist.qtpl:24 +//line templates/gitlist.qtpl:25 qw422016.E().S(r.Description) -//line templates/gitlist.qtpl:24 +//line templates/gitlist.qtpl:25 qw422016.N().S(`</p> <p> <a href="/`) -//line templates/gitlist.qtpl:26 +//line templates/gitlist.qtpl:27 qw422016.E().S(r.Name) -//line templates/gitlist.qtpl:26 +//line templates/gitlist.qtpl:27 qw422016.N().S(`/log/`) -//line templates/gitlist.qtpl:26 +//line templates/gitlist.qtpl:27 qw422016.E().S(r.Ref) -//line templates/gitlist.qtpl:26 +//line templates/gitlist.qtpl:27 qw422016.N().S(`/">log</a> <a href="/`) -//line templates/gitlist.qtpl:27 +//line templates/gitlist.qtpl:28 qw422016.E().S(r.Name) -//line templates/gitlist.qtpl:27 +//line templates/gitlist.qtpl:28 qw422016.N().S(`/tree/`) -//line templates/gitlist.qtpl:27 +//line templates/gitlist.qtpl:28 qw422016.E().S(r.Ref) -//line templates/gitlist.qtpl:27 +//line templates/gitlist.qtpl:28 qw422016.N().S(`/">tree</a> <a href="/`) -//line templates/gitlist.qtpl:28 +//line templates/gitlist.qtpl:29 qw422016.E().S(r.Name) -//line templates/gitlist.qtpl:28 +//line templates/gitlist.qtpl:29 qw422016.N().S(`/refs/">refs</a> </p> </div> `) -//line templates/gitlist.qtpl:31 +//line templates/gitlist.qtpl:32 } -//line templates/gitlist.qtpl:31 +//line templates/gitlist.qtpl:32 qw422016.N().S(` </div> </div> <div id="about" class="col-md-4 order-first order-md-last"> `) -//line templates/gitlist.qtpl:35 +//line templates/gitlist.qtpl:36 qw422016.N().Z(p.About) -//line templates/gitlist.qtpl:35 +//line templates/gitlist.qtpl:36 qw422016.N().S(` <div class="alert alert-warning text-center" role="alert"> This project is under development, things may be broken or incomplete. @@ -167,65 +170,65 @@ func (p *GitListPage) StreamContent(qw422016 *qt422016.Writer) { </div> </div> `) -//line templates/gitlist.qtpl:41 +//line templates/gitlist.qtpl:42 } -//line templates/gitlist.qtpl:41 -func (p *GitListPage) WriteContent(qq422016 qtio422016.Writer) { -//line templates/gitlist.qtpl:41 +//line templates/gitlist.qtpl:42 +func (p *GitListPage) WriteContent(qq422016 qtio422016.Writer, ctx context.Context) { +//line templates/gitlist.qtpl:42 qw422016 := qt422016.AcquireWriter(qq422016) -//line templates/gitlist.qtpl:41 - p.StreamContent(qw422016) -//line templates/gitlist.qtpl:41 +//line templates/gitlist.qtpl:42 + p.StreamContent(qw422016, ctx) +//line templates/gitlist.qtpl:42 qt422016.ReleaseWriter(qw422016) -//line templates/gitlist.qtpl:41 +//line templates/gitlist.qtpl:42 } -//line templates/gitlist.qtpl:41 -func (p *GitListPage) Content() string { -//line templates/gitlist.qtpl:41 +//line templates/gitlist.qtpl:42 +func (p *GitListPage) Content(ctx context.Context) string { +//line templates/gitlist.qtpl:42 qb422016 := qt422016.AcquireByteBuffer() -//line templates/gitlist.qtpl:41 - p.WriteContent(qb422016) -//line templates/gitlist.qtpl:41 +//line templates/gitlist.qtpl:42 + p.WriteContent(qb422016, ctx) +//line templates/gitlist.qtpl:42 qs422016 := string(qb422016.B) -//line templates/gitlist.qtpl:41 +//line templates/gitlist.qtpl:42 qt422016.ReleaseByteBuffer(qb422016) -//line templates/gitlist.qtpl:41 +//line templates/gitlist.qtpl:42 return qs422016 -//line templates/gitlist.qtpl:41 +//line templates/gitlist.qtpl:42 } -//line templates/gitlist.qtpl:43 -func (p *GitListPage) StreamScript(qw422016 *qt422016.Writer) { -//line templates/gitlist.qtpl:43 +//line templates/gitlist.qtpl:44 +func (p *GitListPage) StreamScript(qw422016 *qt422016.Writer, ctx context.Context) { +//line templates/gitlist.qtpl:44 qw422016.N().S(` `) -//line templates/gitlist.qtpl:44 +//line templates/gitlist.qtpl:45 } -//line templates/gitlist.qtpl:44 -func (p *GitListPage) WriteScript(qq422016 qtio422016.Writer) { -//line templates/gitlist.qtpl:44 +//line templates/gitlist.qtpl:45 +func (p *GitListPage) WriteScript(qq422016 qtio422016.Writer, ctx context.Context) { +//line templates/gitlist.qtpl:45 qw422016 := qt422016.AcquireWriter(qq422016) -//line templates/gitlist.qtpl:44 - p.StreamScript(qw422016) -//line templates/gitlist.qtpl:44 +//line templates/gitlist.qtpl:45 + p.StreamScript(qw422016, ctx) +//line templates/gitlist.qtpl:45 qt422016.ReleaseWriter(qw422016) -//line templates/gitlist.qtpl:44 +//line templates/gitlist.qtpl:45 } -//line templates/gitlist.qtpl:44 -func (p *GitListPage) Script() string { -//line templates/gitlist.qtpl:44 +//line templates/gitlist.qtpl:45 +func (p *GitListPage) Script(ctx context.Context) string { +//line templates/gitlist.qtpl:45 qb422016 := qt422016.AcquireByteBuffer() -//line templates/gitlist.qtpl:44 - p.WriteScript(qb422016) -//line templates/gitlist.qtpl:44 +//line templates/gitlist.qtpl:45 + p.WriteScript(qb422016, ctx) +//line templates/gitlist.qtpl:45 qs422016 := string(qb422016.B) -//line templates/gitlist.qtpl:44 +//line templates/gitlist.qtpl:45 qt422016.ReleaseByteBuffer(qb422016) -//line templates/gitlist.qtpl:44 +//line templates/gitlist.qtpl:45 return qs422016 -//line templates/gitlist.qtpl:44 +//line templates/gitlist.qtpl:45 } diff --git a/templates/login.qtpl b/templates/login.qtpl index eee5711..7815bd7 100644 --- a/templates/login.qtpl +++ b/templates/login.qtpl @@ -1,31 +1,41 @@ +{% import "context" %} + {% code type LoginPage struct { + ErrorMessage string } %} -{% func (p *LoginPage) Title() %}Hello{% endfunc %} +{% func (p *LoginPage) Title(ctx context.Context) %}Hello{% endfunc %} -{% func (p *LoginPage) Navbar() %}{%= Navbar(Login) %}{% endfunc %} +{% func (p *LoginPage) Navbar(ctx context.Context) %}{%= Navbar(ctx, Login) %}{% endfunc %} -{% func (p *LoginPage) Content() %} +{% func (p *LoginPage) Content(ctx context.Context) %} <div class="row"> <div class="col-md-6 offset-md-3"> - <form> + <form action="/login/" method="POST"> <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"> + <input type="text" class="form-control" name="username" id="username"> </div> <div class="form-group m-3"> <label for="password" class="form-label">Password</label> - <input type="password" class="form-control" id="password"> + <input type="password" class="form-control" name="password" id="password"> </div> <div class="form-group m-3"> <button type="submit" class="btn btn-primary">Login</button> </div> </form> </div> + {% if p.ErrorMessage != "" %} + <div class="col-md-6 offset-md-3"> + <div class="alert alert-warning text-center" > + {%s p.ErrorMessage %} + </div> + </div> + {% endif %} </div> {% endfunc %} -{% func (p *LoginPage) Script() %} +{% func (p *LoginPage) Script(ctx context.Context) %} {% endfunc %} diff --git a/templates/login.qtpl.go b/templates/login.qtpl.go index 0d3d2b0..5c07a44 100644 --- a/templates/login.qtpl.go +++ b/templates/login.qtpl.go @@ -5,169 +5,192 @@ package templates //line templates/login.qtpl:1 +import "context" + +//line templates/login.qtpl:3 import ( qtio422016 "io" qt422016 "github.com/valyala/quicktemplate" ) -//line templates/login.qtpl:1 +//line templates/login.qtpl:3 var ( _ = qtio422016.Copy _ = qt422016.AcquireByteBuffer ) -//line templates/login.qtpl:2 +//line templates/login.qtpl:4 type LoginPage struct { + ErrorMessage string } -//line templates/login.qtpl:6 -func (p *LoginPage) StreamTitle(qw422016 *qt422016.Writer) { -//line templates/login.qtpl:6 +//line templates/login.qtpl:9 +func (p *LoginPage) StreamTitle(qw422016 *qt422016.Writer, ctx context.Context) { +//line templates/login.qtpl:9 qw422016.N().S(`Hello`) -//line templates/login.qtpl:6 +//line templates/login.qtpl:9 } -//line templates/login.qtpl:6 -func (p *LoginPage) WriteTitle(qq422016 qtio422016.Writer) { -//line templates/login.qtpl:6 +//line templates/login.qtpl:9 +func (p *LoginPage) WriteTitle(qq422016 qtio422016.Writer, ctx context.Context) { +//line templates/login.qtpl:9 qw422016 := qt422016.AcquireWriter(qq422016) -//line templates/login.qtpl:6 - p.StreamTitle(qw422016) -//line templates/login.qtpl:6 +//line templates/login.qtpl:9 + p.StreamTitle(qw422016, ctx) +//line templates/login.qtpl:9 qt422016.ReleaseWriter(qw422016) -//line templates/login.qtpl:6 +//line templates/login.qtpl:9 } -//line templates/login.qtpl:6 -func (p *LoginPage) Title() string { -//line templates/login.qtpl:6 +//line templates/login.qtpl:9 +func (p *LoginPage) Title(ctx context.Context) string { +//line templates/login.qtpl:9 qb422016 := qt422016.AcquireByteBuffer() -//line templates/login.qtpl:6 - p.WriteTitle(qb422016) -//line templates/login.qtpl:6 +//line templates/login.qtpl:9 + p.WriteTitle(qb422016, ctx) +//line templates/login.qtpl:9 qs422016 := string(qb422016.B) -//line templates/login.qtpl:6 +//line templates/login.qtpl:9 qt422016.ReleaseByteBuffer(qb422016) -//line templates/login.qtpl:6 +//line templates/login.qtpl:9 return qs422016 -//line templates/login.qtpl:6 +//line templates/login.qtpl:9 } -//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:11 +func (p *LoginPage) StreamNavbar(qw422016 *qt422016.Writer, ctx context.Context) { +//line templates/login.qtpl:11 + StreamNavbar(qw422016, ctx, Login) +//line templates/login.qtpl:11 } -//line templates/login.qtpl:8 -func (p *LoginPage) WriteNavbar(qq422016 qtio422016.Writer) { -//line templates/login.qtpl:8 +//line templates/login.qtpl:11 +func (p *LoginPage) WriteNavbar(qq422016 qtio422016.Writer, ctx context.Context) { +//line templates/login.qtpl:11 qw422016 := qt422016.AcquireWriter(qq422016) -//line templates/login.qtpl:8 - p.StreamNavbar(qw422016) -//line templates/login.qtpl:8 +//line templates/login.qtpl:11 + p.StreamNavbar(qw422016, ctx) +//line templates/login.qtpl:11 qt422016.ReleaseWriter(qw422016) -//line templates/login.qtpl:8 +//line templates/login.qtpl:11 } -//line templates/login.qtpl:8 -func (p *LoginPage) Navbar() string { -//line templates/login.qtpl:8 +//line templates/login.qtpl:11 +func (p *LoginPage) Navbar(ctx context.Context) string { +//line templates/login.qtpl:11 qb422016 := qt422016.AcquireByteBuffer() -//line templates/login.qtpl:8 - p.WriteNavbar(qb422016) -//line templates/login.qtpl:8 +//line templates/login.qtpl:11 + p.WriteNavbar(qb422016, ctx) +//line templates/login.qtpl:11 qs422016 := string(qb422016.B) -//line templates/login.qtpl:8 +//line templates/login.qtpl:11 qt422016.ReleaseByteBuffer(qb422016) -//line templates/login.qtpl:8 +//line templates/login.qtpl:11 return qs422016 -//line templates/login.qtpl:8 +//line templates/login.qtpl:11 } -//line templates/login.qtpl:10 -func (p *LoginPage) StreamContent(qw422016 *qt422016.Writer) { -//line templates/login.qtpl:10 +//line templates/login.qtpl:13 +func (p *LoginPage) StreamContent(qw422016 *qt422016.Writer, ctx context.Context) { +//line templates/login.qtpl:13 qw422016.N().S(` <div class="row"> <div class="col-md-6 offset-md-3"> - <form> + <form action="/login/" method="POST"> <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"> + <input type="text" class="form-control" name="username" id="username"> </div> <div class="form-group m-3"> <label for="password" class="form-label">Password</label> - <input type="password" class="form-control" id="password"> + <input type="password" class="form-control" name="password" id="password"> </div> <div class="form-group m-3"> <button type="submit" class="btn btn-primary">Login</button> </div> </form> </div> + `) +//line templates/login.qtpl:30 + if p.ErrorMessage != "" { +//line templates/login.qtpl:30 + qw422016.N().S(` + <div class="col-md-6 offset-md-3"> + <div class="alert alert-warning text-center" > + `) +//line templates/login.qtpl:33 + qw422016.E().S(p.ErrorMessage) +//line templates/login.qtpl:33 + qw422016.N().S(` + </div> + </div> + `) +//line templates/login.qtpl:36 + } +//line templates/login.qtpl:36 + qw422016.N().S(` </div> `) -//line templates/login.qtpl:28 +//line templates/login.qtpl:38 } -//line templates/login.qtpl:28 -func (p *LoginPage) WriteContent(qq422016 qtio422016.Writer) { -//line templates/login.qtpl:28 +//line templates/login.qtpl:38 +func (p *LoginPage) WriteContent(qq422016 qtio422016.Writer, ctx context.Context) { +//line templates/login.qtpl:38 qw422016 := qt422016.AcquireWriter(qq422016) -//line templates/login.qtpl:28 - p.StreamContent(qw422016) -//line templates/login.qtpl:28 +//line templates/login.qtpl:38 + p.StreamContent(qw422016, ctx) +//line templates/login.qtpl:38 qt422016.ReleaseWriter(qw422016) -//line templates/login.qtpl:28 +//line templates/login.qtpl:38 } -//line templates/login.qtpl:28 -func (p *LoginPage) Content() string { -//line templates/login.qtpl:28 +//line templates/login.qtpl:38 +func (p *LoginPage) Content(ctx context.Context) string { +//line templates/login.qtpl:38 qb422016 := qt422016.AcquireByteBuffer() -//line templates/login.qtpl:28 - p.WriteContent(qb422016) -//line templates/login.qtpl:28 +//line templates/login.qtpl:38 + p.WriteContent(qb422016, ctx) +//line templates/login.qtpl:38 qs422016 := string(qb422016.B) -//line templates/login.qtpl:28 +//line templates/login.qtpl:38 qt422016.ReleaseByteBuffer(qb422016) -//line templates/login.qtpl:28 +//line templates/login.qtpl:38 return qs422016 -//line templates/login.qtpl:28 +//line templates/login.qtpl:38 } -//line templates/login.qtpl:30 -func (p *LoginPage) StreamScript(qw422016 *qt422016.Writer) { -//line templates/login.qtpl:30 +//line templates/login.qtpl:40 +func (p *LoginPage) StreamScript(qw422016 *qt422016.Writer, ctx context.Context) { +//line templates/login.qtpl:40 qw422016.N().S(` `) -//line templates/login.qtpl:31 +//line templates/login.qtpl:41 } -//line templates/login.qtpl:31 -func (p *LoginPage) WriteScript(qq422016 qtio422016.Writer) { -//line templates/login.qtpl:31 +//line templates/login.qtpl:41 +func (p *LoginPage) WriteScript(qq422016 qtio422016.Writer, ctx context.Context) { +//line templates/login.qtpl:41 qw422016 := qt422016.AcquireWriter(qq422016) -//line templates/login.qtpl:31 - p.StreamScript(qw422016) -//line templates/login.qtpl:31 +//line templates/login.qtpl:41 + p.StreamScript(qw422016, ctx) +//line templates/login.qtpl:41 qt422016.ReleaseWriter(qw422016) -//line templates/login.qtpl:31 +//line templates/login.qtpl:41 } -//line templates/login.qtpl:31 -func (p *LoginPage) Script() string { -//line templates/login.qtpl:31 +//line templates/login.qtpl:41 +func (p *LoginPage) Script(ctx context.Context) string { +//line templates/login.qtpl:41 qb422016 := qt422016.AcquireByteBuffer() -//line templates/login.qtpl:31 - p.WriteScript(qb422016) -//line templates/login.qtpl:31 +//line templates/login.qtpl:41 + p.WriteScript(qb422016, ctx) +//line templates/login.qtpl:41 qs422016 := string(qb422016.B) -//line templates/login.qtpl:31 +//line templates/login.qtpl:41 qt422016.ReleaseByteBuffer(qb422016) -//line templates/login.qtpl:31 +//line templates/login.qtpl:41 return qs422016 -//line templates/login.qtpl:31 +//line templates/login.qtpl:41 } diff --git a/templates/navbar.qtpl b/templates/navbar.qtpl index 18400b1..3cd1b39 100644 --- a/templates/navbar.qtpl +++ b/templates/navbar.qtpl @@ -1,3 +1,5 @@ +{% import "context" %} + {% code type Selection int const ( @@ -22,13 +24,17 @@ const ( {% func insertIfEqual(s, d any) %}{% if s == d %} selected{% endif %}{% endfunc %} -{% func Navbar (s Selection) %} +{% func Navbar (ctx context.Context, s Selection) %} <nav class="container navbar navbar-expand"> <div class="navbar-nav"> <a class="nav-link{%= insertIfEqual(s, Git) %}" href="/">git</a> </div> <div class="navbar-nav ms-auto"> + {% if IsLoggedIn(ctx) %} + <a class="nav-link{%= insertIfEqual(s, Login) %}" href="/logout">logout</a> + {% else %} <a class="nav-link{%= insertIfEqual(s, Login) %}" href="/login">login</a> + {% endif %} {% comment %} Add this back once needed <a class="nav-link{%= insertIfEqual(s, List) %}" href="/list/">list</a> diff --git a/templates/navbar.qtpl.go b/templates/navbar.qtpl.go index e080785..d900c9c 100644 --- a/templates/navbar.qtpl.go +++ b/templates/navbar.qtpl.go @@ -5,19 +5,22 @@ package templates //line templates/navbar.qtpl:1 +import "context" + +//line templates/navbar.qtpl:3 import ( qtio422016 "io" qt422016 "github.com/valyala/quicktemplate" ) -//line templates/navbar.qtpl:1 +//line templates/navbar.qtpl:3 var ( _ = qtio422016.Copy _ = qt422016.AcquireByteBuffer ) -//line templates/navbar.qtpl:2 +//line templates/navbar.qtpl:4 type Selection int const ( @@ -28,7 +31,7 @@ const ( Login ) -//line templates/navbar.qtpl:13 +//line templates/navbar.qtpl:15 type GitSelection int const ( @@ -39,213 +42,233 @@ const ( Tree ) -//line templates/navbar.qtpl:23 +//line templates/navbar.qtpl:25 func streaminsertIfEqual(qw422016 *qt422016.Writer, s, d any) { -//line templates/navbar.qtpl:23 +//line templates/navbar.qtpl:25 if s == d { -//line templates/navbar.qtpl:23 +//line templates/navbar.qtpl:25 qw422016.N().S(` selected`) -//line templates/navbar.qtpl:23 +//line templates/navbar.qtpl:25 } -//line templates/navbar.qtpl:23 +//line templates/navbar.qtpl:25 } -//line templates/navbar.qtpl:23 +//line templates/navbar.qtpl:25 func writeinsertIfEqual(qq422016 qtio422016.Writer, s, d any) { -//line templates/navbar.qtpl:23 +//line templates/navbar.qtpl:25 qw422016 := qt422016.AcquireWriter(qq422016) -//line templates/navbar.qtpl:23 +//line templates/navbar.qtpl:25 streaminsertIfEqual(qw422016, s, d) -//line templates/navbar.qtpl:23 +//line templates/navbar.qtpl:25 qt422016.ReleaseWriter(qw422016) -//line templates/navbar.qtpl:23 +//line templates/navbar.qtpl:25 } -//line templates/navbar.qtpl:23 +//line templates/navbar.qtpl:25 func insertIfEqual(s, d any) string { -//line templates/navbar.qtpl:23 +//line templates/navbar.qtpl:25 qb422016 := qt422016.AcquireByteBuffer() -//line templates/navbar.qtpl:23 +//line templates/navbar.qtpl:25 writeinsertIfEqual(qb422016, s, d) -//line templates/navbar.qtpl:23 +//line templates/navbar.qtpl:25 qs422016 := string(qb422016.B) -//line templates/navbar.qtpl:23 +//line templates/navbar.qtpl:25 qt422016.ReleaseByteBuffer(qb422016) -//line templates/navbar.qtpl:23 +//line templates/navbar.qtpl:25 return qs422016 -//line templates/navbar.qtpl:23 +//line templates/navbar.qtpl:25 } -//line templates/navbar.qtpl:25 -func StreamNavbar(qw422016 *qt422016.Writer, s Selection) { -//line templates/navbar.qtpl:25 +//line templates/navbar.qtpl:27 +func StreamNavbar(qw422016 *qt422016.Writer, ctx context.Context, s Selection) { +//line templates/navbar.qtpl:27 qw422016.N().S(` <nav class="container navbar navbar-expand"> <div class="navbar-nav"> <a class="nav-link`) -//line templates/navbar.qtpl:28 +//line templates/navbar.qtpl:30 streaminsertIfEqual(qw422016, s, Git) -//line templates/navbar.qtpl:28 +//line templates/navbar.qtpl:30 qw422016.N().S(`" href="/">git</a> </div> <div class="navbar-nav ms-auto"> + `) +//line templates/navbar.qtpl:33 + if IsLoggedIn(ctx) { +//line templates/navbar.qtpl:33 + qw422016.N().S(` <a class="nav-link`) -//line templates/navbar.qtpl:31 - streaminsertIfEqual(qw422016, s, Login) -//line templates/navbar.qtpl:31 - qw422016.N().S(`" href="/login">login</a> -`) +//line templates/navbar.qtpl:34 + streaminsertIfEqual(qw422016, s, Login) +//line templates/navbar.qtpl:34 + qw422016.N().S(`" href="/logout">logout</a> + `) +//line templates/navbar.qtpl:35 + } else { //line templates/navbar.qtpl:35 + qw422016.N().S(` + <a class="nav-link`) +//line templates/navbar.qtpl:36 + streaminsertIfEqual(qw422016, s, Login) +//line templates/navbar.qtpl:36 + qw422016.N().S(`" href="/login">login</a> + `) +//line templates/navbar.qtpl:37 + } +//line templates/navbar.qtpl:37 qw422016.N().S(` `) -//line templates/navbar.qtpl:39 +//line templates/navbar.qtpl:41 + qw422016.N().S(` +`) +//line templates/navbar.qtpl:45 qw422016.N().S(` </div> </nav> `) -//line templates/navbar.qtpl:42 +//line templates/navbar.qtpl:48 } -//line templates/navbar.qtpl:42 -func WriteNavbar(qq422016 qtio422016.Writer, s Selection) { -//line templates/navbar.qtpl:42 +//line templates/navbar.qtpl:48 +func WriteNavbar(qq422016 qtio422016.Writer, ctx context.Context, s Selection) { +//line templates/navbar.qtpl:48 qw422016 := qt422016.AcquireWriter(qq422016) -//line templates/navbar.qtpl:42 - StreamNavbar(qw422016, s) -//line templates/navbar.qtpl:42 +//line templates/navbar.qtpl:48 + StreamNavbar(qw422016, ctx, s) +//line templates/navbar.qtpl:48 qt422016.ReleaseWriter(qw422016) -//line templates/navbar.qtpl:42 +//line templates/navbar.qtpl:48 } -//line templates/navbar.qtpl:42 -func Navbar(s Selection) string { -//line templates/navbar.qtpl:42 +//line templates/navbar.qtpl:48 +func Navbar(ctx context.Context, s Selection) string { +//line templates/navbar.qtpl:48 qb422016 := qt422016.AcquireByteBuffer() -//line templates/navbar.qtpl:42 - WriteNavbar(qb422016, s) -//line templates/navbar.qtpl:42 +//line templates/navbar.qtpl:48 + WriteNavbar(qb422016, ctx, s) +//line templates/navbar.qtpl:48 qs422016 := string(qb422016.B) -//line templates/navbar.qtpl:42 +//line templates/navbar.qtpl:48 qt422016.ReleaseByteBuffer(qb422016) -//line templates/navbar.qtpl:42 +//line templates/navbar.qtpl:48 return qs422016 -//line templates/navbar.qtpl:42 +//line templates/navbar.qtpl:48 } -//line templates/navbar.qtpl:44 +//line templates/navbar.qtpl:50 func StreamGitItemNav(qw422016 *qt422016.Writer, name, ref string, s GitSelection) { -//line templates/navbar.qtpl:44 +//line templates/navbar.qtpl:50 qw422016.N().S(` <div class="row"> <h3 id="name">`) -//line templates/navbar.qtpl:46 +//line templates/navbar.qtpl:52 qw422016.E().S(name) -//line templates/navbar.qtpl:46 +//line templates/navbar.qtpl:52 qw422016.N().S(` `) -//line templates/navbar.qtpl:46 +//line templates/navbar.qtpl:52 if ref != "" && (s == Log || s == Tree) { -//line templates/navbar.qtpl:46 +//line templates/navbar.qtpl:52 qw422016.N().S(`@ `) -//line templates/navbar.qtpl:46 +//line templates/navbar.qtpl:52 qw422016.E().S(ref) -//line templates/navbar.qtpl:46 +//line templates/navbar.qtpl:52 } -//line templates/navbar.qtpl:46 +//line templates/navbar.qtpl:52 qw422016.N().S(`</h3> </div> <div class="row"> <ul class="nav"> <li class="nav-item"> <a class="nav-link`) -//line templates/navbar.qtpl:51 +//line templates/navbar.qtpl:57 streaminsertIfEqual(qw422016, s, Readme) -//line templates/navbar.qtpl:51 +//line templates/navbar.qtpl:57 qw422016.N().S(`" aria-current="page" href="/`) -//line templates/navbar.qtpl:51 +//line templates/navbar.qtpl:57 qw422016.E().S(name) -//line templates/navbar.qtpl:51 +//line templates/navbar.qtpl:57 qw422016.N().S(`/about/">about</a> </li> <li class="nav-item"> <a class="nav-link`) -//line templates/navbar.qtpl:54 +//line templates/navbar.qtpl:60 streaminsertIfEqual(qw422016, s, Summary) -//line templates/navbar.qtpl:54 +//line templates/navbar.qtpl:60 qw422016.N().S(`" aria-current="page" href="/`) -//line templates/navbar.qtpl:54 +//line templates/navbar.qtpl:60 qw422016.E().S(name) -//line templates/navbar.qtpl:54 +//line templates/navbar.qtpl:60 qw422016.N().S(`/">summary</a> </li> <li class="nav-item"> <a class="nav-link`) -//line templates/navbar.qtpl:57 +//line templates/navbar.qtpl:63 streaminsertIfEqual(qw422016, s, Refs) -//line templates/navbar.qtpl:57 +//line templates/navbar.qtpl:63 qw422016.N().S(`" aria-current="page" href="/`) -//line templates/navbar.qtpl:57 +//line templates/navbar.qtpl:63 qw422016.E().S(name) -//line templates/navbar.qtpl:57 +//line templates/navbar.qtpl:63 qw422016.N().S(`/refs/">refs</a> </li> <li class="nav-item"> <a class="nav-link`) -//line templates/navbar.qtpl:60 +//line templates/navbar.qtpl:66 streaminsertIfEqual(qw422016, s, Log) -//line templates/navbar.qtpl:60 +//line templates/navbar.qtpl:66 qw422016.N().S(`" aria-current="page" href="/`) -//line templates/navbar.qtpl:60 +//line templates/navbar.qtpl:66 qw422016.E().S(name) -//line templates/navbar.qtpl:60 +//line templates/navbar.qtpl:66 qw422016.N().S(`/log/`) -//line templates/navbar.qtpl:60 +//line templates/navbar.qtpl:66 qw422016.E().S(ref) -//line templates/navbar.qtpl:60 +//line templates/navbar.qtpl:66 qw422016.N().S(`/">log</a> </li> <li class="nav-item"> <a class="nav-link`) -//line templates/navbar.qtpl:63 +//line templates/navbar.qtpl:69 streaminsertIfEqual(qw422016, s, Tree) -//line templates/navbar.qtpl:63 +//line templates/navbar.qtpl:69 qw422016.N().S(`" aria-current="page" href="/`) -//line templates/navbar.qtpl:63 +//line templates/navbar.qtpl:69 qw422016.E().S(name) -//line templates/navbar.qtpl:63 +//line templates/navbar.qtpl:69 qw422016.N().S(`/tree/`) -//line templates/navbar.qtpl:63 +//line templates/navbar.qtpl:69 qw422016.E().S(ref) -//line templates/navbar.qtpl:63 +//line templates/navbar.qtpl:69 qw422016.N().S(`/">tree</a> </li> </ul> </div> `) -//line templates/navbar.qtpl:67 +//line templates/navbar.qtpl:73 } -//line templates/navbar.qtpl:67 +//line templates/navbar.qtpl:73 func WriteGitItemNav(qq422016 qtio422016.Writer, name, ref string, s GitSelection) { -//line templates/navbar.qtpl:67 +//line templates/navbar.qtpl:73 qw422016 := qt422016.AcquireWriter(qq422016) -//line templates/navbar.qtpl:67 +//line templates/navbar.qtpl:73 StreamGitItemNav(qw422016, name, ref, s) -//line templates/navbar.qtpl:67 +//line templates/navbar.qtpl:73 qt422016.ReleaseWriter(qw422016) -//line templates/navbar.qtpl:67 +//line templates/navbar.qtpl:73 } -//line templates/navbar.qtpl:67 +//line templates/navbar.qtpl:73 func GitItemNav(name, ref string, s GitSelection) string { -//line templates/navbar.qtpl:67 +//line templates/navbar.qtpl:73 qb422016 := qt422016.AcquireByteBuffer() -//line templates/navbar.qtpl:67 +//line templates/navbar.qtpl:73 WriteGitItemNav(qb422016, name, ref, s) -//line templates/navbar.qtpl:67 +//line templates/navbar.qtpl:73 qs422016 := string(qb422016.B) -//line templates/navbar.qtpl:67 +//line templates/navbar.qtpl:73 qt422016.ReleaseByteBuffer(qb422016) -//line templates/navbar.qtpl:67 +//line templates/navbar.qtpl:73 return qs422016 -//line templates/navbar.qtpl:67 +//line templates/navbar.qtpl:73 } |