articles-api/controller.plugin/token/main.go

61 lines
1.3 KiB
Go

package main
import (
"crypto/sha512"
"encoding/hex"
"git.xdrm.io/example/aicra/db"
"git.xdrm.io/go/aicra/driver"
e "git.xdrm.io/go/aicra/err"
"git.xdrm.io/go/aicra/response"
i "git.xdrm.io/go/aicra/response"
"strconv"
"time"
)
func main() {}
type TokenController int
func Export() driver.Controller { return new(TokenController) }
// Builds an access token from credentials
func (tctl TokenController) Post(d i.Arguments) i.Response {
r := response.New()
/* (1) Init redis connection */
cli := db.Connect()
if cli == nil {
r.Err = e.Failure
return *r
}
/* (2) Extract api input */
role, ok := d["role"].(string)
if !ok {
r.Err = e.InvalidParam
r.Err.Put("url")
return *r
}
/* (3) Generate token */
hasher := sha512.New()
defer hasher.Reset()
hasher.Write([]byte(strconv.FormatInt(time.Now().Unix(), 5)))
token := hex.EncodeToString(hasher.Sum(nil))
/* (4) Store */
if !cli.Set(db.TOKEN, token, role, time.Minute) {
r.Err = e.Failure
return *r
}
r.Set("token", token)
r.Err = e.Success
return *r
}
func (tctl TokenController) Get(d i.Arguments) i.Response { return *i.New() }
func (tctl TokenController) Put(d i.Arguments) i.Response { return *i.New() }
func (tctl TokenController) Delete(d i.Arguments) i.Response { return *i.New() }