Skip to content

Commit 41ff886

Browse files
committed
Merge remote-tracking branch 'github/main' into asher/oauth-provider
2 parents 3e69495 + e6e65fd commit 41ff886

File tree

83 files changed

+1444
-353
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

83 files changed

+1444
-353
lines changed

.github/fly-wsproxies/paris-coder.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ app = "paris-coder"
22
primary_region = "cdg"
33

44
[experimental]
5-
entrypoint = ["/bin/sh", "-c", "CODER_DERP_SERVER_RELAY_URL=\"http://${FLY_PRIVATE_IP}:3000\" /opt/coder wsproxy server"]
5+
entrypoint = ["/bin/sh", "-c", "CODER_DERP_SERVER_RELAY_URL=\"http://[${FLY_PRIVATE_IP}]:3000\" /opt/coder wsproxy server"]
66
auto_rollback = true
77

88
[build]

.github/fly-wsproxies/sao-paulo-coder.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ app = "sao-paulo-coder"
22
primary_region = "gru"
33

44
[experimental]
5-
entrypoint = ["/bin/sh", "-c", "CODER_DERP_SERVER_RELAY_URL=\"http://${FLY_PRIVATE_IP}:3000\" /opt/coder wsproxy server"]
5+
entrypoint = ["/bin/sh", "-c", "CODER_DERP_SERVER_RELAY_URL=\"http://[${FLY_PRIVATE_IP}]:3000\" /opt/coder wsproxy server"]
66
auto_rollback = true
77

88
[build]

.github/fly-wsproxies/sydney-coder.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ app = "sydney-coder"
22
primary_region = "syd"
33

44
[experimental]
5-
entrypoint = ["/bin/sh", "-c", "CODER_DERP_SERVER_RELAY_URL=\"http://${FLY_PRIVATE_IP}:3000\" /opt/coder wsproxy server"]
5+
entrypoint = ["/bin/sh", "-c", "CODER_DERP_SERVER_RELAY_URL=\"http://[${FLY_PRIVATE_IP}]:3000\" /opt/coder wsproxy server"]
66
auto_rollback = true
77

88
[build]

cli/server.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -788,6 +788,22 @@ func (r *RootCmd) Server(newAPI func(context.Context, *coderd.Options) (*coderd.
788788
Prometheus: vals.Prometheus.Enable.Value(),
789789
STUN: len(vals.DERP.Server.STUNAddresses) != 0,
790790
Tunnel: tunnel != nil,
791+
ParseLicenseJWT: func(lic *telemetry.License) error {
792+
// This will be nil when running in AGPL-only mode.
793+
if options.ParseLicenseClaims == nil {
794+
return nil
795+
}
796+
797+
email, trial, err := options.ParseLicenseClaims(lic.JWT)
798+
if err != nil {
799+
return err
800+
}
801+
if email != "" {
802+
lic.Email = &email
803+
}
804+
lic.Trial = &trial
805+
return nil
806+
},
791807
})
792808
if err != nil {
793809
return xerrors.Errorf("create telemetry reporter: %w", err)

cli/testdata/coder_users_list_--output_json.golden

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@
1616
}
1717
],
1818
"avatar_url": "",
19-
"login_type": "password"
19+
"login_type": "password",
20+
"theme_preference": ""
2021
},
2122
{
2223
"id": "[second user ID]",
@@ -30,6 +31,7 @@
3031
],
3132
"roles": [],
3233
"avatar_url": "",
33-
"login_type": "password"
34+
"login_type": "password",
35+
"theme_preference": ""
3436
}
3537
]

coderd/apidoc/docs.go

Lines changed: 63 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/apidoc/swagger.json

Lines changed: 55 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/autobuild/lifecycle_executor_test.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -283,8 +283,8 @@ func TestExecutorAutostartUserSuspended(t *testing.T) {
283283

284284
admin := coderdtest.CreateFirstUser(t, client)
285285
version := coderdtest.CreateTemplateVersion(t, client, admin.OrganizationID, nil)
286-
template := coderdtest.CreateTemplate(t, client, admin.OrganizationID, version.ID)
287286
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
287+
template := coderdtest.CreateTemplate(t, client, admin.OrganizationID, version.ID)
288288
userClient, user := coderdtest.CreateAnotherUser(t, client, admin.OrganizationID)
289289
workspace := coderdtest.CreateWorkspace(t, userClient, admin.OrganizationID, template.ID, func(cwr *codersdk.CreateWorkspaceRequest) {
290290
cwr.AutostartSchedule = ptr.Ref(sched.String())
@@ -863,14 +863,15 @@ func TestExecutorRequireActiveVersion(t *testing.T) {
863863
// template version and assert that the field is not abided
864864
// since there is no enterprise license.
865865
activeVersion := coderdtest.CreateTemplateVersion(t, ownerClient, owner.OrganizationID, nil)
866+
coderdtest.AwaitTemplateVersionJobCompleted(t, ownerClient, activeVersion.ID)
866867
template := coderdtest.CreateTemplate(t, ownerClient, owner.OrganizationID, activeVersion.ID, func(ctr *codersdk.CreateTemplateRequest) {
867868
ctr.RequireActiveVersion = true
868869
ctr.VersionID = activeVersion.ID
869870
})
870871
inactiveVersion := coderdtest.CreateTemplateVersion(t, ownerClient, owner.OrganizationID, nil, func(ctvr *codersdk.CreateTemplateVersionRequest) {
871872
ctvr.TemplateID = template.ID
872873
})
873-
coderdtest.AwaitTemplateVersionJobCompleted(t, ownerClient, activeVersion.ID)
874+
coderdtest.AwaitTemplateVersionJobCompleted(t, ownerClient, inactiveVersion.ID)
874875
memberClient, _ := coderdtest.CreateAnotherUser(t, ownerClient, owner.OrganizationID)
875876
ws := coderdtest.CreateWorkspace(t, memberClient, owner.OrganizationID, uuid.Nil, func(cwr *codersdk.CreateWorkspaceRequest) {
876877
cwr.TemplateVersionID = inactiveVersion.ID
@@ -993,8 +994,8 @@ func mustProvisionWorkspace(t *testing.T, client *codersdk.Client, mut ...func(*
993994
t.Helper()
994995
user := coderdtest.CreateFirstUser(t, client)
995996
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil)
996-
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
997997
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
998+
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
998999
ws := coderdtest.CreateWorkspace(t, client, user.OrganizationID, template.ID, mut...)
9991000
coderdtest.AwaitWorkspaceBuildJobCompleted(t, client, ws.LatestBuild.ID)
10001001
return coderdtest.MustWorkspace(t, client, ws.ID)
@@ -1016,8 +1017,8 @@ func mustProvisionWorkspaceWithParameters(t *testing.T, client *codersdk.Client,
10161017
},
10171018
ProvisionApply: echo.ApplyComplete,
10181019
})
1019-
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
10201020
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
1021+
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
10211022
ws := coderdtest.CreateWorkspace(t, client, user.OrganizationID, template.ID, mut...)
10221023
coderdtest.AwaitWorkspaceBuildJobCompleted(t, client, ws.LatestBuild.ID)
10231024
return coderdtest.MustWorkspace(t, client, ws.ID)

coderd/coderd.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,11 @@ type Options struct {
174174
StatsBatcher *batchstats.Batcher
175175

176176
WorkspaceAppsStatsCollectorOptions workspaceapps.StatsCollectorOptions
177+
178+
// This janky function is used in telemetry to parse fields out of the raw
179+
// JWT. It needs to be passed through like this because license parsing is
180+
// under the enterprise license, and can't be imported into AGPL.
181+
ParseLicenseClaims func(rawJWT string) (email string, trial bool, err error)
177182
}
178183

179184
// @title Coder API
@@ -800,6 +805,7 @@ func New(options *Options) *API {
800805
r.Put("/suspend", api.putSuspendUserAccount())
801806
r.Put("/activate", api.putActivateUserAccount())
802807
})
808+
r.Put("/appearance", api.putUserAppearanceSettings)
803809
r.Route("/password", func(r chi.Router) {
804810
r.Put("/", api.putUserPassword)
805811
})

coderd/database/db2sdk/db2sdk.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ func User(user database.User, organizationIDs []uuid.UUID) codersdk.User {
122122
Roles: make([]codersdk.Role, 0, len(user.RBACRoles)),
123123
AvatarURL: user.AvatarURL,
124124
LoginType: codersdk.LoginType(user.LoginType),
125+
ThemePreference: user.ThemePreference,
125126
}
126127

127128
for _, roleName := range user.RBACRoles {

coderd/database/dbauthz/dbauthz.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2769,6 +2769,17 @@ func (q *querier) UpdateTemplateWorkspacesLastUsedAt(ctx context.Context, arg da
27692769
return fetchAndExec(q.log, q.auth, rbac.ActionUpdate, fetch, q.db.UpdateTemplateWorkspacesLastUsedAt)(ctx, arg)
27702770
}
27712771

2772+
func (q *querier) UpdateUserAppearanceSettings(ctx context.Context, arg database.UpdateUserAppearanceSettingsParams) (database.User, error) {
2773+
u, err := q.db.GetUserByID(ctx, arg.ID)
2774+
if err != nil {
2775+
return database.User{}, err
2776+
}
2777+
if err := q.authorizeContext(ctx, rbac.ActionUpdate, u.UserDataRBACObject()); err != nil {
2778+
return database.User{}, err
2779+
}
2780+
return q.db.UpdateUserAppearanceSettings(ctx, arg)
2781+
}
2782+
27722783
// UpdateUserDeletedByID
27732784
// Deprecated: Delete this function in favor of 'SoftDeleteUserByID'. Deletes are
27742785
// irreversible.

coderd/database/dbauthz/dbauthz_test.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -962,6 +962,14 @@ func (s *MethodTestSuite) TestUser() {
962962
UpdatedAt: u.UpdatedAt,
963963
}).Asserts(u.UserDataRBACObject(), rbac.ActionUpdate).Returns(u)
964964
}))
965+
s.Run("UpdateUserAppearanceSettings", s.Subtest(func(db database.Store, check *expects) {
966+
u := dbgen.User(s.T(), db, database.User{})
967+
check.Args(database.UpdateUserAppearanceSettingsParams{
968+
ID: u.ID,
969+
ThemePreference: u.ThemePreference,
970+
UpdatedAt: u.UpdatedAt,
971+
}).Asserts(u.UserDataRBACObject(), rbac.ActionUpdate).Returns(u)
972+
}))
965973
s.Run("UpdateUserStatus", s.Subtest(func(db database.Store, check *expects) {
966974
u := dbgen.User(s.T(), db, database.User{})
967975
check.Args(database.UpdateUserStatusParams{

0 commit comments

Comments
 (0)