Просмотр исходного кода

switch access token to sql schema

abhishek9686 5 месяцев назад
Родитель
Сommit
0609f8df1a
8 измененных файлов с 45 добавлено и 21 удалено
  1. 3 3
      controllers/user.go
  2. 1 1
      database/database.go
  3. 2 5
      db/db.go
  4. 1 1
      logic/auth.go
  5. 15 1
      logic/jwts.go
  6. 7 0
      main.go
  7. 13 10
      models/accessToken.go
  8. 3 0
      schema/models.go

+ 3 - 3
controllers/user.go

@@ -57,7 +57,7 @@ func createUserAccessToken(w http.ResponseWriter, r *http.Request) {
 
 	// Auth request consists of Mac Address and Password (from node that is authorizing
 	// in case of Master, auth is ignored and mac is set to "mastermac"
-	var req models.AccessToken
+	var req models.UserAccessToken
 
 	err := json.NewDecoder(r.Body).Decode(&req)
 	if err != nil {
@@ -127,7 +127,7 @@ func getUserAccessTokens(w http.ResponseWriter, r *http.Request) {
 		logic.ReturnErrorResponse(w, r, logic.FormatError(errors.New("username is required"), "badrequest"))
 		return
 	}
-	logic.ReturnSuccessResponseWithJson(w, r, (&models.AccessToken{}).ListByUser(), "fetched api access tokens for user "+username)
+	logic.ReturnSuccessResponseWithJson(w, r, (&models.UserAccessToken{UserName: username}).ListByUser(), "fetched api access tokens for user "+username)
 }
 
 // @Summary     Authenticate a user to retrieve an authorization token
@@ -146,7 +146,7 @@ func deleteUserAccessTokens(w http.ResponseWriter, r *http.Request) {
 		return
 	}
 
-	err := (&models.AccessToken{ID: id}).Delete()
+	err := (&models.UserAccessToken{ID: id}).Delete()
 	if err != nil {
 		logic.ReturnErrorResponse(
 			w,

+ 1 - 1
database/database.go

@@ -125,7 +125,7 @@ var Tables = []string{
 	TAG_TABLE_NAME,
 	ACLS_TABLE_NAME,
 	PEER_ACK_TABLE,
-	ACCESS_TOKENS_TABLE_NAME,
+	// ACCESS_TOKENS_TABLE_NAME,
 }
 
 func getCurrentDB() map[string]interface{} {

+ 2 - 5
db/db.go

@@ -3,9 +3,10 @@ package db
 import (
 	"context"
 	"errors"
-	"gorm.io/gorm"
 	"net/http"
 	"time"
+
+	"gorm.io/gorm"
 )
 
 type ctxKey string
@@ -74,10 +75,6 @@ func Middleware(next http.Handler) http.Handler {
 //
 // The function panics, if a connection does not exist.
 func FromContext(ctx context.Context) *gorm.DB {
-	db, ok := ctx.Value(dbCtxKey).(*gorm.DB)
-	if !ok {
-		panic(ErrDBNotFound)
-	}
 
 	return db
 }

+ 1 - 1
logic/auth.go

@@ -360,7 +360,7 @@ func DeleteUser(user string) error {
 		return err
 	}
 	go RemoveUserFromAclPolicy(user)
-	return (&models.AccessToken{UserName: user}).DeleteAllUserTokens()
+	return (&models.UserAccessToken{UserName: user}).DeleteAllUserTokens()
 }
 
 func SetAuthSecret(secret string) error {

+ 15 - 1
logic/jwts.go

@@ -121,6 +121,20 @@ func GetUserNameFromToken(authtoken string) (username string, err error) {
 	if err != nil {
 		return "", Unauthorized_Err
 	}
+	if claims.TokenType == models.AccessTokenType {
+		jti := claims.ID
+		if jti != "" {
+			a := models.UserAccessToken{ID: jti}
+			// check if access token is active
+			err := a.Get()
+			if err != nil {
+				err = errors.New("token revoked")
+				return "", err
+			}
+			a.LastUsed = time.Now()
+			a.Update()
+		}
+	}
 
 	if token != nil && token.Valid {
 		var user *models.User
@@ -154,7 +168,7 @@ func VerifyUserToken(tokenString string) (username string, issuperadmin, isadmin
 	if claims.TokenType == models.AccessTokenType {
 		jti := claims.ID
 		if jti != "" {
-			a := models.AccessToken{ID: jti}
+			a := models.UserAccessToken{ID: jti}
 			// check if access token is active
 			err := a.Get()
 			if err != nil {

+ 7 - 0
main.go

@@ -18,6 +18,7 @@ import (
 	"github.com/gravitl/netmaker/config"
 	controller "github.com/gravitl/netmaker/controllers"
 	"github.com/gravitl/netmaker/database"
+	"github.com/gravitl/netmaker/db"
 	"github.com/gravitl/netmaker/functions"
 	"github.com/gravitl/netmaker/logger"
 	"github.com/gravitl/netmaker/logic"
@@ -25,6 +26,7 @@ import (
 	"github.com/gravitl/netmaker/models"
 	"github.com/gravitl/netmaker/mq"
 	"github.com/gravitl/netmaker/netclient/ncutils"
+	"github.com/gravitl/netmaker/schema"
 	"github.com/gravitl/netmaker/servercfg"
 	"github.com/gravitl/netmaker/serverctl"
 	_ "go.uber.org/automaxprocs"
@@ -103,6 +105,11 @@ func initialize() { // Client Mode Prereq Check
 	if err = database.InitializeDatabase(); err != nil {
 		logger.FatalLog("Error connecting to database: ", err.Error())
 	}
+	// initialize sql schema db.
+	err = db.InitializeDB(schema.ListModels()...)
+	if err != nil {
+		logger.FatalLog("Error connecting to v1 database: ", err.Error())
+	}
 	logger.Log(0, "database successfully connected")
 	initializeUUID()
 	//initialize cache

+ 13 - 10
models/accessToken.go

@@ -10,8 +10,8 @@ import (
 // accessTokenTableName - access tokens table
 const accessTokenTableName = "user_access_tokens"
 
-// AccessToken - token used to access netmaker
-type AccessToken struct {
+// UserAccessToken - token used to access netmaker
+type UserAccessToken struct {
 	ID        string    `gorm:"id,primary_key" json:"id"`
 	Name      string    `gorm:"name" json:"name"`
 	UserName  string    `gorm:"user_name" json:"user_name"`
@@ -21,37 +21,40 @@ type AccessToken struct {
 	CreatedAt time.Time `gorm:"created_at" json:"created_at"`
 }
 
-func (a *AccessToken) Table() string {
+func (a *UserAccessToken) Table() string {
 	return accessTokenTableName
 }
 
-func (a *AccessToken) Get() error {
+func (a *UserAccessToken) Get() error {
 	return db.FromContext(context.TODO()).Table(a.Table()).First(&a).Where("id = ?", a.ID).Error
 }
 
-func (a *AccessToken) Update() error {
+func (a *UserAccessToken) Update() error {
 	return db.FromContext(context.TODO()).Table(a.Table()).Where("id = ?", a.ID).Updates(&a).Error
 }
 
-func (a *AccessToken) Create() error {
+func (a *UserAccessToken) Create() error {
 	return db.FromContext(context.TODO()).Table(a.Table()).Create(&a).Error
 }
 
-func (a *AccessToken) List() (ats []AccessToken, err error) {
+func (a *UserAccessToken) List() (ats []UserAccessToken, err error) {
 	err = db.FromContext(context.TODO()).Table(a.Table()).Find(&ats).Error
 	return
 }
 
-func (a *AccessToken) ListByUser() (ats []AccessToken) {
+func (a *UserAccessToken) ListByUser() (ats []UserAccessToken) {
 	db.FromContext(context.TODO()).Table(a.Table()).Where("user_name = ?", a.UserName).Find(&ats)
+	if ats == nil {
+		ats = []UserAccessToken{}
+	}
 	return
 }
 
-func (a *AccessToken) Delete() error {
+func (a *UserAccessToken) Delete() error {
 	return db.FromContext(context.TODO()).Table(a.Table()).Where("id = ?", a.ID).Delete(&a).Error
 }
 
-func (a *AccessToken) DeleteAllUserTokens() error {
+func (a *UserAccessToken) DeleteAllUserTokens() error {
 	return db.FromContext(context.TODO()).Table(a.Table()).Where("user_name = ?", a.UserName).Delete(&a).Error
 
 }

+ 3 - 0
schema/models.go

@@ -1,8 +1,11 @@
 package schema
 
+import "github.com/gravitl/netmaker/models"
+
 // ListModels lists all the models in this schema.
 func ListModels() []interface{} {
 	return []interface{}{
 		&Job{},
+		&models.UserAccessToken{},
 	}
 }