Generates/Stores the device request and returns the device and user codes.
Signed-off-by: justin-slowik <justin.slowik@thermofisher.com>
This commit is contained in:
committed by
justin-slowik
parent
11fc8568cb
commit
6d343e059b
@@ -21,6 +21,8 @@ const (
|
||||
kindPassword = "Password"
|
||||
kindOfflineSessions = "OfflineSessions"
|
||||
kindConnector = "Connector"
|
||||
kindDeviceRequest = "DeviceRequest"
|
||||
kindDeviceToken = "DeviceToken"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -32,6 +34,8 @@ const (
|
||||
resourcePassword = "passwords"
|
||||
resourceOfflineSessions = "offlinesessionses" // Again attempts to pluralize.
|
||||
resourceConnector = "connectors"
|
||||
resourceDeviceRequest = "devicerequests"
|
||||
resourceDeviceToken = "devicetokens"
|
||||
)
|
||||
|
||||
// Config values for the Kubernetes storage type.
|
||||
@@ -593,5 +597,47 @@ func (cli *client) GarbageCollect(now time.Time) (result storage.GCResult, err e
|
||||
result.AuthCodes++
|
||||
}
|
||||
}
|
||||
|
||||
var deviceRequests DeviceRequestList
|
||||
if err := cli.list(resourceDeviceRequest, &deviceRequests); err != nil {
|
||||
return result, fmt.Errorf("failed to list device requests: %v", err)
|
||||
}
|
||||
|
||||
for _, deviceRequest := range deviceRequests.DeviceRequests {
|
||||
if now.After(deviceRequest.Expiry) {
|
||||
if err := cli.delete(resourceDeviceRequest, deviceRequest.ObjectMeta.Name); err != nil {
|
||||
cli.logger.Errorf("failed to delete device request: %v", err)
|
||||
delErr = fmt.Errorf("failed to delete device request: %v", err)
|
||||
}
|
||||
result.DeviceRequests++
|
||||
}
|
||||
}
|
||||
|
||||
var deviceTokens DeviceTokenList
|
||||
if err := cli.list(resourceDeviceToken, &deviceTokens); err != nil {
|
||||
return result, fmt.Errorf("failed to list device tokens: %v", err)
|
||||
}
|
||||
|
||||
for _, deviceToken := range deviceTokens.DeviceTokens {
|
||||
if now.After(deviceToken.Expiry) {
|
||||
if err := cli.delete(resourceDeviceToken, deviceToken.ObjectMeta.Name); err != nil {
|
||||
cli.logger.Errorf("failed to delete device token: %v", err)
|
||||
delErr = fmt.Errorf("failed to delete device token: %v", err)
|
||||
}
|
||||
result.DeviceTokens++
|
||||
}
|
||||
}
|
||||
|
||||
if delErr != nil {
|
||||
return result, delErr
|
||||
}
|
||||
return result, delErr
|
||||
}
|
||||
|
||||
func (cli *client) CreateDeviceRequest(d storage.DeviceRequest) error {
|
||||
return cli.post(resourceDeviceRequest, cli.fromStorageDeviceRequest(d))
|
||||
}
|
||||
|
||||
func (cli *client) CreateDeviceToken(t storage.DeviceToken) error {
|
||||
return cli.post(resourceDeviceToken, cli.fromStorageDeviceToken(t))
|
||||
}
|
||||
|
@@ -85,6 +85,8 @@ func (s *StorageTestSuite) TestStorage() {
|
||||
for _, resource := range []string{
|
||||
resourceAuthCode,
|
||||
resourceAuthRequest,
|
||||
resourceDeviceRequest,
|
||||
resourceDeviceToken,
|
||||
resourceClient,
|
||||
resourceRefreshToken,
|
||||
resourceKeys,
|
||||
|
@@ -143,6 +143,36 @@ var customResourceDefinitions = []k8sapi.CustomResourceDefinition{
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
ObjectMeta: k8sapi.ObjectMeta{
|
||||
Name: "devicerequests.dex.coreos.com",
|
||||
},
|
||||
TypeMeta: crdMeta,
|
||||
Spec: k8sapi.CustomResourceDefinitionSpec{
|
||||
Group: apiGroup,
|
||||
Version: "v1",
|
||||
Names: k8sapi.CustomResourceDefinitionNames{
|
||||
Plural: "devicerequests",
|
||||
Singular: "devicerequest",
|
||||
Kind: "DeviceRequest",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
ObjectMeta: k8sapi.ObjectMeta{
|
||||
Name: "devicetokens.dex.coreos.com",
|
||||
},
|
||||
TypeMeta: crdMeta,
|
||||
Spec: k8sapi.CustomResourceDefinitionSpec{
|
||||
Group: apiGroup,
|
||||
Version: "v1",
|
||||
Names: k8sapi.CustomResourceDefinitionNames{
|
||||
Plural: "devicetokens",
|
||||
Singular: "devicetoken",
|
||||
Kind: "DeviceToken",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
// There will only ever be a single keys resource. Maintain this by setting a
|
||||
@@ -635,3 +665,77 @@ type ConnectorList struct {
|
||||
k8sapi.ListMeta `json:"metadata,omitempty"`
|
||||
Connectors []Connector `json:"items"`
|
||||
}
|
||||
|
||||
// DeviceRequest is a mirrored struct from storage with JSON struct tags and
|
||||
// Kubernetes type metadata.
|
||||
type DeviceRequest struct {
|
||||
k8sapi.TypeMeta `json:",inline"`
|
||||
k8sapi.ObjectMeta `json:"metadata,omitempty"`
|
||||
|
||||
DeviceCode string `json:"device_code,omitempty"`
|
||||
CLientID string `json:"client_id,omitempty"`
|
||||
Scopes []string `json:"scopes,omitempty"`
|
||||
PkceVerifier string `json:"pkce_verifier,omitempty"`
|
||||
Expiry time.Time `json:"expiry"`
|
||||
}
|
||||
|
||||
// AuthRequestList is a list of AuthRequests.
|
||||
type DeviceRequestList struct {
|
||||
k8sapi.TypeMeta `json:",inline"`
|
||||
k8sapi.ListMeta `json:"metadata,omitempty"`
|
||||
DeviceRequests []DeviceRequest `json:"items"`
|
||||
}
|
||||
|
||||
func (cli *client) fromStorageDeviceRequest(a storage.DeviceRequest) DeviceRequest {
|
||||
req := DeviceRequest{
|
||||
TypeMeta: k8sapi.TypeMeta{
|
||||
Kind: kindDeviceRequest,
|
||||
APIVersion: cli.apiVersion,
|
||||
},
|
||||
ObjectMeta: k8sapi.ObjectMeta{
|
||||
Name: strings.ToLower(a.UserCode),
|
||||
Namespace: cli.namespace,
|
||||
},
|
||||
DeviceCode: a.DeviceCode,
|
||||
CLientID: a.ClientID,
|
||||
Scopes: a.Scopes,
|
||||
PkceVerifier: a.PkceVerifier,
|
||||
Expiry: a.Expiry,
|
||||
}
|
||||
return req
|
||||
}
|
||||
|
||||
// DeviceToken is a mirrored struct from storage with JSON struct tags and
|
||||
// Kubernetes type metadata.
|
||||
type DeviceToken struct {
|
||||
k8sapi.TypeMeta `json:",inline"`
|
||||
k8sapi.ObjectMeta `json:"metadata,omitempty"`
|
||||
|
||||
Status string `json:"status,omitempty"`
|
||||
Token string `json:"token,omitempty"`
|
||||
Expiry time.Time `json:"expiry"`
|
||||
}
|
||||
|
||||
// DeviceTokenList is a list of DeviceTokens.
|
||||
type DeviceTokenList struct {
|
||||
k8sapi.TypeMeta `json:",inline"`
|
||||
k8sapi.ListMeta `json:"metadata,omitempty"`
|
||||
DeviceTokens []DeviceToken `json:"items"`
|
||||
}
|
||||
|
||||
func (cli *client) fromStorageDeviceToken(t storage.DeviceToken) DeviceToken {
|
||||
req := DeviceToken{
|
||||
TypeMeta: k8sapi.TypeMeta{
|
||||
Kind: kindDeviceToken,
|
||||
APIVersion: cli.apiVersion,
|
||||
},
|
||||
ObjectMeta: k8sapi.ObjectMeta{
|
||||
Name: t.DeviceCode,
|
||||
Namespace: cli.namespace,
|
||||
},
|
||||
Status: t.Status,
|
||||
Token: t.Token,
|
||||
Expiry: t.Expiry,
|
||||
}
|
||||
return req
|
||||
}
|
||||
|
Reference in New Issue
Block a user