✨ Realm operations now available in authkit
This commit is contained in:
@ -1,6 +1,10 @@
|
||||
package models
|
||||
|
||||
import "gorm.io/datatypes"
|
||||
import (
|
||||
"git.solsynth.dev/hypernet/nexus/pkg/nex"
|
||||
"git.solsynth.dev/hypernet/passport/pkg/proto"
|
||||
"gorm.io/datatypes"
|
||||
)
|
||||
|
||||
type Realm struct {
|
||||
BaseModel
|
||||
@ -17,6 +21,22 @@ type Realm struct {
|
||||
AccountID uint `json:"account_id"`
|
||||
}
|
||||
|
||||
func NewRealmFromProto(proto *proto.RealmInfo) Realm {
|
||||
return Realm{
|
||||
BaseModel: BaseModel{
|
||||
ID: uint(proto.GetId()),
|
||||
},
|
||||
Alias: proto.GetAlias(),
|
||||
Name: proto.GetName(),
|
||||
Description: proto.GetDescription(),
|
||||
Avatar: &proto.Avatar,
|
||||
Banner: &proto.Banner,
|
||||
IsPublic: proto.GetIsPublic(),
|
||||
IsCommunity: proto.GetIsCommunity(),
|
||||
AccessPolicy: nex.DecodeMap(proto.GetAccessPolicy()),
|
||||
}
|
||||
}
|
||||
|
||||
type RealmMember struct {
|
||||
BaseModel
|
||||
|
||||
@ -26,3 +46,14 @@ type RealmMember struct {
|
||||
Account Account `json:"account"`
|
||||
PowerLevel int `json:"power_level"`
|
||||
}
|
||||
|
||||
func NewRealmMemberFromProto(proto *proto.RealmMemberInfo) RealmMember {
|
||||
return RealmMember{
|
||||
BaseModel: BaseModel{
|
||||
ID: uint(proto.GetId()),
|
||||
},
|
||||
RealmID: uint(proto.GetRealmId()),
|
||||
AccountID: uint(proto.GetUserId()),
|
||||
PowerLevel: int(proto.GetPowerLevel()),
|
||||
}
|
||||
}
|
||||
|
108
pkg/authkit/realm.go
Normal file
108
pkg/authkit/realm.go
Normal file
@ -0,0 +1,108 @@
|
||||
package authkit
|
||||
|
||||
import (
|
||||
"git.solsynth.dev/hypernet/nexus/pkg/nex"
|
||||
"git.solsynth.dev/hypernet/passport/pkg/authkit/models"
|
||||
"git.solsynth.dev/hypernet/passport/pkg/proto"
|
||||
"github.com/samber/lo"
|
||||
)
|
||||
|
||||
func GetRealm(nx *nex.Conn, id uint) (models.Realm, error) {
|
||||
var realm models.Realm
|
||||
conn, err := nx.GetClientGrpcConn(nex.ServiceTypeAuth)
|
||||
if err != nil {
|
||||
return realm, err
|
||||
}
|
||||
resp, err := proto.NewRealmServiceClient(conn).GetRealm(nil, &proto.LookupRealmRequest{
|
||||
Id: lo.ToPtr(uint64(id)),
|
||||
})
|
||||
if err != nil {
|
||||
return realm, err
|
||||
}
|
||||
return models.NewRealmFromProto(resp), nil
|
||||
}
|
||||
|
||||
func GetRealmByAlias(nx *nex.Conn, alias string) (models.Realm, error) {
|
||||
var realm models.Realm
|
||||
conn, err := nx.GetClientGrpcConn(nex.ServiceTypeAuth)
|
||||
if err != nil {
|
||||
return realm, err
|
||||
}
|
||||
resp, err := proto.NewRealmServiceClient(conn).GetRealm(nil, &proto.LookupRealmRequest{
|
||||
Alias: &alias,
|
||||
})
|
||||
if err != nil {
|
||||
return realm, err
|
||||
}
|
||||
return models.NewRealmFromProto(resp), nil
|
||||
}
|
||||
|
||||
func ListRealm(nx *nex.Conn, id []uint) ([]models.Realm, error) {
|
||||
var realms []models.Realm
|
||||
conn, err := nx.GetClientGrpcConn(nex.ServiceTypeAuth)
|
||||
if err != nil {
|
||||
return realms, err
|
||||
}
|
||||
resp, err := proto.NewRealmServiceClient(conn).ListRealm(nil, &proto.ListRealmRequest{
|
||||
Id: lo.Map(id, func(item uint, _ int) uint64 {
|
||||
return uint64(item)
|
||||
}),
|
||||
})
|
||||
if err != nil {
|
||||
return realms, err
|
||||
}
|
||||
for _, realm := range resp.GetData() {
|
||||
realms = append(realms, models.NewRealmFromProto(realm))
|
||||
}
|
||||
return realms, nil
|
||||
}
|
||||
|
||||
func GetRealmMember(nx *nex.Conn, realmID, userID uint) (models.RealmMember, error) {
|
||||
var member models.RealmMember
|
||||
conn, err := nx.GetClientGrpcConn(nex.ServiceTypeAuth)
|
||||
if err != nil {
|
||||
return member, err
|
||||
}
|
||||
resp, err := proto.NewRealmServiceClient(conn).GetRealmMember(nil, &proto.RealmMemberLookupRequest{
|
||||
RealmId: lo.ToPtr(uint64(realmID)),
|
||||
UserId: lo.ToPtr(uint64(userID)),
|
||||
})
|
||||
if err != nil {
|
||||
return member, err
|
||||
}
|
||||
return models.NewRealmMemberFromProto(resp), nil
|
||||
}
|
||||
|
||||
func ListRealmMember(nx *nex.Conn, realmID uint) ([]models.RealmMember, error) {
|
||||
var members []models.RealmMember
|
||||
conn, err := nx.GetClientGrpcConn(nex.ServiceTypeAuth)
|
||||
if err != nil {
|
||||
return members, err
|
||||
}
|
||||
resp, err := proto.NewRealmServiceClient(conn).ListRealmMember(nil, &proto.RealmMemberLookupRequest{
|
||||
RealmId: lo.ToPtr(uint64(realmID)),
|
||||
})
|
||||
if err != nil {
|
||||
return members, err
|
||||
}
|
||||
for _, member := range resp.GetData() {
|
||||
members = append(members, models.NewRealmMemberFromProto(member))
|
||||
}
|
||||
return members, nil
|
||||
}
|
||||
|
||||
func CheckRealmMemberPerm(nx *nex.Conn, realmID uint, userID, power int) bool {
|
||||
conn, err := nx.GetClientGrpcConn(nex.ServiceTypeAuth)
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
resp, err := proto.NewRealmServiceClient(conn).CheckRealmMemberPerm(nil, &proto.CheckRealmPermRequest{
|
||||
RealmId: uint64(realmID),
|
||||
UserId: uint64(userID),
|
||||
PowerLevel: int32(power),
|
||||
})
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
return resp.GetIsSuccess()
|
||||
}
|
Reference in New Issue
Block a user