| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- // Copyright 2017 Frédéric Guillot. All rights reserved.
- // Use of this source code is governed by the Apache 2.0
- // license that can be found in the LICENSE file.
- package controller
- import (
- "github.com/miniflux/miniflux2/server/core"
- "github.com/miniflux/miniflux2/server/ui/form"
- "log"
- "net/http"
- "time"
- "github.com/tomasen/realip"
- )
- func (c *Controller) ShowLoginPage(ctx *core.Context, request *core.Request, response *core.Response) {
- if ctx.IsAuthenticated() {
- response.Redirect(ctx.Route("unread"))
- return
- }
- response.HTML().Render("login", tplParams{
- "csrf": ctx.CsrfToken(),
- })
- }
- func (c *Controller) CheckLogin(ctx *core.Context, request *core.Request, response *core.Response) {
- authForm := form.NewAuthForm(request.Request())
- tplParams := tplParams{
- "errorMessage": "Invalid username or password.",
- "csrf": ctx.CsrfToken(),
- }
- if err := authForm.Validate(); err != nil {
- log.Println(err)
- response.HTML().Render("login", tplParams)
- return
- }
- if err := c.store.CheckPassword(authForm.Username, authForm.Password); err != nil {
- log.Println(err)
- response.HTML().Render("login", tplParams)
- return
- }
- sessionToken, err := c.store.CreateSession(
- authForm.Username,
- request.Request().UserAgent(),
- realip.RealIP(request.Request()),
- )
- if err != nil {
- response.HTML().ServerError(err)
- return
- }
- log.Printf("[UI:CheckLogin] username=%s just logged in\n", authForm.Username)
- cookie := &http.Cookie{
- Name: "sessionID",
- Value: sessionToken,
- Path: "/",
- Secure: request.IsHTTPS(),
- HttpOnly: true,
- }
- response.SetCookie(cookie)
- response.Redirect(ctx.Route("unread"))
- }
- func (c *Controller) Logout(ctx *core.Context, request *core.Request, response *core.Response) {
- user := ctx.LoggedUser()
- sessionCookie := request.Cookie("sessionID")
- if err := c.store.RemoveSessionByToken(user.ID, sessionCookie); err != nil {
- log.Printf("[UI:Logout] %v", err)
- }
- cookie := &http.Cookie{
- Name: "sessionID",
- Value: "",
- Path: "/",
- Secure: request.IsHTTPS(),
- HttpOnly: true,
- MaxAge: -1,
- Expires: time.Date(1970, 1, 1, 0, 0, 0, 0, time.UTC),
- }
- response.SetCookie(cookie)
- response.Redirect(ctx.Route("login"))
- }
|