This commit is contained in:
2025-03-13 21:18:01 +02:00
parent 02adc8b545
commit fd957e32b9
28 changed files with 1064 additions and 457 deletions

19
db_handler/mongo/go.mod Normal file
View File

@@ -0,0 +1,19 @@
module git.acooldomain.co/server-manager/backend-kubernetes-go/db_handler/mongo
go 1.24.1
require go.mongodb.org/mongo-driver v1.14.0
require (
github.com/golang/snappy v0.0.1 // indirect
github.com/google/go-cmp v0.6.0 // indirect
github.com/klauspost/compress v1.13.6 // indirect
github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe // indirect
github.com/xdg-go/pbkdf2 v1.0.0 // indirect
github.com/xdg-go/scram v1.1.2 // indirect
github.com/xdg-go/stringprep v1.0.4 // indirect
github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect
golang.org/x/crypto v0.23.0 // indirect
golang.org/x/sync v0.1.0 // indirect
golang.org/x/text v0.15.0 // indirect
)

13
db_handler/mongo/go.sum Normal file
View File

@@ -0,0 +1,13 @@
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4=
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc=
github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe h1:iruDEfMl2E6fbMZ9s0scYfZQ84/6SPL6zC8ACM2oIL0=
github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c=
github.com/xdg-go/scram v1.1.2 h1:FHX5I5B4i4hKRVRBCFRxq1iQRej7WO3hhBuJf+UUySY=
github.com/xdg-go/stringprep v1.0.4 h1:XLI/Ng3O1Atzq0oBs3TWm+5ZVgkq2aqdlvP9JtoZ6c8=
github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d h1:splanxYIlg+5LfHAM6xpdFEAYOk8iySO56hMFq6uLyA=
go.mongodb.org/mongo-driver v1.14.0 h1:P98w8egYRjYe3XDjxhYJagTokP/H6HzlsnojRgZRd80=
golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI=
golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o=
golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk=

View File

@@ -0,0 +1,131 @@
package mongo
import (
"context"
"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 ServerPermissions struct {
Username string `json:"username"`
ServerId string `json:"server_id"`
Permissions models.Permission `json:"permissions"`
}
type MongoDbAuthorizationHandler struct {
collection *mongo.Collection
}
func (self *MongoDbAuthorizationHandler) RemoveUser(username string) error {
_, err := self.collection.DeleteMany(
context.Background(),
bson.D{
{Key: "username", Value: username},
},
)
return err
}
func (self *MongoDbAuthorizationHandler) RemoveServer(server_id string) error {
_, err := self.collection.DeleteMany(
context.Background(),
bson.D{
{Key: "server_id", Value: server_id},
},
)
return err
}
func (self *MongoDbAuthorizationHandler) AddPermissions(username string, serverId string, permissions models.Permission) error {
var serverPermissions ServerPermissions
err := self.collection.FindOne(
context.Background(),
bson.D{
{Key: "username", Value: username},
{Key: "server_id", Value: serverId},
},
).Decode(&serverPermissions)
if err != nil {
return err
}
newPermissions := serverPermissions.Permissions | permissions
_, err = self.collection.UpdateOne(
context.Background(),
bson.D{
{Key: "username", Value: username},
{Key: "server_id", Value: serverId},
},
&ServerPermissions{
Username: username,
ServerId: serverId,
Permissions: newPermissions,
},
)
return err
}
func (self *MongoDbAuthorizationHandler) RemovePermissions(username string, server_id string, permissions models.Permission) error {
var serverPermissions ServerPermissions
err := self.collection.FindOne(
context.Background(),
bson.D{
{Key: "username", Value: username},
{Key: "server_id", Value: serverId},
},
).Decode(&serverPermissions)
if err != nil {
return err
}
newPermissions := serverPermissions.Permissions | permissions
_, err = self.collection.UpdateOne(
context.Background(),
bson.D{
{Key: "username", Value: username},
{Key: "server_id", Value: serverId},
},
&ServerPermissions{
Username: username,
ServerId: serverId,
Permissions: newPermissions,
},
)
return err
}
func (self *MongoDbAuthorizationHandler) SetPermissions(username string, server_id string, permissions models.Permission) error {
return nil
}
func (self *MongoDbAuthorizationHandler) GetPermissions(username string, server_id string) (models.Permission, error) {
return 0, nil
}
func NewMongoDbAuthorizationHandler(config models.MongoDBConfig) (*MongoDbAuthorizationHandler, 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 &MongoDbAuthorizationHandler{
collection: client.Database(config.Database).Collection(config.Collection),
}, nil
}

View File

@@ -0,0 +1,81 @@
package mongo
import (
"context"
"git.acooldomain.co/server-manager/backend-kubernetes-go/dbhandler"
"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 MongoDbUserHandler struct {
con *mongo.Client
collectionName string
databaseName string
}
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}})
if err != nil {
return nil, err
}
var user dbhandler.User
err = users.Decode(&user)
if err != nil {
return nil, err
}
return &user, nil
}
func (self *MongoDbUserHandler) ListUsers() ([]dbhandler.User, error) {
users, err := self.con.Database(self.databaseName).Collection(self.collectionName).Find(context.TODO(), bson.D{})
if err != nil {
return nil, err
}
var response []dbhandler.User
users.All(nil, &response)
return response, nil
}
func (self *MongoDbUserHandler) CreateUser(user dbhandler.User) error {
_, err := self.con.Database(self.databaseName).Collection(self.collectionName).InsertOne(context.TODO(), &dbhandler.User{
Username: user.Username,
Email: user.Email,
Nickname: user.Nickname,
}, &options.InsertOneOptions{})
if err != nil {
return err
}
return nil
}
func NewMMongoDbUsersHandler(config models.MongoDBConfig) (*MongoDbUserHandler, 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 &MongoDbUserHandler{
con: client,
databaseName: config.Database,
collectionName: config.Collection,
}, nil
}

28
db_handler/mongo/utils.go Normal file
View File

@@ -0,0 +1,28 @@
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
}