mirror of https://github.com/gophish/gophish
Implemented auth.GetUser(id)
Impemented RequireLogin() middleware Login is now working, just need to clean up the architecture a bitpull/24/head
parent
bb627396ee
commit
61ef18b3b4
15
auth/auth.go
15
auth/auth.go
|
@ -51,9 +51,16 @@ func CheckLogin(r *http.Request) (bool, error) {
|
||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetUser(r *http.Request) models.User {
|
func GetUser(id int) (models.User, error) {
|
||||||
if rv := ctx.Get(r, "user"); rv != nil {
|
u := models.User{}
|
||||||
return rv.(models.User)
|
stmt, err := db.Conn.Prepare("SELECT * FROM Users WHERE id=?")
|
||||||
|
if err != nil {
|
||||||
|
return u, err
|
||||||
}
|
}
|
||||||
return models.User{}
|
err = stmt.QueryRow(id).Scan(&u.Id, &u.Username, &u.Hash, &u.APIKey)
|
||||||
|
if err != nil {
|
||||||
|
//Return false, but don't return an error
|
||||||
|
return u, err
|
||||||
|
}
|
||||||
|
return u, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,7 @@ THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"html/template"
|
"html/template"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
|
@ -34,13 +35,14 @@ import (
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"github.com/gorilla/sessions"
|
"github.com/gorilla/sessions"
|
||||||
"github.com/jordan-wright/gophish/auth"
|
"github.com/jordan-wright/gophish/auth"
|
||||||
|
"github.com/jordan-wright/gophish/middleware"
|
||||||
"github.com/jordan-wright/gophish/models"
|
"github.com/jordan-wright/gophish/models"
|
||||||
)
|
)
|
||||||
|
|
||||||
func CreateRouter() http.Handler {
|
func CreateRouter() http.Handler {
|
||||||
router := mux.NewRouter()
|
router := mux.NewRouter()
|
||||||
// Base Front-end routes
|
// Base Front-end routes
|
||||||
router.HandleFunc("/", Base)
|
router.Handle("/", middleware.Use(http.HandlerFunc(Base), middleware.RequireLogin))
|
||||||
router.HandleFunc("/login", Login)
|
router.HandleFunc("/login", Login)
|
||||||
router.HandleFunc("/register", Register)
|
router.HandleFunc("/register", Register)
|
||||||
router.HandleFunc("/campaigns", Base_Campaigns)
|
router.HandleFunc("/campaigns", Base_Campaigns)
|
||||||
|
@ -67,6 +69,13 @@ func Register(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
func Base(w http.ResponseWriter, r *http.Request) {
|
func Base(w http.ResponseWriter, r *http.Request) {
|
||||||
// Example of using session - will be removed.
|
// Example of using session - will be removed.
|
||||||
|
params := struct {
|
||||||
|
User models.User
|
||||||
|
Title string
|
||||||
|
Flashes []interface{}
|
||||||
|
}{}
|
||||||
|
params.User = ctx.Get(r, "user").(models.User)
|
||||||
|
fmt.Println(params.User.Username)
|
||||||
getTemplate(w, "dashboard").ExecuteTemplate(w, "base", nil)
|
getTemplate(w, "dashboard").ExecuteTemplate(w, "base", nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
package middleware
|
package middleware
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
ctx "github.com/gorilla/context"
|
ctx "github.com/gorilla/context"
|
||||||
|
@ -25,10 +24,20 @@ func GetContext(handler http.Handler) http.Handler {
|
||||||
// Set the context appropriately here.
|
// Set the context appropriately here.
|
||||||
// Set the session
|
// Set the session
|
||||||
session, _ := auth.Store.Get(r, "gophish")
|
session, _ := auth.Store.Get(r, "gophish")
|
||||||
|
// Put the session in the context so that
|
||||||
ctx.Set(r, "session", session)
|
ctx.Set(r, "session", session)
|
||||||
|
if id, ok := session.Values["id"]; ok {
|
||||||
|
u, err := auth.GetUser(id.(int))
|
||||||
|
if err != nil {
|
||||||
|
ctx.Set(r, "user", nil)
|
||||||
|
}
|
||||||
|
ctx.Set(r, "user", u)
|
||||||
|
} else {
|
||||||
|
ctx.Set(r, "user", nil)
|
||||||
|
}
|
||||||
handler.ServeHTTP(w, r)
|
handler.ServeHTTP(w, r)
|
||||||
// Save the session
|
// Save the session
|
||||||
session.Save()
|
session.Save(r, w)
|
||||||
// Remove context contents
|
// Remove context contents
|
||||||
ctx.Clear(r)
|
ctx.Clear(r)
|
||||||
})
|
})
|
||||||
|
@ -38,7 +47,10 @@ func GetContext(handler http.Handler) http.Handler {
|
||||||
// If not, the function returns a 302 redirect to the login page.
|
// If not, the function returns a 302 redirect to the login page.
|
||||||
func RequireLogin(handler http.Handler) http.Handler {
|
func RequireLogin(handler http.Handler) http.Handler {
|
||||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
fmt.Println("RequireLogin called!!")
|
if u := ctx.Get(r, "user"); u != nil {
|
||||||
handler.ServeHTTP(w, r)
|
handler.ServeHTTP(w, r)
|
||||||
|
} else {
|
||||||
|
http.Redirect(w, r, "/login", 302)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue