Skip to content

Commit 129269b

Browse files
committed
Merge branch 'main' of https://github.com/coder/coder into bq/refactor-avatar
2 parents 40615ed + 468ffd9 commit 129269b

File tree

29 files changed

+1031
-206
lines changed

29 files changed

+1031
-206
lines changed

.github/workflows/ci.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ jobs:
188188
189189
# Check for any typos
190190
- name: Check for typos
191-
uses: crate-ci/typos@2872c382bb9668d4baa5eade234dcbc0048ca2cf # v1.28.2
191+
uses: crate-ci/typos@d1c850b2b5d502763520c25fb4a6a1128ad99bd9 # v1.28.3
192192
with:
193193
config: .github/workflows/typos.toml
194194

.github/workflows/dogfood.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ jobs:
5050
uses: depot/setup-action@b0b1ea4f69e92ebf5dea3f8713a1b0c37b2126a5 # v1.6.0
5151

5252
- name: Set up Docker Buildx
53-
uses: docker/setup-buildx-action@c47758b77c9736f4b2ef4073d4d51994fabfe349 # v3.7.1
53+
uses: docker/setup-buildx-action@6524bf65af31da8d45b59e8c27de4bd072b392f5 # v3.8.0
5454

5555
- name: Login to DockerHub
5656
if: github.ref == 'refs/heads/main'

.github/workflows/scorecard.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,6 @@ jobs:
4747

4848
# Upload the results to GitHub's code scanning dashboard.
4949
- name: "Upload to code-scanning"
50-
uses: github/codeql-action/upload-sarif@aa578102511db1f4524ed59b8cc2bae4f6e88195 # v3.27.6
50+
uses: github/codeql-action/upload-sarif@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v3.27.9
5151
with:
5252
sarif_file: results.sarif

.github/workflows/security.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ jobs:
3838
uses: ./.github/actions/setup-go
3939

4040
- name: Initialize CodeQL
41-
uses: github/codeql-action/init@aa578102511db1f4524ed59b8cc2bae4f6e88195 # v3.27.6
41+
uses: github/codeql-action/init@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v3.27.9
4242
with:
4343
languages: go, javascript
4444

@@ -48,7 +48,7 @@ jobs:
4848
rm Makefile
4949
5050
- name: Perform CodeQL Analysis
51-
uses: github/codeql-action/analyze@aa578102511db1f4524ed59b8cc2bae4f6e88195 # v3.27.6
51+
uses: github/codeql-action/analyze@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v3.27.9
5252

5353
- name: Send Slack notification on failure
5454
if: ${{ failure() }}
@@ -144,7 +144,7 @@ jobs:
144144
severity: "CRITICAL,HIGH"
145145

146146
- name: Upload Trivy scan results to GitHub Security tab
147-
uses: github/codeql-action/upload-sarif@aa578102511db1f4524ed59b8cc2bae4f6e88195 # v3.27.6
147+
uses: github/codeql-action/upload-sarif@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v3.27.9
148148
with:
149149
sarif_file: trivy-results.sarif
150150
category: "Trivy"

cmd/coder/main.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import (
55
"os"
66
_ "time/tzdata"
77

8+
tea "github.com/charmbracelet/bubbletea"
9+
810
"github.com/coder/coder/v2/agent/agentexec"
911
"github.com/coder/coder/v2/cli"
1012
)
@@ -15,6 +17,9 @@ func main() {
1517
_, _ = fmt.Fprintln(os.Stderr, err)
1618
os.Exit(1)
1719
}
20+
// This preserves backwards compatibility with an init function that is causing grief for
21+
// web terminals using agent-exec + screen. See https://github.com/coder/coder/pull/15817
22+
tea.InitTerminal()
1823
var rootCmd cli.RootCmd
1924
rootCmd.RunWithSubcommands(rootCmd.AGPL())
2025
}

coderd/database/dbmem/dbmem.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5800,6 +5800,26 @@ func (q *FakeQuerier) GetUsers(_ context.Context, params database.GetUsersParams
58005800
users = usersFilteredByRole
58015801
}
58025802

5803+
if !params.CreatedBefore.IsZero() {
5804+
usersFilteredByCreatedAt := make([]database.User, 0, len(users))
5805+
for i, user := range users {
5806+
if user.CreatedAt.Before(params.CreatedBefore) {
5807+
usersFilteredByCreatedAt = append(usersFilteredByCreatedAt, users[i])
5808+
}
5809+
}
5810+
users = usersFilteredByCreatedAt
5811+
}
5812+
5813+
if !params.CreatedAfter.IsZero() {
5814+
usersFilteredByCreatedAt := make([]database.User, 0, len(users))
5815+
for i, user := range users {
5816+
if user.CreatedAt.After(params.CreatedAfter) {
5817+
usersFilteredByCreatedAt = append(usersFilteredByCreatedAt, users[i])
5818+
}
5819+
}
5820+
users = usersFilteredByCreatedAt
5821+
}
5822+
58035823
if !params.LastSeenBefore.IsZero() {
58045824
usersFilteredByLastSeen := make([]database.User, 0, len(users))
58055825
for i, user := range users {

coderd/database/modelqueries.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -391,6 +391,8 @@ func (q *sqlQuerier) GetAuthorizedUsers(ctx context.Context, arg GetUsersParams,
391391
pq.Array(arg.RbacRole),
392392
arg.LastSeenBefore,
393393
arg.LastSeenAfter,
394+
arg.CreatedBefore,
395+
arg.CreatedAfter,
394396
arg.OffsetOpt,
395397
arg.LimitOpt,
396398
)

coderd/database/queries.sql.go

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

coderd/database/queries/users.sql

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,17 @@ WHERE
199199
last_seen_at >= @last_seen_after
200200
ELSE true
201201
END
202+
-- Filter by created_at
203+
AND CASE
204+
WHEN @created_before :: timestamp with time zone != '0001-01-01 00:00:00Z' THEN
205+
created_at <= @created_before
206+
ELSE true
207+
END
208+
AND CASE
209+
WHEN @created_after :: timestamp with time zone != '0001-01-01 00:00:00Z' THEN
210+
created_at >= @created_after
211+
ELSE true
212+
END
202213
-- End of filters
203214

204215
-- Authorize Filter clause will be injected below in GetAuthorizedUsers

coderd/searchquery/search.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@ func Users(query string) (database.GetUsersParams, []codersdk.ValidationError) {
7070
RbacRole: parser.Strings(values, []string{}, "role"),
7171
LastSeenAfter: parser.Time3339Nano(values, time.Time{}, "last_seen_after"),
7272
LastSeenBefore: parser.Time3339Nano(values, time.Time{}, "last_seen_before"),
73+
CreatedAfter: parser.Time3339Nano(values, time.Time{}, "created_after"),
74+
CreatedBefore: parser.Time3339Nano(values, time.Time{}, "created_before"),
7375
}
7476
parser.ErrorExcessParams(values)
7577
return filter, parser.Errors

coderd/users.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,8 @@ func (api *API) GetUsers(rw http.ResponseWriter, r *http.Request) ([]database.Us
317317
RbacRole: params.RbacRole,
318318
LastSeenBefore: params.LastSeenBefore,
319319
LastSeenAfter: params.LastSeenAfter,
320+
CreatedAfter: params.CreatedAfter,
321+
CreatedBefore: params.CreatedBefore,
320322
OffsetOpt: int32(paginationParams.Offset),
321323
LimitOpt: int32(paginationParams.Limit),
322324
})

coderd/users_test.go

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,11 @@ import (
2626
"github.com/coder/coder/v2/coderd/audit"
2727
"github.com/coder/coder/v2/coderd/coderdtest"
2828
"github.com/coder/coder/v2/coderd/database"
29+
"github.com/coder/coder/v2/coderd/database/db2sdk"
2930
"github.com/coder/coder/v2/coderd/database/dbauthz"
3031
"github.com/coder/coder/v2/coderd/database/dbfake"
3132
"github.com/coder/coder/v2/coderd/database/dbgen"
33+
"github.com/coder/coder/v2/coderd/database/dbtestutil"
3234
"github.com/coder/coder/v2/coderd/database/dbtime"
3335
"github.com/coder/coder/v2/coderd/rbac"
3436
"github.com/coder/coder/v2/coderd/util/ptr"
@@ -1515,6 +1517,73 @@ func TestUsersFilter(t *testing.T) {
15151517
users = append(users, user)
15161518
}
15171519

1520+
// Add users with different creation dates for testing date filters
1521+
for i := 0; i < 3; i++ {
1522+
// nolint:gocritic // Using system context is necessary to seed data in tests
1523+
user1, err := api.Database.InsertUser(dbauthz.AsSystemRestricted(ctx), database.InsertUserParams{
1524+
ID: uuid.New(),
1525+
Email: fmt.Sprintf("before%d@coder.com", i),
1526+
Username: fmt.Sprintf("before%d", i),
1527+
LoginType: database.LoginTypeNone,
1528+
Status: string(codersdk.UserStatusActive),
1529+
RBACRoles: []string{codersdk.RoleMember},
1530+
CreatedAt: dbtime.Time(time.Date(2022, 12, 15+i, 12, 0, 0, 0, time.UTC)),
1531+
})
1532+
require.NoError(t, err)
1533+
1534+
// The expected timestamps must be parsed from strings to compare equal during `ElementsMatch`
1535+
sdkUser1 := db2sdk.User(user1, nil)
1536+
sdkUser1.CreatedAt, err = time.Parse(time.RFC3339, sdkUser1.CreatedAt.Format(time.RFC3339))
1537+
require.NoError(t, err)
1538+
sdkUser1.UpdatedAt, err = time.Parse(time.RFC3339, sdkUser1.UpdatedAt.Format(time.RFC3339))
1539+
require.NoError(t, err)
1540+
sdkUser1.LastSeenAt, err = time.Parse(time.RFC3339, sdkUser1.LastSeenAt.Format(time.RFC3339))
1541+
require.NoError(t, err)
1542+
users = append(users, sdkUser1)
1543+
1544+
// nolint:gocritic //Using system context is necessary to seed data in tests
1545+
user2, err := api.Database.InsertUser(dbauthz.AsSystemRestricted(ctx), database.InsertUserParams{
1546+
ID: uuid.New(),
1547+
Email: fmt.Sprintf("during%d@coder.com", i),
1548+
Username: fmt.Sprintf("during%d", i),
1549+
LoginType: database.LoginTypeNone,
1550+
Status: string(codersdk.UserStatusActive),
1551+
RBACRoles: []string{codersdk.RoleOwner},
1552+
CreatedAt: dbtime.Time(time.Date(2023, 1, 15+i, 12, 0, 0, 0, time.UTC)),
1553+
})
1554+
require.NoError(t, err)
1555+
1556+
sdkUser2 := db2sdk.User(user2, nil)
1557+
sdkUser2.CreatedAt, err = time.Parse(time.RFC3339, sdkUser2.CreatedAt.Format(time.RFC3339))
1558+
require.NoError(t, err)
1559+
sdkUser2.UpdatedAt, err = time.Parse(time.RFC3339, sdkUser2.UpdatedAt.Format(time.RFC3339))
1560+
require.NoError(t, err)
1561+
sdkUser2.LastSeenAt, err = time.Parse(time.RFC3339, sdkUser2.LastSeenAt.Format(time.RFC3339))
1562+
require.NoError(t, err)
1563+
users = append(users, sdkUser2)
1564+
1565+
// nolint:gocritic // Using system context is necessary to seed data in tests
1566+
user3, err := api.Database.InsertUser(dbauthz.AsSystemRestricted(ctx), database.InsertUserParams{
1567+
ID: uuid.New(),
1568+
Email: fmt.Sprintf("after%d@coder.com", i),
1569+
Username: fmt.Sprintf("after%d", i),
1570+
LoginType: database.LoginTypeNone,
1571+
Status: string(codersdk.UserStatusActive),
1572+
RBACRoles: []string{codersdk.RoleOwner},
1573+
CreatedAt: dbtime.Time(time.Date(2023, 2, 15+i, 12, 0, 0, 0, time.UTC)),
1574+
})
1575+
require.NoError(t, err)
1576+
1577+
sdkUser3 := db2sdk.User(user3, nil)
1578+
sdkUser3.CreatedAt, err = time.Parse(time.RFC3339, sdkUser3.CreatedAt.Format(time.RFC3339))
1579+
require.NoError(t, err)
1580+
sdkUser3.UpdatedAt, err = time.Parse(time.RFC3339, sdkUser3.UpdatedAt.Format(time.RFC3339))
1581+
require.NoError(t, err)
1582+
sdkUser3.LastSeenAt, err = time.Parse(time.RFC3339, sdkUser3.LastSeenAt.Format(time.RFC3339))
1583+
require.NoError(t, err)
1584+
users = append(users, sdkUser3)
1585+
}
1586+
15181587
// --- Setup done ---
15191588
testCases := []struct {
15201589
Name string
@@ -1657,6 +1726,37 @@ func TestUsersFilter(t *testing.T) {
16571726
return u.LastSeenAt.Before(end) && u.LastSeenAt.After(start)
16581727
},
16591728
},
1729+
{
1730+
Name: "CreatedAtBefore",
1731+
Filter: codersdk.UsersRequest{
1732+
SearchQuery: `created_before:"2023-01-31T23:59:59Z"`,
1733+
},
1734+
FilterF: func(_ codersdk.UsersRequest, u codersdk.User) bool {
1735+
end := time.Date(2023, 1, 31, 23, 59, 59, 0, time.UTC)
1736+
return u.CreatedAt.Before(end)
1737+
},
1738+
},
1739+
{
1740+
Name: "CreatedAtAfter",
1741+
Filter: codersdk.UsersRequest{
1742+
SearchQuery: `created_after:"2023-01-01T00:00:00Z"`,
1743+
},
1744+
FilterF: func(_ codersdk.UsersRequest, u codersdk.User) bool {
1745+
start := time.Date(2023, 1, 1, 0, 0, 0, 0, time.UTC)
1746+
return u.CreatedAt.After(start)
1747+
},
1748+
},
1749+
{
1750+
Name: "CreatedAtRange",
1751+
Filter: codersdk.UsersRequest{
1752+
SearchQuery: `created_after:"2023-01-01T00:00:00Z" created_before:"2023-01-31T23:59:59Z"`,
1753+
},
1754+
FilterF: func(_ codersdk.UsersRequest, u codersdk.User) bool {
1755+
start := time.Date(2023, 1, 1, 0, 0, 0, 0, time.UTC)
1756+
end := time.Date(2023, 1, 31, 23, 59, 59, 0, time.UTC)
1757+
return u.CreatedAt.After(start) && u.CreatedAt.Before(end)
1758+
},
1759+
},
16601760
}
16611761

16621762
for _, c := range testCases {
@@ -1677,6 +1777,16 @@ func TestUsersFilter(t *testing.T) {
16771777
exp = append(exp, made)
16781778
}
16791779
}
1780+
1781+
// TODO: This can be removed with dbmem
1782+
if !dbtestutil.WillUsePostgres() {
1783+
for i := range matched.Users {
1784+
if len(matched.Users[i].OrganizationIDs) == 0 {
1785+
matched.Users[i].OrganizationIDs = nil
1786+
}
1787+
}
1788+
}
1789+
16801790
require.ElementsMatch(t, exp, matched.Users, "expected users returned")
16811791
})
16821792
}

docs/admin/monitoring/index.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Monitoring Coder
22

3-
Learn about our the tools, techniques, and best practices to monitor Coder your
4-
Coder deployment.
3+
Learn about our the tools, techniques, and best practices to monitor your Coder
4+
deployment.
55

66
## Quick Start: Observability Helm Chart
77

docs/admin/security/database-encryption.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,3 +185,7 @@ To delete all encrypted data from your database, perform the following actions:
185185
- Decryption may fail if newly encrypted data is written while decryption is in
186186
progress. If this happens, ensure that all active coder instances are stopped,
187187
and retry.
188+
189+
## Next steps
190+
191+
- [Security - best practices](../../tutorials/best-practices/security-best-practices.md)

docs/admin/security/index.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,11 @@
1-
# Security Advisories
1+
# Security
2+
3+
<children></children>
4+
5+
For other security tips, visit our guide to
6+
[security best practices](../../tutorials/best-practices/security-best-practices.md).
7+
8+
## Security Advisories
29

310
> If you discover a vulnerability in Coder, please do not hesitate to report it
411
> to us by following the instructions

0 commit comments

Comments
 (0)