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.BindArgument("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() }