44"context"
55"encoding/json"
66"fmt"
7- "regexp"
87
98"github.com/golang-jwt/jwt/v4"
109"github.com/google/uuid"
@@ -15,7 +14,9 @@ import (
1514"github.com/coder/coder/v2/coderd/database/db2sdk"
1615"github.com/coder/coder/v2/coderd/database/dbauthz"
1716"github.com/coder/coder/v2/coderd/runtimeconfig"
17+ "github.com/coder/coder/v2/coderd/util/ptr"
1818"github.com/coder/coder/v2/coderd/util/slice"
19+ "github.com/coder/coder/v2/codersdk"
1920)
2021
2122type GroupParams struct {
@@ -28,6 +29,7 @@ func (AGPLIDPSync) GroupSyncEnabled() bool {
2829// AGPL does not support syncing groups.
2930return false
3031}
32+
3133func (s AGPLIDPSync )GroupSyncSettings () runtimeconfig.RuntimeEntry [* GroupSyncSettings ] {
3234return s .Group
3335}
@@ -93,12 +95,12 @@ func (s AGPLIDPSync) SyncGroups(ctx context.Context, db database.Store, user dat
9395
9496// Legacy deployment settings will override empty settings.
9597if orgID == defaultOrgID && settings .Field == "" {
96- settings = & GroupSyncSettings {
98+ settings = ptr . Ref ( GroupSyncSettings (codersdk. GroupSyncSettings {
9799Field :s .Legacy .GroupField ,
98100LegacyNameMapping :s .Legacy .GroupMapping ,
99101RegexFilter :s .Legacy .GroupFilter ,
100102AutoCreateMissing :s .Legacy .CreateMissingGroups ,
101- }
103+ }))
102104}
103105orgSettings [orgID ]= * settings
104106}
@@ -239,27 +241,7 @@ func (s AGPLIDPSync) ApplyGroupDifference(ctx context.Context, tx database.Store
239241return nil
240242}
241243
242- type GroupSyncSettings struct {
243- // Field selects the claim field to be used as the created user's
244- // groups. If the group field is the empty string, then no group updates
245- // will ever come from the OIDC provider.
246- Field string `json:"field"`
247- // Mapping maps from an OIDC group --> Coder group ID
248- Mapping map [string ][]uuid.UUID `json:"mapping"`
249- // RegexFilter is a regular expression that filters the groups returned by
250- // the OIDC provider. Any group not matched by this regex will be ignored.
251- // If the group filter is nil, then no group filtering will occur.
252- RegexFilter * regexp.Regexp `json:"regex_filter"`
253- // AutoCreateMissing controls whether groups returned by the OIDC provider
254- // are automatically created in Coder if they are missing.
255- AutoCreateMissing bool `json:"auto_create_missing_groups"`
256- // LegacyNameMapping is deprecated. It remaps an IDP group name to
257- // a Coder group name. Since configuration is now done at runtime,
258- // group IDs are used to account for group renames.
259- // For legacy configurations, this config option has to remain.
260- // Deprecated: Use Mapping instead.
261- LegacyNameMapping map [string ]string `json:"legacy_group_name_mapping,omitempty"`
262- }
244+ type GroupSyncSettings codersdk.GroupSyncSettings
263245
264246func (s * GroupSyncSettings )Set (v string )error {
265247return json .Unmarshal ([]byte (v ),s )