40 lines
662 B
Go
40 lines
662 B
Go
|
package context
|
||
|
|
||
|
import (
|
||
|
"strings"
|
||
|
|
||
|
"git.supernets.org/perp/gopay/internal/jwt"
|
||
|
)
|
||
|
|
||
|
// Get an account from token header
|
||
|
func (ctx *Context) GetAccount() {
|
||
|
// Get header
|
||
|
header := ctx.GetHeader("Authorization")
|
||
|
|
||
|
// Split value
|
||
|
split := strings.Split(header, " ")
|
||
|
|
||
|
// No bearer found
|
||
|
if len(split) != 2 {
|
||
|
ctx.Error(400, "MissingToken")
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// Decode token
|
||
|
token, err := jwt.Decode(split[1])
|
||
|
if err != nil {
|
||
|
ctx.Error(400, "InvalidToken")
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// Select account
|
||
|
account, err := ctx.Database.Account.SelectByID(token.ID)
|
||
|
if err != nil {
|
||
|
ctx.Error(500, "InternalServerError")
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// Set account
|
||
|
ctx.Account = account
|
||
|
}
|