mirror of
https://github.com/kataras/iris.git
synced 2025-01-23 18:51:03 +01:00
98 lines
2.2 KiB
Go
98 lines
2.2 KiB
Go
package iriscontrol
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/kataras/iris"
|
|
"github.com/kataras/iris/sessions"
|
|
// _ empty because it auto-registers
|
|
_ "github.com/kataras/iris/sessions/providers/memory"
|
|
)
|
|
|
|
var panelSessions *sessions.Manager
|
|
|
|
func init() {
|
|
//using the default
|
|
panelSessions = sessions.New()
|
|
}
|
|
|
|
type user struct {
|
|
username string
|
|
password string
|
|
}
|
|
type userAuth struct {
|
|
authenticatedUsers []user
|
|
}
|
|
|
|
// newUserAuth returns a new userAuth object, parameter is the authenticated users as map
|
|
func newUserAuth(usersMap map[string]string) *userAuth {
|
|
if usersMap != nil {
|
|
obj := &userAuth{make([]user, 0)}
|
|
for key, val := range usersMap {
|
|
obj.authenticatedUsers = append(obj.authenticatedUsers, user{key, val})
|
|
}
|
|
|
|
return obj
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (u *userAuth) login(ctx *iris.Context) {
|
|
session := panelSessions.Start(ctx)
|
|
|
|
username := ctx.PostFormValue("username")
|
|
password := ctx.PostFormValue("password")
|
|
|
|
for _, authenticatedUser := range u.authenticatedUsers {
|
|
if authenticatedUser.username == username && authenticatedUser.password == password {
|
|
session.Set("username", username)
|
|
session.Set("password", password)
|
|
ctx.Write("success")
|
|
return
|
|
}
|
|
}
|
|
ctx.Write("fail")
|
|
|
|
}
|
|
|
|
func (u *userAuth) logout(ctx *iris.Context) {
|
|
session := panelSessions.Start(ctx)
|
|
session.Set("user", nil)
|
|
|
|
ctx.Redirect("/login")
|
|
}
|
|
|
|
// check if session stored, then check if this user is the correct, each time, then continue, else not
|
|
func (u *userAuth) Serve(ctx *iris.Context) {
|
|
if ctx.PathString() == "/login" || strings.HasPrefix(ctx.PathString(), "/public") {
|
|
ctx.Next()
|
|
return
|
|
}
|
|
session := panelSessions.Start(ctx)
|
|
|
|
if sessionVal := session.Get("username"); sessionVal != nil {
|
|
username := sessionVal.(string)
|
|
password := session.GetString("password")
|
|
if username != "" && password != "" {
|
|
|
|
for _, authenticatedUser := range u.authenticatedUsers {
|
|
if authenticatedUser.username == username && authenticatedUser.password == password {
|
|
ctx.Next()
|
|
|
|
return
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
//if not logged in the redirect to the /login
|
|
ctx.Redirect("/login")
|
|
|
|
}
|
|
|
|
// Destroy this is called on PreClose by the iriscontrol.go
|
|
func (u *userAuth) Destroy() {
|
|
|
|
}
|