mirror of
https://github.com/zitadel/zitadel.git
synced 2025-08-11 21:27:42 +00:00
feat(api): add google provider template (#5247)
add functionality to manage templates based Google IDP
This commit is contained in:
@@ -11,6 +11,7 @@ import (
|
||||
|
||||
"github.com/zitadel/zitadel/internal/api/authz"
|
||||
"github.com/zitadel/zitadel/internal/crypto"
|
||||
"github.com/zitadel/zitadel/internal/database"
|
||||
"github.com/zitadel/zitadel/internal/domain"
|
||||
"github.com/zitadel/zitadel/internal/errors"
|
||||
"github.com/zitadel/zitadel/internal/query/projection"
|
||||
@@ -32,6 +33,7 @@ type IDPTemplate struct {
|
||||
IsLinkingAllowed bool
|
||||
IsAutoCreation bool
|
||||
IsAutoUpdate bool
|
||||
*GoogleIDPTemplate
|
||||
*LDAPIDPTemplate
|
||||
}
|
||||
|
||||
@@ -40,6 +42,13 @@ type IDPTemplates struct {
|
||||
Templates []*IDPTemplate
|
||||
}
|
||||
|
||||
type GoogleIDPTemplate struct {
|
||||
IDPID string
|
||||
ClientID string
|
||||
ClientSecret *crypto.CryptoValue
|
||||
Scopes database.StringArray
|
||||
}
|
||||
|
||||
type LDAPIDPTemplate struct {
|
||||
IDPID string
|
||||
Host string
|
||||
@@ -51,7 +60,6 @@ type LDAPIDPTemplate struct {
|
||||
Admin string
|
||||
Password *crypto.CryptoValue
|
||||
idp.LDAPAttributes
|
||||
idp.Options
|
||||
}
|
||||
|
||||
var (
|
||||
@@ -121,6 +129,33 @@ var (
|
||||
}
|
||||
)
|
||||
|
||||
var (
|
||||
googleIdpTemplateTable = table{
|
||||
name: projection.IDPTemplateGoogleTable,
|
||||
instanceIDCol: projection.GoogleInstanceIDCol,
|
||||
}
|
||||
GoogleIDCol = Column{
|
||||
name: projection.GoogleIDCol,
|
||||
table: googleIdpTemplateTable,
|
||||
}
|
||||
GoogleInstanceIDCol = Column{
|
||||
name: projection.GoogleInstanceIDCol,
|
||||
table: googleIdpTemplateTable,
|
||||
}
|
||||
GoogleClientIDCol = Column{
|
||||
name: projection.GoogleClientIDCol,
|
||||
table: googleIdpTemplateTable,
|
||||
}
|
||||
GoogleClientSecretCol = Column{
|
||||
name: projection.GoogleClientSecretCol,
|
||||
table: googleIdpTemplateTable,
|
||||
}
|
||||
GoogleScopesCol = Column{
|
||||
name: projection.GoogleScopesCol,
|
||||
table: googleIdpTemplateTable,
|
||||
}
|
||||
)
|
||||
|
||||
var (
|
||||
ldapIdpTemplateTable = table{
|
||||
name: projection.IDPTemplateLDAPTable,
|
||||
@@ -335,6 +370,10 @@ func prepareIDPTemplateByIDQuery() (sq.SelectBuilder, func(*sql.Row) (*IDPTempla
|
||||
IDPTemplateIsLinkingAllowedCol.identifier(),
|
||||
IDPTemplateIsAutoCreationCol.identifier(),
|
||||
IDPTemplateIsAutoUpdateCol.identifier(),
|
||||
GoogleIDCol.identifier(),
|
||||
GoogleClientIDCol.identifier(),
|
||||
GoogleClientSecretCol.identifier(),
|
||||
GoogleScopesCol.identifier(),
|
||||
LDAPIDCol.identifier(),
|
||||
LDAPHostCol.identifier(),
|
||||
LDAPPortCol.identifier(),
|
||||
@@ -358,11 +397,19 @@ func prepareIDPTemplateByIDQuery() (sq.SelectBuilder, func(*sql.Row) (*IDPTempla
|
||||
LDAPAvatarURLAttributeCol.identifier(),
|
||||
LDAPProfileAttributeCol.identifier(),
|
||||
).From(idpTemplateTable.identifier()).
|
||||
LeftJoin(join(GoogleIDCol, IDPTemplateIDCol)).
|
||||
LeftJoin(join(LDAPIDCol, IDPTemplateIDCol)).
|
||||
PlaceholderFormat(sq.Dollar),
|
||||
func(row *sql.Row) (*IDPTemplate, error) {
|
||||
idpTemplate := new(IDPTemplate)
|
||||
|
||||
name := sql.NullString{}
|
||||
|
||||
googleID := sql.NullString{}
|
||||
googleClientID := sql.NullString{}
|
||||
googleClientSecret := new(crypto.CryptoValue)
|
||||
googleScopes := database.StringArray{}
|
||||
|
||||
ldapID := sql.NullString{}
|
||||
ldapHost := sql.NullString{}
|
||||
ldapPort := sql.NullString{}
|
||||
@@ -393,13 +440,17 @@ func prepareIDPTemplateByIDQuery() (sq.SelectBuilder, func(*sql.Row) (*IDPTempla
|
||||
&idpTemplate.ChangeDate,
|
||||
&idpTemplate.Sequence,
|
||||
&idpTemplate.State,
|
||||
&idpTemplate.Name,
|
||||
&name,
|
||||
&idpTemplate.Type,
|
||||
&idpTemplate.OwnerType,
|
||||
&idpTemplate.IsCreationAllowed,
|
||||
&idpTemplate.IsLinkingAllowed,
|
||||
&idpTemplate.IsAutoCreation,
|
||||
&idpTemplate.IsAutoUpdate,
|
||||
&googleID,
|
||||
&googleClientID,
|
||||
&googleClientSecret,
|
||||
&googleScopes,
|
||||
&ldapID,
|
||||
&ldapHost,
|
||||
&ldapPort,
|
||||
@@ -430,7 +481,16 @@ func prepareIDPTemplateByIDQuery() (sq.SelectBuilder, func(*sql.Row) (*IDPTempla
|
||||
return nil, errors.ThrowInternal(err, "QUERY-ADG42", "Errors.Internal")
|
||||
}
|
||||
|
||||
if ldapID.Valid {
|
||||
idpTemplate.Name = name.String
|
||||
|
||||
if googleID.Valid {
|
||||
idpTemplate.GoogleIDPTemplate = &GoogleIDPTemplate{
|
||||
IDPID: googleID.String,
|
||||
ClientID: googleClientID.String,
|
||||
ClientSecret: googleClientSecret,
|
||||
Scopes: googleScopes,
|
||||
}
|
||||
} else if ldapID.Valid {
|
||||
idpTemplate.LDAPIDPTemplate = &LDAPIDPTemplate{
|
||||
IDPID: ldapID.String,
|
||||
Host: ldapHost.String,
|
||||
@@ -478,6 +538,10 @@ func prepareIDPTemplatesQuery() (sq.SelectBuilder, func(*sql.Rows) (*IDPTemplate
|
||||
IDPTemplateIsLinkingAllowedCol.identifier(),
|
||||
IDPTemplateIsAutoCreationCol.identifier(),
|
||||
IDPTemplateIsAutoUpdateCol.identifier(),
|
||||
GoogleIDCol.identifier(),
|
||||
GoogleClientIDCol.identifier(),
|
||||
GoogleClientSecretCol.identifier(),
|
||||
GoogleScopesCol.identifier(),
|
||||
LDAPIDCol.identifier(),
|
||||
LDAPHostCol.identifier(),
|
||||
LDAPPortCol.identifier(),
|
||||
@@ -502,6 +566,7 @@ func prepareIDPTemplatesQuery() (sq.SelectBuilder, func(*sql.Rows) (*IDPTemplate
|
||||
LDAPProfileAttributeCol.identifier(),
|
||||
countColumn.identifier(),
|
||||
).From(idpTemplateTable.identifier()).
|
||||
LeftJoin(join(GoogleIDCol, IDPTemplateIDCol)).
|
||||
LeftJoin(join(LDAPIDCol, IDPTemplateIDCol)).
|
||||
PlaceholderFormat(sq.Dollar),
|
||||
func(rows *sql.Rows) (*IDPTemplates, error) {
|
||||
@@ -510,6 +575,13 @@ func prepareIDPTemplatesQuery() (sq.SelectBuilder, func(*sql.Rows) (*IDPTemplate
|
||||
for rows.Next() {
|
||||
idpTemplate := new(IDPTemplate)
|
||||
|
||||
name := sql.NullString{}
|
||||
|
||||
googleID := sql.NullString{}
|
||||
googleClientID := sql.NullString{}
|
||||
googleClientSecret := new(crypto.CryptoValue)
|
||||
googleScopes := database.StringArray{}
|
||||
|
||||
ldapID := sql.NullString{}
|
||||
ldapHost := sql.NullString{}
|
||||
ldapPort := sql.NullString{}
|
||||
@@ -540,13 +612,17 @@ func prepareIDPTemplatesQuery() (sq.SelectBuilder, func(*sql.Rows) (*IDPTemplate
|
||||
&idpTemplate.ChangeDate,
|
||||
&idpTemplate.Sequence,
|
||||
&idpTemplate.State,
|
||||
&idpTemplate.Name,
|
||||
&name,
|
||||
&idpTemplate.Type,
|
||||
&idpTemplate.OwnerType,
|
||||
&idpTemplate.IsCreationAllowed,
|
||||
&idpTemplate.IsLinkingAllowed,
|
||||
&idpTemplate.IsAutoCreation,
|
||||
&idpTemplate.IsAutoUpdate,
|
||||
&googleID,
|
||||
&googleClientID,
|
||||
&googleClientSecret,
|
||||
&googleScopes,
|
||||
&ldapID,
|
||||
&ldapHost,
|
||||
&ldapPort,
|
||||
@@ -576,7 +652,16 @@ func prepareIDPTemplatesQuery() (sq.SelectBuilder, func(*sql.Rows) (*IDPTemplate
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if ldapID.Valid {
|
||||
idpTemplate.Name = name.String
|
||||
|
||||
if googleID.Valid {
|
||||
idpTemplate.GoogleIDPTemplate = &GoogleIDPTemplate{
|
||||
IDPID: googleID.String,
|
||||
ClientID: googleClientID.String,
|
||||
ClientSecret: googleClientSecret,
|
||||
Scopes: googleScopes,
|
||||
}
|
||||
} else if ldapID.Valid {
|
||||
idpTemplate.LDAPIDPTemplate = &LDAPIDPTemplate{
|
||||
IDPID: ldapID.String,
|
||||
Host: ldapHost.String,
|
||||
|
Reference in New Issue
Block a user