mirror of
https://github.com/notherealmarco/WASAPhoto.git
synced 2025-03-13 13:35:23 +01:00
50 lines
1 KiB
Go
50 lines
1 KiB
Go
package authorization
|
|
|
|
import (
|
|
"errors"
|
|
"strings"
|
|
|
|
"github.com/notherealmarco/WASAPhoto/service/database"
|
|
)
|
|
|
|
type BearerAuth struct {
|
|
token string
|
|
}
|
|
|
|
func (b *BearerAuth) GetType() string {
|
|
return "Bearer"
|
|
}
|
|
|
|
func BuildBearer(header string) (*BearerAuth, error) {
|
|
if header == "" {
|
|
return nil, errors.New("missing authorization header")
|
|
}
|
|
if header == "Bearer" {
|
|
return nil, errors.New("missing token")
|
|
}
|
|
if !strings.HasPrefix(header, "Bearer ") {
|
|
return nil, errors.New("invalid authorization header")
|
|
}
|
|
return &BearerAuth{token: header[7:]}, nil
|
|
}
|
|
|
|
func (b *BearerAuth) GetToken() string {
|
|
return b.token
|
|
}
|
|
|
|
func (b *BearerAuth) Authorized(db database.AppDatabase) (bool, error) {
|
|
// this is the way we manage authorization, the bearer token is the user id
|
|
state, err := db.UserExists(b.token)
|
|
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
return state, nil
|
|
}
|
|
|
|
func (b *BearerAuth) UserAuthorized(db database.AppDatabase, uid string) (bool, error) {
|
|
if b.token == uid {
|
|
return b.Authorized(db)
|
|
}
|
|
return false, nil
|
|
}
|