126 lines
2.7 KiB
Go
126 lines
2.7 KiB
Go
package main
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"net/http"
|
|
"strings"
|
|
|
|
"github.com/gorilla/mux"
|
|
)
|
|
|
|
func handleUserRequest(w http.ResponseWriter, req *http.Request) {
|
|
page := initPageData(w, req)
|
|
|
|
vars := mux.Vars(req)
|
|
f, fOk := vars["function"]
|
|
if fOk && f == "login" {
|
|
handleUserLogin(page)
|
|
return
|
|
}
|
|
|
|
if !page.LoggedIn {
|
|
page.SubTitle = "ribbit login"
|
|
page.show("login.html")
|
|
return
|
|
}
|
|
switch f {
|
|
case "feeds":
|
|
handleUserFeeds(page)
|
|
case "updatesubscriptions":
|
|
handleUpdateUserSubs(page)
|
|
default:
|
|
handleUserDashboard(page)
|
|
}
|
|
}
|
|
|
|
func handleUserLoginForm(page *pageData) {
|
|
page.SubTitle = "ribbit login"
|
|
page.show("login.html")
|
|
}
|
|
|
|
func handleUserLogin(page *pageData) {
|
|
var err error
|
|
var u *User
|
|
if page.LoggedIn {
|
|
redirect("/", page.session.w, page.session.req)
|
|
}
|
|
email := page.session.req.FormValue("email")
|
|
|
|
if u, err = m.GetUserByEmail(email); err != nil {
|
|
page.session.setFlashMessage("Invalid Login", "error")
|
|
redirect("/", page.session.w, page.session.req)
|
|
return
|
|
}
|
|
|
|
password := page.session.req.FormValue("password")
|
|
fmt.Println("Hitting func")
|
|
if err := doLogin(u.Uuid, password); err != nil {
|
|
fmt.Println("Login Failure: ", err.Error())
|
|
page.session.setFlashMessage("Invalid Login", "error")
|
|
} else {
|
|
page.session.setStringValue("id", u.Uuid)
|
|
}
|
|
redirect("/", page.session.w, page.session.req)
|
|
}
|
|
|
|
// doLogin attempts to log in with the given email/password
|
|
// If it can't, it returns an error
|
|
func doLogin(uid, password string) error {
|
|
if strings.TrimSpace(uid) != "" && strings.TrimSpace(password) != "" {
|
|
return m.checkCredentials(uid, password)
|
|
}
|
|
return errors.New("Invalid Credentials")
|
|
}
|
|
|
|
func handleUserDashboard(page *pageData) {
|
|
page.SubTitle = "dashboard"
|
|
page.show("user_dashboard.html")
|
|
}
|
|
|
|
func handleUserFeeds(page *pageData) {
|
|
page.SubTitle = "feeds"
|
|
type feedsPageData struct {
|
|
User *User
|
|
FeedSources []FeedSource
|
|
}
|
|
fpd := new(feedsPageData)
|
|
fpd.FeedSources = m.FeedSources
|
|
id, err := page.session.getStringValue("id")
|
|
if err != nil {
|
|
userError(page.session.w)
|
|
return
|
|
}
|
|
fpd.User, err = m.GetUser(id)
|
|
if err != nil {
|
|
userError(page.session.w)
|
|
return
|
|
}
|
|
page.TemplateData = fpd
|
|
page.show("user_feeds.html")
|
|
}
|
|
|
|
func handleUpdateUserSubs(page *pageData) {
|
|
subs := page.session.req.FormValue("user_feeds")
|
|
fmt.Println(subs)
|
|
subPts := strings.Split(subs, ",")
|
|
var userSubs []string
|
|
for i := range subPts {
|
|
subPts[i] = strings.TrimSpace(subPts[i])
|
|
if subPts[i] != "" {
|
|
userSubs = append(userSubs, subPts[i])
|
|
}
|
|
}
|
|
id, err := page.session.getStringValue("id")
|
|
if err != nil {
|
|
userError(page.session.w)
|
|
return
|
|
}
|
|
var u *User
|
|
u, err = m.GetUser(id)
|
|
u.SubSlugs = userSubs
|
|
m.SaveUser(u)
|
|
|
|
redirect("/user/dashboard", page.session.w, page.session.req)
|
|
}
|