mirror of
https://github.com/coder/coder.git
synced 2025-07-09 11:45:56 +00:00
fix: show user-auth provisioners for all organizations (#16350)
This commit is contained in:
@ -95,7 +95,7 @@ func TestProvisioners_Golden(t *testing.T) {
|
|||||||
Name: "provisioner-1",
|
Name: "provisioner-1",
|
||||||
CreatedAt: dbtime.Now().Add(1 * time.Second),
|
CreatedAt: dbtime.Now().Add(1 * time.Second),
|
||||||
LastSeenAt: sql.NullTime{Time: coderdAPI.Clock.Now().Add(time.Hour), Valid: true}, // Stale interval can't be adjusted, keep online.
|
LastSeenAt: sql.NullTime{Time: coderdAPI.Clock.Now().Add(time.Hour), Valid: true}, // Stale interval can't be adjusted, keep online.
|
||||||
KeyID: uuid.MustParse(codersdk.ProvisionerKeyIDBuiltIn),
|
KeyID: codersdk.ProvisionerKeyUUIDBuiltIn,
|
||||||
Tags: database.StringMap{"owner": "", "scope": "organization", "foo": "bar"},
|
Tags: database.StringMap{"owner": "", "scope": "organization", "foo": "bar"},
|
||||||
})
|
})
|
||||||
w1 := dbgen.Workspace(t, coderdAPI.Database, database.WorkspaceTable{
|
w1 := dbgen.Workspace(t, coderdAPI.Database, database.WorkspaceTable{
|
||||||
@ -122,7 +122,7 @@ func TestProvisioners_Golden(t *testing.T) {
|
|||||||
Name: "provisioner-2",
|
Name: "provisioner-2",
|
||||||
CreatedAt: dbtime.Now().Add(2 * time.Second),
|
CreatedAt: dbtime.Now().Add(2 * time.Second),
|
||||||
LastSeenAt: sql.NullTime{Time: coderdAPI.Clock.Now().Add(-time.Hour), Valid: true},
|
LastSeenAt: sql.NullTime{Time: coderdAPI.Clock.Now().Add(-time.Hour), Valid: true},
|
||||||
KeyID: uuid.MustParse(codersdk.ProvisionerKeyIDBuiltIn),
|
KeyID: codersdk.ProvisionerKeyUUIDBuiltIn,
|
||||||
Tags: database.StringMap{"owner": "", "scope": "organization"},
|
Tags: database.StringMap{"owner": "", "scope": "organization"},
|
||||||
})
|
})
|
||||||
w2 := dbgen.Workspace(t, coderdAPI.Database, database.WorkspaceTable{
|
w2 := dbgen.Workspace(t, coderdAPI.Database, database.WorkspaceTable{
|
||||||
@ -168,7 +168,7 @@ func TestProvisioners_Golden(t *testing.T) {
|
|||||||
Name: "provisioner-3",
|
Name: "provisioner-3",
|
||||||
CreatedAt: dbtime.Now().Add(3 * time.Second),
|
CreatedAt: dbtime.Now().Add(3 * time.Second),
|
||||||
LastSeenAt: sql.NullTime{Time: coderdAPI.Clock.Now().Add(time.Hour), Valid: true}, // Stale interval can't be adjusted, keep online.
|
LastSeenAt: sql.NullTime{Time: coderdAPI.Clock.Now().Add(time.Hour), Valid: true}, // Stale interval can't be adjusted, keep online.
|
||||||
KeyID: uuid.MustParse(codersdk.ProvisionerKeyIDBuiltIn),
|
KeyID: codersdk.ProvisionerKeyUUIDBuiltIn,
|
||||||
Tags: database.StringMap{"owner": "", "scope": "organization"},
|
Tags: database.StringMap{"owner": "", "scope": "organization"},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -114,7 +114,7 @@ func New() database.Store {
|
|||||||
q.defaultProxyIconURL = "/emojis/1f3e1.png"
|
q.defaultProxyIconURL = "/emojis/1f3e1.png"
|
||||||
|
|
||||||
_, err = q.InsertProvisionerKey(context.Background(), database.InsertProvisionerKeyParams{
|
_, err = q.InsertProvisionerKey(context.Background(), database.InsertProvisionerKeyParams{
|
||||||
ID: uuid.MustParse(codersdk.ProvisionerKeyIDBuiltIn),
|
ID: codersdk.ProvisionerKeyUUIDBuiltIn,
|
||||||
OrganizationID: defaultOrg.ID,
|
OrganizationID: defaultOrg.ID,
|
||||||
CreatedAt: dbtime.Now(),
|
CreatedAt: dbtime.Now(),
|
||||||
HashedSecret: []byte{},
|
HashedSecret: []byte{},
|
||||||
@ -125,7 +125,7 @@ func New() database.Store {
|
|||||||
panic(xerrors.Errorf("failed to create built-in provisioner key: %w", err))
|
panic(xerrors.Errorf("failed to create built-in provisioner key: %w", err))
|
||||||
}
|
}
|
||||||
_, err = q.InsertProvisionerKey(context.Background(), database.InsertProvisionerKeyParams{
|
_, err = q.InsertProvisionerKey(context.Background(), database.InsertProvisionerKeyParams{
|
||||||
ID: uuid.MustParse(codersdk.ProvisionerKeyIDUserAuth),
|
ID: codersdk.ProvisionerKeyUUIDUserAuth,
|
||||||
OrganizationID: defaultOrg.ID,
|
OrganizationID: defaultOrg.ID,
|
||||||
CreatedAt: dbtime.Now(),
|
CreatedAt: dbtime.Now(),
|
||||||
HashedSecret: []byte{},
|
HashedSecret: []byte{},
|
||||||
@ -136,7 +136,7 @@ func New() database.Store {
|
|||||||
panic(xerrors.Errorf("failed to create user-auth provisioner key: %w", err))
|
panic(xerrors.Errorf("failed to create user-auth provisioner key: %w", err))
|
||||||
}
|
}
|
||||||
_, err = q.InsertProvisionerKey(context.Background(), database.InsertProvisionerKeyParams{
|
_, err = q.InsertProvisionerKey(context.Background(), database.InsertProvisionerKeyParams{
|
||||||
ID: uuid.MustParse(codersdk.ProvisionerKeyIDPSK),
|
ID: codersdk.ProvisionerKeyUUIDPSK,
|
||||||
OrganizationID: defaultOrg.ID,
|
OrganizationID: defaultOrg.ID,
|
||||||
CreatedAt: dbtime.Now(),
|
CreatedAt: dbtime.Now(),
|
||||||
HashedSecret: []byte{},
|
HashedSecret: []byte{},
|
||||||
|
@ -413,7 +413,7 @@ func TestDeleteOldProvisionerDaemons(t *testing.T) {
|
|||||||
Version: "1.0.0",
|
Version: "1.0.0",
|
||||||
APIVersion: proto.CurrentVersion.String(),
|
APIVersion: proto.CurrentVersion.String(),
|
||||||
OrganizationID: defaultOrg.ID,
|
OrganizationID: defaultOrg.ID,
|
||||||
KeyID: uuid.MustParse(codersdk.ProvisionerKeyIDBuiltIn),
|
KeyID: codersdk.ProvisionerKeyUUIDBuiltIn,
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
_, err = db.UpsertProvisionerDaemon(ctx, database.UpsertProvisionerDaemonParams{
|
_, err = db.UpsertProvisionerDaemon(ctx, database.UpsertProvisionerDaemonParams{
|
||||||
@ -426,7 +426,7 @@ func TestDeleteOldProvisionerDaemons(t *testing.T) {
|
|||||||
Version: "1.0.0",
|
Version: "1.0.0",
|
||||||
APIVersion: proto.CurrentVersion.String(),
|
APIVersion: proto.CurrentVersion.String(),
|
||||||
OrganizationID: defaultOrg.ID,
|
OrganizationID: defaultOrg.ID,
|
||||||
KeyID: uuid.MustParse(codersdk.ProvisionerKeyIDBuiltIn),
|
KeyID: codersdk.ProvisionerKeyUUIDBuiltIn,
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
_, err = db.UpsertProvisionerDaemon(ctx, database.UpsertProvisionerDaemonParams{
|
_, err = db.UpsertProvisionerDaemon(ctx, database.UpsertProvisionerDaemonParams{
|
||||||
@ -441,7 +441,7 @@ func TestDeleteOldProvisionerDaemons(t *testing.T) {
|
|||||||
Version: "1.0.0",
|
Version: "1.0.0",
|
||||||
APIVersion: proto.CurrentVersion.String(),
|
APIVersion: proto.CurrentVersion.String(),
|
||||||
OrganizationID: defaultOrg.ID,
|
OrganizationID: defaultOrg.ID,
|
||||||
KeyID: uuid.MustParse(codersdk.ProvisionerKeyIDBuiltIn),
|
KeyID: codersdk.ProvisionerKeyUUIDBuiltIn,
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
_, err = db.UpsertProvisionerDaemon(ctx, database.UpsertProvisionerDaemonParams{
|
_, err = db.UpsertProvisionerDaemon(ctx, database.UpsertProvisionerDaemonParams{
|
||||||
@ -457,7 +457,7 @@ func TestDeleteOldProvisionerDaemons(t *testing.T) {
|
|||||||
Version: "1.0.0",
|
Version: "1.0.0",
|
||||||
APIVersion: proto.CurrentVersion.String(),
|
APIVersion: proto.CurrentVersion.String(),
|
||||||
OrganizationID: defaultOrg.ID,
|
OrganizationID: defaultOrg.ID,
|
||||||
KeyID: uuid.MustParse(codersdk.ProvisionerKeyIDBuiltIn),
|
KeyID: codersdk.ProvisionerKeyUUIDBuiltIn,
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
@ -2272,7 +2272,7 @@ func setup(t *testing.T, ignoreLogErrors bool, ov *overrides) (proto.DRPCProvisi
|
|||||||
Version: buildinfo.Version(),
|
Version: buildinfo.Version(),
|
||||||
APIVersion: proto.CurrentVersion.String(),
|
APIVersion: proto.CurrentVersion.String(),
|
||||||
OrganizationID: defOrg.ID,
|
OrganizationID: defOrg.ID,
|
||||||
KeyID: uuid.MustParse(codersdk.ProvisionerKeyIDBuiltIn),
|
KeyID: codersdk.ProvisionerKeyUUIDBuiltIn,
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
@ -352,6 +352,12 @@ const (
|
|||||||
ProvisionerKeyIDPSK = "00000000-0000-0000-0000-000000000003"
|
ProvisionerKeyIDPSK = "00000000-0000-0000-0000-000000000003"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
ProvisionerKeyUUIDBuiltIn = uuid.MustParse(ProvisionerKeyIDBuiltIn)
|
||||||
|
ProvisionerKeyUUIDUserAuth = uuid.MustParse(ProvisionerKeyIDUserAuth)
|
||||||
|
ProvisionerKeyUUIDPSK = uuid.MustParse(ProvisionerKeyIDPSK)
|
||||||
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
ProvisionerKeyNameBuiltIn = "built-in"
|
ProvisionerKeyNameBuiltIn = "built-in"
|
||||||
ProvisionerKeyNameUserAuth = "user-auth"
|
ProvisionerKeyNameUserAuth = "user-auth"
|
||||||
|
@ -782,10 +782,14 @@ func TestGetProvisionerDaemons(t *testing.T) {
|
|||||||
pkDaemons, err := orgAdmin.ListProvisionerKeyDaemons(ctx, org.ID)
|
pkDaemons, err := orgAdmin.ListProvisionerKeyDaemons(ctx, org.ID)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
require.Len(t, pkDaemons, 1)
|
require.Len(t, pkDaemons, 2)
|
||||||
require.Len(t, pkDaemons[0].Daemons, 1)
|
require.Len(t, pkDaemons[0].Daemons, 1)
|
||||||
assert.Equal(t, keys[0].ID, pkDaemons[0].Key.ID)
|
assert.Equal(t, keys[0].ID, pkDaemons[0].Key.ID)
|
||||||
assert.Equal(t, keys[0].Name, pkDaemons[0].Key.Name)
|
assert.Equal(t, keys[0].Name, pkDaemons[0].Key.Name)
|
||||||
|
// user-auth provisioners
|
||||||
|
require.Len(t, pkDaemons[1].Daemons, 0)
|
||||||
|
assert.Equal(t, codersdk.ProvisionerKeyUUIDUserAuth, pkDaemons[1].Key.ID)
|
||||||
|
assert.Equal(t, codersdk.ProvisionerKeyNameUserAuth, pkDaemons[1].Key.Name)
|
||||||
|
|
||||||
assert.Equal(t, daemonName, pkDaemons[0].Daemons[0].Name)
|
assert.Equal(t, daemonName, pkDaemons[0].Daemons[0].Name)
|
||||||
assert.Equal(t, buildinfo.Version(), pkDaemons[0].Daemons[0].Version)
|
assert.Equal(t, buildinfo.Version(), pkDaemons[0].Daemons[0].Version)
|
||||||
|
@ -137,6 +137,20 @@ func (api *API) provisionerKeyDaemons(rw http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
sdkKeys := convertProvisionerKeys(pks)
|
sdkKeys := convertProvisionerKeys(pks)
|
||||||
|
|
||||||
|
// For the default organization, we insert three rows for the special
|
||||||
|
// provisioner key types (built-in, user-auth, and psk). We _don't_ insert
|
||||||
|
// those into the database for any other org, but we still need to include the
|
||||||
|
// user-auth key in this list, so we just insert it manually.
|
||||||
|
if !slices.ContainsFunc(sdkKeys, func(key codersdk.ProvisionerKey) bool {
|
||||||
|
return key.ID == codersdk.ProvisionerKeyUUIDUserAuth
|
||||||
|
}) {
|
||||||
|
sdkKeys = append(sdkKeys, codersdk.ProvisionerKey{
|
||||||
|
ID: codersdk.ProvisionerKeyUUIDUserAuth,
|
||||||
|
Name: codersdk.ProvisionerKeyNameUserAuth,
|
||||||
|
Tags: map[string]string{},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
daemons, err := api.Database.GetProvisionerDaemonsByOrganization(ctx, database.GetProvisionerDaemonsByOrganizationParams{OrganizationID: organization.ID})
|
daemons, err := api.Database.GetProvisionerDaemonsByOrganization(ctx, database.GetProvisionerDaemonsByOrganizationParams{OrganizationID: organization.ID})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
httpapi.InternalServerError(rw, err)
|
httpapi.InternalServerError(rw, err)
|
||||||
|
Reference in New Issue
Block a user