@Summary List provisioner key daemons @ID list-provisioner-key-daemons @Security CoderSessionToken @Produce json @Tags Enterprise @Param organization path string true "Organization ID" @Success 200 {object} []codersdk.ProvisionerKeyDaemons @Router /api/v2/organizations/{organization}/provisionerkeys
(rw http.ResponseWriter, r *http.Request)
| 127 | // @Success 200 {object} []codersdk.ProvisionerKeyDaemons |
| 128 | // @Router /api/v2/organizations/{organization}/provisionerkeys/daemons [get] |
| 129 | func (api *API) provisionerKeyDaemons(rw http.ResponseWriter, r *http.Request) { |
| 130 | ctx := r.Context() |
| 131 | organization := httpmw.OrganizationParam(r) |
| 132 | |
| 133 | pks, err := api.Database.ListProvisionerKeysByOrganization(ctx, organization.ID) |
| 134 | if err != nil { |
| 135 | httpapi.InternalServerError(rw, err) |
| 136 | return |
| 137 | } |
| 138 | sdkKeys := convertProvisionerKeys(pks) |
| 139 | |
| 140 | // For the default organization, we insert three rows for the special |
| 141 | // provisioner key types (built-in, user-auth, and psk). We _don't_ insert |
| 142 | // those into the database for any other org, but we still need to include the |
| 143 | // user-auth key in this list, so we just insert it manually. |
| 144 | if !slices.ContainsFunc(sdkKeys, func(key codersdk.ProvisionerKey) bool { |
| 145 | return key.ID == codersdk.ProvisionerKeyUUIDUserAuth |
| 146 | }) { |
| 147 | sdkKeys = append(sdkKeys, codersdk.ProvisionerKey{ |
| 148 | ID: codersdk.ProvisionerKeyUUIDUserAuth, |
| 149 | Name: codersdk.ProvisionerKeyNameUserAuth, |
| 150 | Tags: map[string]string{}, |
| 151 | }) |
| 152 | } |
| 153 | |
| 154 | daemons, err := api.Database.GetProvisionerDaemonsByOrganization(ctx, database.GetProvisionerDaemonsByOrganizationParams{OrganizationID: organization.ID}) |
| 155 | if err != nil { |
| 156 | httpapi.InternalServerError(rw, err) |
| 157 | return |
| 158 | } |
| 159 | // provisionerdserver.DefaultHeartbeatInterval*3 matches the healthcheck report staleInterval. |
| 160 | recentDaemons := db2sdk.RecentProvisionerDaemons(time.Now(), provisionerdserver.DefaultHeartbeatInterval*3, daemons) |
| 161 | |
| 162 | pkDaemons := []codersdk.ProvisionerKeyDaemons{} |
| 163 | for _, key := range sdkKeys { |
| 164 | // The key.OrganizationID for the `user-auth` key is hardcoded to |
| 165 | // the default org in the database and we are overwriting it here |
| 166 | // to be the correct org we used to query the list. |
| 167 | // This will be changed when we update the `user-auth` keys to be |
| 168 | // directly tied to a user ID. |
| 169 | if key.ID.String() == codersdk.ProvisionerKeyIDUserAuth { |
| 170 | key.OrganizationID = organization.ID |
| 171 | } |
| 172 | daemons := []codersdk.ProvisionerDaemon{} |
| 173 | for _, daemon := range recentDaemons { |
| 174 | if daemon.KeyID == key.ID { |
| 175 | daemons = append(daemons, daemon) |
| 176 | } |
| 177 | } |
| 178 | pkDaemons = append(pkDaemons, codersdk.ProvisionerKeyDaemons{ |
| 179 | Key: key, |
| 180 | Daemons: daemons, |
| 181 | }) |
| 182 | } |
| 183 | |
| 184 | httpapi.Write(ctx, rw, http.StatusOK, pkDaemons) |
| 185 | } |
| 186 |
nothing calls this directly
no test coverage detected