/
login.go
35 lines (30 loc) · 1.05 KB
/
login.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package controllers
import (
"html/template"
"net/http"
"strings"
"github.com/apexskier/httpauth"
"github.com/gorilla/csrf"
"github.com/turnkey-commerce/go-ping-sites/viewmodels"
)
type loginController struct {
template *template.Template
authorizer httpauth.Authorizer
}
// get creates the "/login" form.
func (controller *loginController) get(rw http.ResponseWriter, req *http.Request) {
messages := controller.authorizer.Messages(rw, req)
vm := viewmodels.GetLoginViewModel(messages)
vm.CsrfField = csrf.TemplateField(req)
controller.template.Execute(rw, vm)
}
// post handles "/login" post requests.
func (controller *loginController) post(rw http.ResponseWriter, req *http.Request) {
username := req.PostFormValue("username")
password := req.PostFormValue("password")
if err := controller.authorizer.Login(rw, req, username, password, "/"); err != nil && strings.Contains(err.Error(), "already authenticated") {
http.Redirect(rw, req, "/", http.StatusSeeOther)
} else if err != nil {
http.Redirect(rw, req, "/login", http.StatusSeeOther)
}
}