package accesstoken
import (
- "context"
"crypto/rand"
"encoding/json"
"fmt"
}
// Create generates a new access token with the given ID.
-func (cs *CredentialStore) Create(ctx context.Context, id, typ string) (*Token, error) {
+func (cs *CredentialStore) Create(id, typ string) (*Token, error) {
if !validIDRegexp.MatchString(id) {
return nil, errors.WithDetailf(ErrBadID, "invalid id %q", id)
}
}
// Check returns whether or not an id-secret pair is a valid access token.
-func (cs *CredentialStore) Check(ctx context.Context, id string, secret string) error {
+func (cs *CredentialStore) Check(id string, secret string) error {
if !validIDRegexp.MatchString(id) {
return errors.WithDetailf(ErrBadID, "invalid id %q", id)
}
}
// List lists all access tokens.
-func (cs *CredentialStore) List(ctx context.Context) ([]*Token, error) {
+func (cs *CredentialStore) List() ([]*Token, error) {
tokens := make([]*Token, 0)
iter := cs.DB.Iterator()
defer iter.Release()
}
// Delete deletes an access token by id.
-func (cs *CredentialStore) Delete(ctx context.Context, id string) error {
+func (cs *CredentialStore) Delete(id string) error {
if !validIDRegexp.MatchString(id) {
return errors.WithDetailf(ErrBadID, "invalid id %q", id)
}
testDB := dbm.NewDB("testdb", "leveldb", "temp")
defer os.RemoveAll("temp")
cs := NewStore(testDB)
- ctx := context.Background()
cases := []struct {
id, typ string
}
for _, c := range cases {
- _, err := cs.Create(ctx, c.id, c.typ)
+ _, err := cs.Create(c.id, c.typ)
if errors.Root(err) != c.want {
t.Errorf("Create(%s, %s) error = %s want %s", c.id, c.typ, err, c.want)
}
tokenMap["bc"] = mustCreateToken(ctx, t, cs, "bc", "test")
tokenMap["cd"] = mustCreateToken(ctx, t, cs, "cd", "test")
- got, err := cs.List(ctx)
+ got, err := cs.List()
if err != nil {
t.Errorf("List errored: get list error")
}
token := mustCreateToken(ctx, t, cs, "x", "client")
tokenParts := strings.Split(token.Token, ":")
- if err := cs.Check(ctx, tokenParts[0], tokenParts[1]); err != nil {
+ if err := cs.Check(tokenParts[0], tokenParts[1]); err != nil {
t.Fatal(err)
}
- if err := cs.Check(ctx, "x", "badsecret"); err != ErrInvalidToken {
+ if err := cs.Check("x", "badsecret"); err != ErrInvalidToken {
t.Fatal("invalid token check passed")
}
}
const id = "Y"
mustCreateToken(ctx, t, cs, id, "client")
- err := cs.Delete(ctx, id)
+ err := cs.Delete(id)
if err != nil {
t.Fatal(err)
}
}
func TestDeleteWithInvalidId(t *testing.T) {
- ctx := context.Background()
testDB := dbm.NewDB("testdb", "leveldb", "temp")
defer os.RemoveAll("temp")
cs := NewStore(testDB)
- err := cs.Delete(ctx, "@")
+ err := cs.Delete("@")
if errors.Root(err) != ErrBadID {
t.Errorf("Deletion with invalid id success, while it should not")
}
}
func mustCreateToken(ctx context.Context, t *testing.T, cs *CredentialStore, id, typ string) *Token {
- token, err := cs.Create(ctx, id, typ)
+ token, err := cs.Create(id, typ)
if err != nil {
t.Fatal(err)
}
ID string `json:"id"`
Type string `json:"type"`
}) Response {
- token, err := a.accessTokens.Create(ctx, x.ID, x.Type)
+ token, err := a.accessTokens.Create(x.ID, x.Type)
if err != nil {
return NewErrorResponse(err)
}
}
func (a *API) listAccessTokens(ctx context.Context) Response {
- tokens, err := a.accessTokens.List(ctx)
+ tokens, err := a.accessTokens.List()
if err != nil {
log.Errorf("listAccessTokens: %v", err)
return NewErrorResponse(err)
ID string `json:"id"`
}) Response {
//TODO Add delete permission verify.
- if err := a.accessTokens.Delete(ctx, x.ID); err != nil {
+ if err := a.accessTokens.Delete(x.ID); err != nil {
return NewErrorResponse(err)
}
return NewSuccessResponse(nil)
ID string `json:"id"`
Secret string `json:"secret"`
}) Response {
- if err := a.accessTokens.Check(ctx, x.ID, x.Secret); err != nil {
+ if err := a.accessTokens.Check(x.ID, x.Secret); err != nil {
return NewErrorResponse(err)
}
res, ok := a.tokenMap[user+pw]
a.tokenMu.Unlock()
if !ok || time.Now().After(res.lastLookup.Add(tokenExpiry)) {
- err := a.tokens.Check(ctx, user, pw)
+ err := a.tokens.Check(user, pw)
if err != nil {
return ErrInvalidToken
}
package authn
import (
- "context"
"net/http"
"os"
"strings"
)
func TestAuthenticate(t *testing.T) {
- ctx := context.Background()
-
tokenDB := dbm.NewDB("testdb", "leveldb", "temp")
defer os.RemoveAll("temp")
tokenStore := accesstoken.NewStore(tokenDB)
- token, err := tokenStore.Create(ctx, "alice", "test")
+ token, err := tokenStore.Create("alice", "test")
if err != nil {
t.Errorf("create token error")
}
package node
import (
+ "strings"
"context"
"errors"
"net/http"
)
const (
- webAddress = "http://127.0.0.1:9888"
+ webHost = "http://127.0.0.1"
maxNewBlockChSize = 1024
)
}
// Lanch web broser or not
-func launchWebBrowser() {
+func launchWebBrowser(port string) {
+ webAddress := webHost + ":" + port
log.Info("Launching System Browser with :", webAddress)
if err := browser.Open(webAddress); err != nil {
log.Error(err.Error())
}
n.initAndstartApiServer()
if !n.config.Web.Closed {
- launchWebBrowser()
+ s := strings.Split(n.config.ApiAddress, ":")
+ if len(s) != 2 {
+ log.Error("Invalid api address")
+ }
+ launchWebBrowser(s[1])
}
return nil
}