mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
feat(cloudid): add azure saml
This commit is contained in:
@@ -557,6 +557,9 @@ func (self *SCloudaccount) GetCloudusers() ([]SClouduser, error) {
|
||||
}
|
||||
|
||||
func (self *SCloudaccount) SyncCloudusers(ctx context.Context, userCred mcclient.TokenCredential, iUsers []cloudprovider.IClouduser) ([]SClouduser, []cloudprovider.IClouduser, compare.SyncResult) {
|
||||
lockman.LockRawObject(ctx, "cloudusers", self.Id)
|
||||
defer lockman.ReleaseRawObject(ctx, "cloudusers", self.Id)
|
||||
|
||||
result := compare.SyncResult{}
|
||||
dbUsers, err := self.GetCloudusers()
|
||||
if err != nil {
|
||||
@@ -1147,7 +1150,10 @@ func (self *SCloudaccount) StartSAMLProviderCreateTask(ctx context.Context, user
|
||||
}
|
||||
return nil
|
||||
}
|
||||
return sp.StartSAMLProviderCreateTask(ctx, userCred, "")
|
||||
if sp != nil {
|
||||
return sp.StartSAMLProviderCreateTask(ctx, userCred, "")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (manager *SCloudaccountManager) SyncSAMLProviders(ctx context.Context, userCred mcclient.TokenCredential, isStart bool) {
|
||||
@@ -1805,3 +1811,39 @@ func (self *SCloudaccount) GetUserCloudgroups(userId string) ([]string, error) {
|
||||
}
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func (self *SCloudaccount) InviteAzureUser(ctx context.Context, userCred mcclient.TokenCredential, domain string) (string, error) {
|
||||
samlUsers, err := self.GetSamlusers()
|
||||
if err != nil {
|
||||
return "", errors.Wrapf(err, "GetSamlusers")
|
||||
}
|
||||
for i := range samlUsers {
|
||||
if samlUsers[i].OwnerId == userCred.GetUserId() {
|
||||
if len(samlUsers[i].Email) == 0 {
|
||||
_, err := db.Update(&samlUsers[i], func() error {
|
||||
samlUsers[i].Email = fmt.Sprintf("%s@%s", userCred.GetUserName(), domain)
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
return "", errors.Wrapf(err, "db.Update")
|
||||
}
|
||||
}
|
||||
provider, err := self.GetProvider()
|
||||
if err != nil {
|
||||
return "", errors.Wrapf(err, "self.GetProvider")
|
||||
}
|
||||
conf := cloudprovider.SClouduserCreateConfig{
|
||||
Name: userCred.GetUserName(),
|
||||
Email: samlUsers[i].Email,
|
||||
UserType: "Guest",
|
||||
}
|
||||
iUser, err := provider.CreateIClouduser(&conf)
|
||||
if err != nil {
|
||||
return "", errors.Wrapf(err, "CreateIClouduser")
|
||||
}
|
||||
db.SetExternalId(&samlUsers[i], userCred, iUser.GetName())
|
||||
return iUser.GetInviteUrl(), nil
|
||||
}
|
||||
}
|
||||
return "", fmt.Errorf("not found any saml user for %s", userCred.GetUserName())
|
||||
}
|
||||
|
||||
@@ -38,7 +38,7 @@ type SCloudgroupResourceBase struct {
|
||||
CloudgroupId string `width:"36" charset:"ascii" nullable:"false" list:"user" create:"required"`
|
||||
}
|
||||
|
||||
func (self *SCloudgroupJointsBase) GetCloudgroup() (*SCloudgroup, error) {
|
||||
func (self *SCloudgroupResourceBase) GetCloudgroup() (*SCloudgroup, error) {
|
||||
group, err := CloudgroupManager.FetchById(self.CloudgroupId)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "FetchById")
|
||||
|
||||
@@ -24,13 +24,17 @@ import (
|
||||
api "yunion.io/x/onecloud/pkg/apis/cloudid"
|
||||
"yunion.io/x/onecloud/pkg/cloudcommon/db"
|
||||
"yunion.io/x/onecloud/pkg/cloudcommon/validators"
|
||||
"yunion.io/x/onecloud/pkg/cloudid/options"
|
||||
"yunion.io/x/onecloud/pkg/httperrors"
|
||||
"yunion.io/x/onecloud/pkg/mcclient"
|
||||
"yunion.io/x/onecloud/pkg/mcclient/auth"
|
||||
"yunion.io/x/onecloud/pkg/util/stringutils2"
|
||||
)
|
||||
|
||||
type SSamluserManager struct {
|
||||
db.SStatusDomainLevelUserResourceBaseManager
|
||||
db.SExternalizedResourceBaseManager
|
||||
|
||||
SCloudgroupResourceBaseManager
|
||||
SCloudaccountResourceBaseManager
|
||||
}
|
||||
@@ -51,8 +55,12 @@ func init() {
|
||||
|
||||
type SSamluser struct {
|
||||
db.SStatusDomainLevelUserResourceBase
|
||||
db.SExternalizedResourceBase
|
||||
SCloudgroupResourceBase
|
||||
SCloudaccountResourceBase
|
||||
|
||||
// 邮箱地址
|
||||
Email string `width:"36" charset:"ascii" nullable:"true" list:"user" create:"domain_optional"`
|
||||
}
|
||||
|
||||
func (manager *SSamluserManager) GetResourceCount() ([]db.SScopeResourceCount, error) {
|
||||
@@ -173,3 +181,38 @@ func (manager *SSamluserManager) FetchCustomizeColumns(
|
||||
}
|
||||
return rows
|
||||
}
|
||||
|
||||
func (self *SSamluser) SyncAzureGroup() error {
|
||||
group, err := self.GetCloudgroup()
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "GetCloudgroup")
|
||||
}
|
||||
account, err := self.GetCloudaccount()
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "GetCloudaccount")
|
||||
}
|
||||
cache, err := CloudgroupcacheManager.Register(group, account)
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "group cache Register")
|
||||
}
|
||||
if len(cache.ExternalId) == 0 {
|
||||
s := auth.GetAdminSession(context.TODO(), options.Options.Region, "")
|
||||
_, err = cache.GetOrCreateICloudgroup(context.TODO(), s.GetToken())
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "GetOrCreateICloudgroup")
|
||||
}
|
||||
cache, err = CloudgroupcacheManager.Register(group, account)
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "group cache Register")
|
||||
}
|
||||
}
|
||||
iGroup, err := cache.GetICloudgroup()
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "GetICloudgroup")
|
||||
}
|
||||
err = iGroup.AddUser(self.ExternalId)
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "iGroup.AddUser")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user