added more functionality

This commit is contained in:
2024-05-10 00:39:06 +03:00
parent 10c5367b9b
commit 5fc472832f
17 changed files with 413 additions and 37 deletions

View File

@@ -4,28 +4,17 @@ import (
"context"
"encoding/json"
"fmt"
"hash"
"net/http"
"time"
"acoolname.co/backend/user"
// "acoolname.co/backend/models"
"acooldomain.co/backend/models"
"github.com/gin-gonic/gin"
"github.com/golang-jwt/jwt"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
)
type Permission int
const (
Start Permission = 1 << iota
Stop
Browse
Create
Delete
RunCommand
Admin
"golang.org/x/crypto/bcrypt"
)
var hmacSampleSecret []byte
@@ -35,8 +24,8 @@ type Connection struct {
}
type TokenInfo struct {
Username string `json:"username"`
Permissions Permission `json:"permissions"`
Username string `json:"username"`
Permissions models.Permission `json:"permissions"`
}
type AuthClaims struct {
@@ -58,7 +47,12 @@ func signToken(token TokenInfo) (string, error) {
return t.SignedString(hmacSampleSecret)
}
func AuthorizedTo(requiredPermissions Permission) gin.HandlerFunc {
func hashPassword(password string) (string, error) {
bytes, err := bcrypt.GenerateFromPassword([]byte(password), 14)
return string(bytes), err
}
func AuthorizedTo(requiredPermissions models.Permission) gin.HandlerFunc {
return func(ctx *gin.Context) {
fmt.Println("Auth logic starts")
authCookie, err := ctx.Request.Cookie("auth")
@@ -126,13 +120,19 @@ func (con Connection) signIn(c *gin.Context) {
if err != nil {
c.AbortWithError(500, err)
}
var userItem user.User
var userItem models.User
err = con.connection.Database("Backend").Collection("Users").FindOne(context.TODO(), bson.D{{Key: "username", Value: request.username}}).Decode(&userItem)
if err != nil {
c.AbortWithError(403, err)
}
if userItem.hashedPass == hash.Hash64() {
if hashedPass, err := hashPassword(request.password); err != nil || userItem.HashedPass != hashedPass {
c.AbortWithStatus(403)
}
token := TokenInfo{
Username: userItem.Username,
Permissions: userItem.Permissions,
}
signedToken, err := signToken(token)
@@ -155,9 +155,10 @@ func (con Connection) test(c *gin.Context) {
func LoadGroup(group *gin.RouterGroup, client *mongo.Client) {
connection := Connection{connection: client}
group.POST("/signup", connection.signUp)
group.Use(AuthorizedTo(Admin))
group.POST("/signin", connection.signIn)
group.Use(AuthorizedTo(models.Admin))
{
group.POST("/signup", connection.signUp)
group.GET("/test", connection.test)
}
}

View File

@@ -1,3 +1,5 @@
module acooldomain.co/backend/auth
go 1.22.0
require golang.org/x/crypto v0.23.0 // indirect

2
auth/go.sum Normal file
View File

@@ -0,0 +1,2 @@
golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI=
golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=