import { AxiosInstance } from "axios";
import { SshKeyResource } from '~/models/ssh-key';
-import { CommonResourceService } from "~/services/common-service/common-resource-service";
+import { CommonResourceService, CommonResourceServiceError } from '~/services/common-service/common-resource-service';
import { ApiActions } from "~/services/api/api-actions";
+export enum AuthorizedKeysServiceError {
+ UNIQUE_PUBLIC_KEY = 'UniquePublicKey',
+ INVALID_PUBLIC_KEY = 'InvalidPublicKey',
+}
+
export class AuthorizedKeysService extends CommonResourceService<SshKeyResource> {
constructor(serverApi: AxiosInstance, actions: ApiActions) {
super(serverApi, "authorized_keys", actions);
}
-}
\ No newline at end of file
+}
+
+export const getAuthorizedKeysServiceError = (errorResponse: any) => {
+ if ('errors' in errorResponse && 'errorToken' in errorResponse) {
+ const error = errorResponse.errors.join('');
+ switch (true) {
+ case /Public key does not appear to be a valid ssh-rsa or dsa public key/.test(error):
+ return AuthorizedKeysServiceError.INVALID_PUBLIC_KEY;
+ case /Public key already exists in the database, use a different key./.test(error):
+ return AuthorizedKeysServiceError.UNIQUE_PUBLIC_KEY;
+ default:
+ return CommonResourceServiceError.UNKNOWN;
+ }
+ }
+ return CommonResourceServiceError.NONE;
+};
\ No newline at end of file
UNIQUE_VIOLATION = 'UniqueViolation',
OWNERSHIP_CYCLE = 'OwnershipCycle',
MODIFYING_CONTAINER_REQUEST_FINAL_STATE = 'ModifyingContainerRequestFinalState',
- UNIQUE_PUBLIC_KEY = 'UniquePublicKey',
- INVALID_PUBLIC_KEY = 'InvalidPublicKey',
UNKNOWN = 'Unknown',
NONE = 'None'
}
return CommonResourceServiceError.OWNERSHIP_CYCLE;
case /Mounts cannot be modified in state 'Final'/.test(error):
return CommonResourceServiceError.MODIFYING_CONTAINER_REQUEST_FINAL_STATE;
- case /Public key does not appear to be a valid ssh-rsa or dsa public key/.test(error):
- return CommonResourceServiceError.INVALID_PUBLIC_KEY;
- case /Public key already exists in the database, use a different key./.test(error):
- return CommonResourceServiceError.UNIQUE_PUBLIC_KEY;
default:
return CommonResourceServiceError.UNKNOWN;
}
import { ofType, unionize, UnionOf } from '~/common/unionize';
import { Dispatch } from "redux";
import { reset, stopSubmit } from 'redux-form';
-import { User } from "~/models/user";
-import { RootState } from "../store";
-import { ServiceRepository } from "~/services/services";
-import { getCommonResourceServiceError, CommonResourceServiceError } from '~/services/common-service/common-resource-service';
import { AxiosInstance } from "axios";
+import { RootState } from "../store";
import { snackbarActions } from '~/store/snackbar/snackbar-actions';
import { dialogActions } from '~/store/dialog/dialog-actions';
+import { setBreadcrumbs } from '~/store/breadcrumbs/breadcrumbs-actions';
+import { ServiceRepository } from "~/services/services";
+import { getAuthorizedKeysServiceError, AuthorizedKeysServiceError } from '~/services/authorized-keys-service/authorized-keys-service';
import { SshKeyCreateFormDialogData, KeyType, SshKeyResource } from '~/models/ssh-key';
-import { setBreadcrumbs } from '../breadcrumbs/breadcrumbs-actions';
+import { User } from "~/models/user";
export const authActions = unionize({
SAVE_API_TOKEN: ofType<string>(),
hideDuration: 2000
}));
} catch (e) {
- const error = getCommonResourceServiceError(e);
- if (error === CommonResourceServiceError.UNIQUE_PUBLIC_KEY) {
+ const error = getAuthorizedKeysServiceError(e);
+ if (error === AuthorizedKeysServiceError.UNIQUE_PUBLIC_KEY) {
dispatch(stopSubmit(SSH_KEY_CREATE_FORM_NAME, { publicKey: 'Public key already exists.' }));
- } else if (error === CommonResourceServiceError.INVALID_PUBLIC_KEY) {
+ } else if (error === AuthorizedKeysServiceError.INVALID_PUBLIC_KEY) {
dispatch(stopSubmit(SSH_KEY_CREATE_FORM_NAME, { publicKey: 'Public key is invalid' }));
}
}