mirror of
https://github.com/notherealmarco/WASAPhoto.git
synced 2025-05-05 12:22:35 +02:00
Improve comments and code readability
This commit is contained in:
parent
f6ad6db2f7
commit
3de158e5a5
19 changed files with 84 additions and 43 deletions
|
@ -7,9 +7,11 @@ import (
|
|||
"github.com/notherealmarco/WASAPhoto/service/database"
|
||||
)
|
||||
|
||||
// AnonymousAuth is the authentication provider for non logged-in users
|
||||
type AnonymousAuth struct {
|
||||
}
|
||||
|
||||
// Returns a newly created AnonymousAuth instance
|
||||
func BuildAnonymous() *AnonymousAuth {
|
||||
return &AnonymousAuth{}
|
||||
}
|
||||
|
@ -18,14 +20,17 @@ func (u *AnonymousAuth) GetType() string {
|
|||
return "Anonymous"
|
||||
}
|
||||
|
||||
// Returns UNAUTHORIZED, as anonymous users are logged in
|
||||
func (u *AnonymousAuth) Authorized(db database.AppDatabase) (reqcontext.AuthStatus, error) {
|
||||
return reqcontext.UNAUTHORIZED, nil
|
||||
}
|
||||
|
||||
// Returns UNAUTHORIZED, as anonymous users are not logged in
|
||||
func (u *AnonymousAuth) UserAuthorized(db database.AppDatabase, uid string) (reqcontext.AuthStatus, error) {
|
||||
return reqcontext.UNAUTHORIZED, nil
|
||||
}
|
||||
|
||||
// Returns an empty string, as anonymous users have no user ID
|
||||
func (u *AnonymousAuth) GetUserID() string {
|
||||
return ""
|
||||
}
|
||||
|
|
|
@ -8,6 +8,8 @@ import (
|
|||
"github.com/notherealmarco/WASAPhoto/service/database"
|
||||
)
|
||||
|
||||
// BearerAuth is the authentication provider that authorizes users by Bearer tokens
|
||||
// In this case, a token is the unique identifier for a user.
|
||||
type BearerAuth struct {
|
||||
token string
|
||||
}
|
||||
|
@ -16,6 +18,8 @@ func (b *BearerAuth) GetType() string {
|
|||
return "Bearer"
|
||||
}
|
||||
|
||||
// Given the content of the Authorization header, returns a BearerAuth instance for the user
|
||||
// Returns an error if the header is not valid
|
||||
func BuildBearer(header string) (*BearerAuth, error) {
|
||||
if header == "" {
|
||||
return nil, errors.New("missing authorization header")
|
||||
|
@ -29,10 +33,12 @@ func BuildBearer(header string) (*BearerAuth, error) {
|
|||
return &BearerAuth{token: header[7:]}, nil
|
||||
}
|
||||
|
||||
// Returns the user ID of the user that is currently logged in
|
||||
func (b *BearerAuth) GetUserID() string {
|
||||
return b.token
|
||||
}
|
||||
|
||||
// Checks if the token is valid
|
||||
func (b *BearerAuth) Authorized(db database.AppDatabase) (reqcontext.AuthStatus, error) {
|
||||
// this is the way we manage authorization, the bearer token is the user id
|
||||
state, err := db.UserExists(b.token)
|
||||
|
@ -47,6 +53,7 @@ func (b *BearerAuth) Authorized(db database.AppDatabase) (reqcontext.AuthStatus,
|
|||
return reqcontext.UNAUTHORIZED, nil
|
||||
}
|
||||
|
||||
// Checks if the given user and the currently logged in user are the same user
|
||||
func (b *BearerAuth) UserAuthorized(db database.AppDatabase, uid string) (reqcontext.AuthStatus, error) {
|
||||
|
||||
// If uid is not a valid user, return USER_NOT_FOUND
|
||||
|
@ -60,6 +67,7 @@ func (b *BearerAuth) UserAuthorized(db database.AppDatabase, uid string) (reqcon
|
|||
}
|
||||
|
||||
if b.token == uid {
|
||||
// If the user is the same as the one in the token, check if the user does actually exist in the database
|
||||
auth, err := b.Authorized(db)
|
||||
|
||||
if err != nil {
|
||||
|
@ -68,5 +76,6 @@ func (b *BearerAuth) UserAuthorized(db database.AppDatabase, uid string) (reqcon
|
|||
|
||||
return auth, nil
|
||||
}
|
||||
// If the user is not the same as the one in the token, return FORBIDDEN
|
||||
return reqcontext.FORBIDDEN, nil
|
||||
}
|
||||
|
|
|
@ -10,6 +10,7 @@ import (
|
|||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
// BuildAuth returns an Authorization implementation for the currently logged in user
|
||||
func BuildAuth(header string) (reqcontext.Authorization, error) {
|
||||
auth, err := BuildBearer(header)
|
||||
if err != nil {
|
||||
|
@ -21,6 +22,8 @@ func BuildAuth(header string) (reqcontext.Authorization, error) {
|
|||
return auth, nil
|
||||
}
|
||||
|
||||
// Given a user authorization function, if the function returns some error, it sends the error to the client and return false
|
||||
// Otherwise it returns true without sending anything to the client
|
||||
func SendAuthorizationError(f func(db database.AppDatabase, uid string) (reqcontext.AuthStatus, error), uid string, db database.AppDatabase, w http.ResponseWriter, l logrus.FieldLogger, notFoundStatus int) bool {
|
||||
auth, err := f(db, uid)
|
||||
if err != nil {
|
||||
|
@ -28,21 +31,25 @@ func SendAuthorizationError(f func(db database.AppDatabase, uid string) (reqcont
|
|||
return false
|
||||
}
|
||||
if auth == reqcontext.UNAUTHORIZED {
|
||||
// The token is not valid
|
||||
helpers.SendStatus(http.StatusUnauthorized, w, "Unauthorized", l)
|
||||
return false
|
||||
}
|
||||
if auth == reqcontext.FORBIDDEN {
|
||||
// The user is not authorized for this action
|
||||
helpers.SendStatus(http.StatusForbidden, w, "Forbidden", l)
|
||||
return false
|
||||
}
|
||||
// requested user is not found -> 404 as the resource is not found
|
||||
if auth == reqcontext.USER_NOT_FOUND {
|
||||
// Attempting to perform an action on a non-existent user
|
||||
helpers.SendStatus(notFoundStatus, w, "User not found", l)
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
// Given a function that validates a token, if the function returns some error, it sends the error to the client and return false
|
||||
// Otherwise it returns true without sending anything to the client
|
||||
func SendErrorIfNotLoggedIn(f func(db database.AppDatabase) (reqcontext.AuthStatus, error), db database.AppDatabase, w http.ResponseWriter, l logrus.FieldLogger) bool {
|
||||
|
||||
auth, err := f(db)
|
||||
|
@ -53,6 +60,7 @@ func SendErrorIfNotLoggedIn(f func(db database.AppDatabase) (reqcontext.AuthStat
|
|||
}
|
||||
|
||||
if auth == reqcontext.UNAUTHORIZED {
|
||||
// The token is not valid
|
||||
helpers.SendStatus(http.StatusUnauthorized, w, "Unauthorized", l)
|
||||
return false
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue