Skip to content

Commit 743d308

Browse files
authored
feat: support multiple terminal fonts (#17257)
Fixes: #15024
1 parent 30f41cd commit 743d308

File tree

29 files changed

+813
-228
lines changed

29 files changed

+813
-228
lines changed

coderd/apidoc/docs.go

Lines changed: 20 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: 16 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/dbauthz/dbauthz.go

Lines changed: 44 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2721,17 +2721,6 @@ func (q *querier) GetUserActivityInsights(ctx context.Context, arg database.GetU
27212721
return q.db.GetUserActivityInsights(ctx, arg)
27222722
}
27232723

2724-
func (q *querier) GetUserAppearanceSettings(ctx context.Context, userID uuid.UUID) (string, error) {
2725-
u, err := q.db.GetUserByID(ctx, userID)
2726-
if err != nil {
2727-
return "", err
2728-
}
2729-
if err := q.authorizeContext(ctx, policy.ActionReadPersonal, u); err != nil {
2730-
return "", err
2731-
}
2732-
return q.db.GetUserAppearanceSettings(ctx, userID)
2733-
}
2734-
27352724
func (q *querier) GetUserByEmailOrUsername(ctx context.Context, arg database.GetUserByEmailOrUsernameParams) (database.User, error) {
27362725
return fetch(q.log, q.auth, q.db.GetUserByEmailOrUsername)(ctx, arg)
27372726
}
@@ -2804,6 +2793,28 @@ func (q *querier) GetUserStatusCounts(ctx context.Context, arg database.GetUserS
28042793
return q.db.GetUserStatusCounts(ctx, arg)
28052794
}
28062795

2796+
func (q *querier) GetUserTerminalFont(ctx context.Context, userID uuid.UUID) (string, error) {
2797+
u, err := q.db.GetUserByID(ctx, userID)
2798+
if err != nil {
2799+
return "", err
2800+
}
2801+
if err := q.authorizeContext(ctx, policy.ActionReadPersonal, u); err != nil {
2802+
return "", err
2803+
}
2804+
return q.db.GetUserTerminalFont(ctx, userID)
2805+
}
2806+
2807+
func (q *querier) GetUserThemePreference(ctx context.Context, userID uuid.UUID) (string, error) {
2808+
u, err := q.db.GetUserByID(ctx, userID)
2809+
if err != nil {
2810+
return "", err
2811+
}
2812+
if err := q.authorizeContext(ctx, policy.ActionReadPersonal, u); err != nil {
2813+
return "", err
2814+
}
2815+
return q.db.GetUserThemePreference(ctx, userID)
2816+
}
2817+
28072818
func (q *querier) GetUserWorkspaceBuildParameters(ctx context.Context, params database.GetUserWorkspaceBuildParametersParams) ([]database.GetUserWorkspaceBuildParametersRow, error) {
28082819
u, err := q.db.GetUserByID(ctx, params.OwnerID)
28092820
if err != nil {
@@ -4321,17 +4332,6 @@ func (q *querier) UpdateTemplateWorkspacesLastUsedAt(ctx context.Context, arg da
43214332
return fetchAndExec(q.log, q.auth, policy.ActionUpdate, fetch, q.db.UpdateTemplateWorkspacesLastUsedAt)(ctx, arg)
43224333
}
43234334

4324-
func (q *querier) UpdateUserAppearanceSettings(ctx context.Context, arg database.UpdateUserAppearanceSettingsParams) (database.UserConfig, error) {
4325-
u, err := q.db.GetUserByID(ctx, arg.UserID)
4326-
if err != nil {
4327-
return database.UserConfig{}, err
4328-
}
4329-
if err := q.authorizeContext(ctx, policy.ActionUpdatePersonal, u); err != nil {
4330-
return database.UserConfig{}, err
4331-
}
4332-
return q.db.UpdateUserAppearanceSettings(ctx, arg)
4333-
}
4334-
43354335
func (q *querier) UpdateUserDeletedByID(ctx context.Context, id uuid.UUID) error {
43364336
return deleteQ(q.log, q.auth, q.db.GetUserByID, q.db.UpdateUserDeletedByID)(ctx, id)
43374337
}
@@ -4469,6 +4469,28 @@ func (q *querier) UpdateUserStatus(ctx context.Context, arg database.UpdateUserS
44694469
return updateWithReturn(q.log, q.auth, fetch, q.db.UpdateUserStatus)(ctx, arg)
44704470
}
44714471

4472+
func (q *querier) UpdateUserTerminalFont(ctx context.Context, arg database.UpdateUserTerminalFontParams) (database.UserConfig, error) {
4473+
u, err := q.db.GetUserByID(ctx, arg.UserID)
4474+
if err != nil {
4475+
return database.UserConfig{}, err
4476+
}
4477+
if err := q.authorizeContext(ctx, policy.ActionUpdatePersonal, u); err != nil {
4478+
return database.UserConfig{}, err
4479+
}
4480+
return q.db.UpdateUserTerminalFont(ctx, arg)
4481+
}
4482+
4483+
func (q *querier) UpdateUserThemePreference(ctx context.Context, arg database.UpdateUserThemePreferenceParams) (database.UserConfig, error) {
4484+
u, err := q.db.GetUserByID(ctx, arg.UserID)
4485+
if err != nil {
4486+
return database.UserConfig{}, err
4487+
}
4488+
if err := q.authorizeContext(ctx, policy.ActionUpdatePersonal, u); err != nil {
4489+
return database.UserConfig{}, err
4490+
}
4491+
return q.db.UpdateUserThemePreference(ctx, arg)
4492+
}
4493+
44724494
func (q *querier) UpdateVolumeResourceMonitor(ctx context.Context, arg database.UpdateVolumeResourceMonitorParams) error {
44734495
if err := q.authorizeContext(ctx, policy.ActionUpdate, rbac.ResourceWorkspaceAgentResourceMonitor); err != nil {
44744496
return err

coderd/database/dbauthz/dbauthz_test.go

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1628,27 +1628,48 @@ func (s *MethodTestSuite) TestUser() {
16281628
[]database.GetUserWorkspaceBuildParametersRow{},
16291629
)
16301630
}))
1631-
s.Run("GetUserAppearanceSettings", s.Subtest(func(db database.Store, check *expects) {
1631+
s.Run("GetUserThemePreference", s.Subtest(func(db database.Store, check *expects) {
16321632
ctx := context.Background()
16331633
u := dbgen.User(s.T(), db, database.User{})
1634-
db.UpdateUserAppearanceSettings(ctx, database.UpdateUserAppearanceSettingsParams{
1634+
db.UpdateUserThemePreference(ctx, database.UpdateUserThemePreferenceParams{
16351635
UserID: u.ID,
16361636
ThemePreference: "light",
16371637
})
16381638
check.Args(u.ID).Asserts(u, policy.ActionReadPersonal).Returns("light")
16391639
}))
1640-
s.Run("UpdateUserAppearanceSettings", s.Subtest(func(db database.Store, check *expects) {
1640+
s.Run("UpdateUserThemePreference", s.Subtest(func(db database.Store, check *expects) {
16411641
u := dbgen.User(s.T(), db, database.User{})
16421642
uc := database.UserConfig{
16431643
UserID: u.ID,
16441644
Key: "theme_preference",
16451645
Value: "dark",
16461646
}
1647-
check.Args(database.UpdateUserAppearanceSettingsParams{
1647+
check.Args(database.UpdateUserThemePreferenceParams{
16481648
UserID: u.ID,
16491649
ThemePreference: uc.Value,
16501650
}).Asserts(u, policy.ActionUpdatePersonal).Returns(uc)
16511651
}))
1652+
s.Run("GetUserTerminalFont", s.Subtest(func(db database.Store, check *expects) {
1653+
ctx := context.Background()
1654+
u := dbgen.User(s.T(), db, database.User{})
1655+
db.UpdateUserTerminalFont(ctx, database.UpdateUserTerminalFontParams{
1656+
UserID: u.ID,
1657+
TerminalFont: "ibm-plex-mono",
1658+
})
1659+
check.Args(u.ID).Asserts(u, policy.ActionReadPersonal).Returns("ibm-plex-mono")
1660+
}))
1661+
s.Run("UpdateUserTerminalFont", s.Subtest(func(db database.Store, check *expects) {
1662+
u := dbgen.User(s.T(), db, database.User{})
1663+
uc := database.UserConfig{
1664+
UserID: u.ID,
1665+
Key: "terminal_font",
1666+
Value: "ibm-plex-mono",
1667+
}
1668+
check.Args(database.UpdateUserTerminalFontParams{
1669+
UserID: u.ID,
1670+
TerminalFont: uc.Value,
1671+
}).Asserts(u, policy.ActionUpdatePersonal).Returns(uc)
1672+
}))
16521673
s.Run("UpdateUserStatus", s.Subtest(func(db database.Store, check *expects) {
16531674
u := dbgen.User(s.T(), db, database.User{})
16541675
check.Args(database.UpdateUserStatusParams{

coderd/database/dbmem/dbmem.go

Lines changed: 82 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -6448,20 +6448,6 @@ func (q *FakeQuerier) GetUserActivityInsights(_ context.Context, arg database.Ge
64486448
return rows, nil
64496449
}
64506450

6451-
func (q *FakeQuerier) GetUserAppearanceSettings(_ context.Context, userID uuid.UUID) (string, error) {
6452-
q.mutex.RLock()
6453-
defer q.mutex.RUnlock()
6454-
6455-
for _, uc := range q.userConfigs {
6456-
if uc.UserID != userID || uc.Key != "theme_preference" {
6457-
continue
6458-
}
6459-
return uc.Value, nil
6460-
}
6461-
6462-
return "", sql.ErrNoRows
6463-
}
6464-
64656451
func (q *FakeQuerier) GetUserByEmailOrUsername(_ context.Context, arg database.GetUserByEmailOrUsernameParams) (database.User, error) {
64666452
if err := validateDatabaseType(arg); err != nil {
64676453
return database.User{}, err
@@ -6674,6 +6660,34 @@ func (q *FakeQuerier) GetUserStatusCounts(_ context.Context, arg database.GetUse
66746660
return result, nil
66756661
}
66766662

6663+
func (q *FakeQuerier) GetUserTerminalFont(ctx context.Context, userID uuid.UUID) (string, error) {
6664+
q.mutex.RLock()
6665+
defer q.mutex.RUnlock()
6666+
6667+
for _, uc := range q.userConfigs {
6668+
if uc.UserID != userID || uc.Key != "terminal_font" {
6669+
continue
6670+
}
6671+
return uc.Value, nil
6672+
}
6673+
6674+
return "", sql.ErrNoRows
6675+
}
6676+
6677+
func (q *FakeQuerier) GetUserThemePreference(_ context.Context, userID uuid.UUID) (string, error) {
6678+
q.mutex.RLock()
6679+
defer q.mutex.RUnlock()
6680+
6681+
for _, uc := range q.userConfigs {
6682+
if uc.UserID != userID || uc.Key != "theme_preference" {
6683+
continue
6684+
}
6685+
return uc.Value, nil
6686+
}
6687+
6688+
return "", sql.ErrNoRows
6689+
}
6690+
66776691
func (q *FakeQuerier) GetUserWorkspaceBuildParameters(_ context.Context, params database.GetUserWorkspaceBuildParametersParams) ([]database.GetUserWorkspaceBuildParametersRow, error) {
66786692
q.mutex.RLock()
66796693
defer q.mutex.RUnlock()
@@ -11015,33 +11029,6 @@ func (q *FakeQuerier) UpdateTemplateWorkspacesLastUsedAt(_ context.Context, arg
1101511029
return nil
1101611030
}
1101711031

11018-
func (q *FakeQuerier) UpdateUserAppearanceSettings(_ context.Context, arg database.UpdateUserAppearanceSettingsParams) (database.UserConfig, error) {
11019-
err := validateDatabaseType(arg)
11020-
if err != nil {
11021-
return database.UserConfig{}, err
11022-
}
11023-
11024-
q.mutex.Lock()
11025-
defer q.mutex.Unlock()
11026-
11027-
for i, uc := range q.userConfigs {
11028-
if uc.UserID != arg.UserID || uc.Key != "theme_preference" {
11029-
continue
11030-
}
11031-
uc.Value = arg.ThemePreference
11032-
q.userConfigs[i] = uc
11033-
return uc, nil
11034-
}
11035-
11036-
uc := database.UserConfig{
11037-
UserID: arg.UserID,
11038-
Key: "theme_preference",
11039-
Value: arg.ThemePreference,
11040-
}
11041-
q.userConfigs = append(q.userConfigs, uc)
11042-
return uc, nil
11043-
}
11044-
1104511032
func (q *FakeQuerier) UpdateUserDeletedByID(_ context.Context, id uuid.UUID) error {
1104611033
q.mutex.Lock()
1104711034
defer q.mutex.Unlock()
@@ -11367,6 +11354,60 @@ func (q *FakeQuerier) UpdateUserStatus(_ context.Context, arg database.UpdateUse
1136711354
return database.User{}, sql.ErrNoRows
1136811355
}
1136911356

11357+
func (q *FakeQuerier) UpdateUserTerminalFont(ctx context.Context, arg database.UpdateUserTerminalFontParams) (database.UserConfig, error) {
11358+
err := validateDatabaseType(arg)
11359+
if err != nil {
11360+
return database.UserConfig{}, err
11361+
}
11362+
11363+
q.mutex.Lock()
11364+
defer q.mutex.Unlock()
11365+
11366+
for i, uc := range q.userConfigs {
11367+
if uc.UserID != arg.UserID || uc.Key != "terminal_font" {
11368+
continue
11369+
}
11370+
uc.Value = arg.TerminalFont
11371+
q.userConfigs[i] = uc
11372+
return uc, nil
11373+
}
11374+
11375+
uc := database.UserConfig{
11376+
UserID: arg.UserID,
11377+
Key: "terminal_font",
11378+
Value: arg.TerminalFont,
11379+
}
11380+
q.userConfigs = append(q.userConfigs, uc)
11381+
return uc, nil
11382+
}
11383+
11384+
func (q *FakeQuerier) UpdateUserThemePreference(_ context.Context, arg database.UpdateUserThemePreferenceParams) (database.UserConfig, error) {
11385+
err := validateDatabaseType(arg)
11386+
if err != nil {
11387+
return database.UserConfig{}, err
11388+
}
11389+
11390+
q.mutex.Lock()
11391+
defer q.mutex.Unlock()
11392+
11393+
for i, uc := range q.userConfigs {
11394+
if uc.UserID != arg.UserID || uc.Key != "theme_preference" {
11395+
continue
11396+
}
11397+
uc.Value = arg.ThemePreference
11398+
q.userConfigs[i] = uc
11399+
return uc, nil
11400+
}
11401+
11402+
uc := database.UserConfig{
11403+
UserID: arg.UserID,
11404+
Key: "theme_preference",
11405+
Value: arg.ThemePreference,
11406+
}
11407+
q.userConfigs = append(q.userConfigs, uc)
11408+
return uc, nil
11409+
}
11410+
1137011411
func (q *FakeQuerier) UpdateVolumeResourceMonitor(_ context.Context, arg database.UpdateVolumeResourceMonitorParams) error {
1137111412
err := validateDatabaseType(arg)
1137211413
if err != nil {

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy