[WIP] added mongo handlers for more dbhandler interfaces
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
package mongo
|
||||
package mongo_db_handlers
|
||||
|
||||
import (
|
||||
"context"
|
@@ -1,4 +1,4 @@
|
||||
module git.acooldomain.co/server-manager/backend-kubernetes-go/db_handler/mongo
|
||||
module git.acooldomain.co/server-manager/backend-kubernetes-go/db_handler/mongo_db_handlers
|
||||
|
||||
go 1.24.1
|
||||
|
||||
|
106
db_handler/mongo/user_pass_authentication_db_handler.go
Normal file
106
db_handler/mongo/user_pass_authentication_db_handler.go
Normal file
@@ -0,0 +1,106 @@
|
||||
package mongo_db_handlers
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
"git.acooldomain.co/server-manager/backend-kubernetes-go/dbhandler"
|
||||
"git.acooldomain.co/server-manager/backend-kubernetes-go/mail"
|
||||
"git.acooldomain.co/server-manager/backend-kubernetes-go/models"
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/mongo"
|
||||
"go.mongodb.org/mongo-driver/mongo/options"
|
||||
)
|
||||
|
||||
type AuthUser struct {
|
||||
Username string `json:"username"`
|
||||
HashedPassword string `json:"hashed_password"`
|
||||
Permissions models.Permission `json:"permissions"`
|
||||
}
|
||||
|
||||
type Invite struct {
|
||||
Email string `json:"email"`
|
||||
InvitingUser string `json:"inviting_user"`
|
||||
Token string `json:"token"`
|
||||
}
|
||||
|
||||
type MongoDbUserPassHandler struct {
|
||||
collection *mongo.Collection
|
||||
}
|
||||
|
||||
func (self *MongoDbUserPassHandler) AuthenticateUser(username string, password string) (models.Permission, error) {
|
||||
var user AuthUser
|
||||
err := self.collection.FindOne(context.Background(), bson.D{bson.E{Key: "username", Value: username}}).Decode(&user)
|
||||
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
hashedPassword, err := dbhandler.HashPassword(password)
|
||||
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
if user.HashedPassword != hashedPassword {
|
||||
return 0, fmt.Errorf("Incorrect Password")
|
||||
}
|
||||
|
||||
return user.Permissions, nil
|
||||
}
|
||||
|
||||
func (self *MongoDbUserPassHandler) CreateUser(
|
||||
username string,
|
||||
password string,
|
||||
permissions models.Permission,
|
||||
) error {
|
||||
hashedPassword, err := dbhandler.HashPassword(password)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
_, err = self.collection.InsertOne(context.Background(), &AuthUser{
|
||||
Username: username,
|
||||
HashedPassword: hashedPassword,
|
||||
Permissions: permissions,
|
||||
})
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
func (self *MongoDbUserPassHandler) RemoveUser(username string) error {
|
||||
_, err := self.collection.DeleteOne(
|
||||
context.Background(),
|
||||
bson.D{
|
||||
{Key: "username", Value: username},
|
||||
},
|
||||
)
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
func (self *MongoDbUserPassHandler) SetPermissions(
|
||||
username string,
|
||||
permissions models.Permission,
|
||||
) error {
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func NewMMongoDbUserPassAuthHandler(config models.MongoDBConfig) (*MongoDbUserPassHandler, error) {
|
||||
clientOptions := options.Client().ApplyURI(config.Url).SetAuth(options.Credential{
|
||||
Username: config.Username,
|
||||
Password: config.Password,
|
||||
})
|
||||
|
||||
client, err := mongo.Connect(context.TODO(), clientOptions)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &MongoDbUserPassHandler{
|
||||
collection: client.Database(config.Database).Collection(config.Collection),
|
||||
}, nil
|
||||
}
|
@@ -1,4 +1,4 @@
|
||||
package mongo
|
||||
package mongo_db_handlers
|
||||
|
||||
import (
|
||||
"context"
|
||||
@@ -11,13 +11,11 @@ import (
|
||||
)
|
||||
|
||||
type MongoDbUserHandler struct {
|
||||
con *mongo.Client
|
||||
collectionName string
|
||||
databaseName string
|
||||
collection *mongo.Collection
|
||||
}
|
||||
|
||||
func (self *MongoDbUserHandler) GetUser(username string) (*dbhandler.User, error) {
|
||||
users, err := self.con.Database(self.databaseName).Collection(self.collectionName).Find(context.TODO(), bson.D{bson.E{Key: "username", Value: username}})
|
||||
users, err := self.collection.Find(context.TODO(), bson.D{bson.E{Key: "username", Value: username}})
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -34,7 +32,7 @@ func (self *MongoDbUserHandler) GetUser(username string) (*dbhandler.User, error
|
||||
}
|
||||
|
||||
func (self *MongoDbUserHandler) ListUsers() ([]dbhandler.User, error) {
|
||||
users, err := self.con.Database(self.databaseName).Collection(self.collectionName).Find(context.TODO(), bson.D{})
|
||||
users, err := self.collection.Find(context.TODO(), bson.D{})
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -48,7 +46,7 @@ func (self *MongoDbUserHandler) ListUsers() ([]dbhandler.User, error) {
|
||||
|
||||
func (self *MongoDbUserHandler) CreateUser(user dbhandler.User) error {
|
||||
|
||||
_, err := self.con.Database(self.databaseName).Collection(self.collectionName).InsertOne(context.TODO(), &dbhandler.User{
|
||||
_, err := self.collection.InsertOne(context.TODO(), &dbhandler.User{
|
||||
Username: user.Username,
|
||||
Email: user.Email,
|
||||
Nickname: user.Nickname,
|
||||
@@ -74,8 +72,6 @@ func NewMMongoDbUsersHandler(config models.MongoDBConfig) (*MongoDbUserHandler,
|
||||
}
|
||||
|
||||
return &MongoDbUserHandler{
|
||||
con: client,
|
||||
databaseName: config.Database,
|
||||
collectionName: config.Collection,
|
||||
collection: client.Database(config.Database).Collection(config.Collection),
|
||||
}, nil
|
||||
}
|
@@ -1,28 +0,0 @@
|
||||
package mongo
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"git.acooldomain.co/server-manager/backend-kubernetes-go/models"
|
||||
"go.mongodb.org/mongo-driver/mongo"
|
||||
"go.mongodb.org/mongo-driver/mongo/options"
|
||||
)
|
||||
|
||||
func Connect(config *models.MongoDBConfig) (*mongo.Client, error) {
|
||||
serverAPI := options.ServerAPI(options.ServerAPIVersion1)
|
||||
opts := options.Client().ApplyURI(config.Url).SetServerAPIOptions(serverAPI)
|
||||
opts.SetAuth(
|
||||
options.Credential{
|
||||
Username: config.Username,
|
||||
Password: config.Password,
|
||||
},
|
||||
)
|
||||
|
||||
client, err := mongo.Connect(context.TODO(), opts)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return client, nil
|
||||
}
|
Reference in New Issue
Block a user