backend/db_handler/mongo/authorization.go

157 lines
3.6 KiB
Go

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 ServerPermissions struct {
Username string `json:"username"`
ServerId string `json:"server_id"`
Permissions models.Permission `json:"permissions"`
}
type MongoDbAuthorizationHandler struct {
dbhandler.AuthorizationDbHandler
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(serverId string) error {
_, err := self.collection.DeleteMany(
context.Background(),
bson.D{
{Key: "server_id", Value: serverId},
},
)
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},
},
bson.M{"$set": bson.M{
"permissions": newPermissions,
},
},
)
return err
}
func (self *MongoDbAuthorizationHandler) RemovePermissions(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 ^ permissions
_, err = self.collection.UpdateOne(
context.Background(),
bson.D{
{Key: "username", Value: username},
{Key: "server_id", Value: serverId},
},
bson.M{"$set": bson.M{
"permissions": newPermissions,
},
},
)
return err
}
func (self *MongoDbAuthorizationHandler) SetPermissions(username string, serverId string, permissions models.Permission) error {
_, err := self.collection.UpdateOne(
context.Background(),
bson.D{
{Key: "username", Value: username},
{Key: "server_id", Value: serverId},
},
bson.M{"$set": bson.M{
"permissions": permissions,
},
},
)
return err
}
func (self *MongoDbAuthorizationHandler) GetPermissions(username string, serverId string) (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 0, err
}
return serverPermissions.Permissions, nil
}
func NewAuthorizationHandler(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
}