mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-14 22:51:53 +00:00
Refactoring functions into services, helper functions, hooks, patch bugs
This commit is contained in:
@@ -5,7 +5,7 @@ import { useRouter } from 'next/router';
|
||||
import { useTranslation } from 'next-i18next';
|
||||
|
||||
import attemptLoginMfa from '@app/components/utilities/attemptLoginMfa';
|
||||
import resendMfaToken from '@app/pages/api/auth/resendMfaToken';
|
||||
import { useSendMfaToken } from '@app/hooks/api/auth';
|
||||
|
||||
import Button from '../basic/buttons/Button';
|
||||
import Error from '../basic/Error';
|
||||
@@ -50,6 +50,8 @@ export default function MFAStep({
|
||||
const [mfaCode, setMfaCode] = useState('');
|
||||
const [codeError, setCodeError] = useState(false);
|
||||
|
||||
const sendMfaToken = useSendMfaToken();
|
||||
|
||||
const { t } = useTranslation();
|
||||
|
||||
const handleLoginMfa = async () => {
|
||||
@@ -72,15 +74,14 @@ export default function MFAStep({
|
||||
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
setIsLoading(false);
|
||||
setCodeError(true);
|
||||
}
|
||||
}
|
||||
|
||||
const handleResendMfaCode = async () => {
|
||||
try {
|
||||
await resendMfaToken({
|
||||
email
|
||||
});
|
||||
await sendMfaToken.mutateAsync({ email });
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
}
|
||||
|
||||
@@ -87,7 +87,6 @@ export default function Navbar() {
|
||||
}, []);
|
||||
|
||||
const closeApp = async () => {
|
||||
console.log('Logging out...');
|
||||
await logout();
|
||||
router.push('/login');
|
||||
};
|
||||
|
||||
@@ -161,6 +161,8 @@ export default function UserInfoStep({
|
||||
organizationName: `${firstName}'s organization`
|
||||
});
|
||||
|
||||
// unset signup JWT token and set JWT token
|
||||
SecurityClient.setSignupToken('');
|
||||
SecurityClient.setToken(response.token);
|
||||
|
||||
saveTokenToLocalStorage({
|
||||
@@ -174,14 +176,18 @@ export default function UserInfoStep({
|
||||
privateKey
|
||||
});
|
||||
|
||||
incrementStep();
|
||||
|
||||
const userOrgs = await getOrganizations();
|
||||
await ProjectService.initProject({
|
||||
organizationId: userOrgs[0]?._id,
|
||||
const orgId = userOrgs[0]?._id;
|
||||
const project = await ProjectService.initProject({
|
||||
organizationId: orgId,
|
||||
projectName: 'Example Project'
|
||||
});
|
||||
|
||||
localStorage.setItem('orgData.id', orgId);
|
||||
localStorage.setItem('projectData.id', project._id);
|
||||
|
||||
incrementStep();
|
||||
|
||||
} catch (error) {
|
||||
setIsLoading(false);
|
||||
console.error(error);
|
||||
|
||||
@@ -1,7 +1,15 @@
|
||||
import { getAuthToken, setAuthToken , setMfaTempToken } from '@app/reactQuery';
|
||||
import {
|
||||
getAuthToken,
|
||||
setAuthToken,
|
||||
setMfaTempToken,
|
||||
setSignupTempToken} from '@app/reactQuery';
|
||||
|
||||
// depreciated: go for apiRequest module in config/api
|
||||
export default class SecurityClient {
|
||||
static setSignupToken(tokenStr: string) {
|
||||
setSignupTempToken(tokenStr);
|
||||
}
|
||||
|
||||
static setMfaToken(tokenStr: string) {
|
||||
setMfaTempToken(tokenStr);
|
||||
}
|
||||
|
||||
@@ -44,7 +44,7 @@ const attemptLogin = async (
|
||||
client.setSalt(salt);
|
||||
client.setServerPublicKey(serverPublicKey);
|
||||
const clientProof = client.getProof(); // called M1
|
||||
|
||||
|
||||
const {
|
||||
mfaEnabled,
|
||||
encryptionVersion,
|
||||
@@ -65,7 +65,7 @@ const attemptLogin = async (
|
||||
// case: MFA is enabled
|
||||
|
||||
// set temporary (MFA) JWT token
|
||||
SecurityClient.setToken(token);
|
||||
SecurityClient.setMfaToken(token);
|
||||
|
||||
resolve({
|
||||
mfaEnabled,
|
||||
@@ -113,40 +113,14 @@ const attemptLogin = async (
|
||||
const userOrgs = await getOrganizations();
|
||||
const orgId = userOrgs[0]._id;
|
||||
localStorage.setItem('orgData.id', orgId);
|
||||
|
||||
|
||||
const orgUserProjects = await getOrganizationUserProjects({
|
||||
orgId
|
||||
});
|
||||
localStorage.setItem('projectData.id', orgUserProjects[0]._id);
|
||||
|
||||
// // TODO: this part definitely needs to be refactored
|
||||
// const userOrgs = await getOrganizations();
|
||||
// const userOrgsData = userOrgs.map((org: { _id: string }) => org._id);
|
||||
|
||||
// let orgToLogin;
|
||||
// if (userOrgsData.includes(localStorage.getItem('orgData.id'))) {
|
||||
// orgToLogin = localStorage.getItem('orgData.id');
|
||||
// } else {
|
||||
// orgToLogin = userOrgsData[0];
|
||||
// localStorage.setItem('orgData.id', orgToLogin);
|
||||
// }
|
||||
|
||||
// let orgUserProjects = await getOrganizationUserProjects({
|
||||
// orgId: orgToLogin
|
||||
// });
|
||||
|
||||
// orgUserProjects = orgUserProjects?.map((project: { _id: string }) => project._id);
|
||||
// let projectToLogin;
|
||||
// if (orgUserProjects.includes(localStorage.getItem('projectData.id'))) {
|
||||
// projectToLogin = localStorage.getItem('projectData.id');
|
||||
// } else {
|
||||
// try {
|
||||
// projectToLogin = orgUserProjects[0];
|
||||
// localStorage.setItem('projectData.id', projectToLogin);
|
||||
// } catch (error) {
|
||||
// console.log('ERROR: User likely has no projects. ', error);
|
||||
// }
|
||||
// }
|
||||
if (orgUserProjects.length > 0) {
|
||||
localStorage.setItem('projectData.id', orgUserProjects[0]._id);
|
||||
}
|
||||
|
||||
if (email) {
|
||||
telemetry.identify(email);
|
||||
@@ -166,100 +140,4 @@ const attemptLogin = async (
|
||||
});
|
||||
};
|
||||
|
||||
export default attemptLogin;
|
||||
|
||||
// should be function: init first project
|
||||
|
||||
// if (isSignUp) {
|
||||
// const randomBytes = crypto.randomBytes(16).toString('hex');
|
||||
// const PRIVATE_KEY = String(localStorage.getItem('PRIVATE_KEY'));
|
||||
|
||||
// const myUser = await getUser();
|
||||
|
||||
// const { ciphertext, nonce } = encryptAssymmetric({
|
||||
// plaintext: randomBytes,
|
||||
// publicKey: myUser.publicKey,
|
||||
// privateKey: PRIVATE_KEY
|
||||
// }) as { ciphertext: string; nonce: string };
|
||||
|
||||
// await uploadKeys(projectToLogin, myUser._id, ciphertext, nonce);
|
||||
|
||||
// const secretsToBeAdded: SecretDataProps[] = [
|
||||
// {
|
||||
// pos: 0,
|
||||
// key: 'DATABASE_URL',
|
||||
// // eslint-disable-next-line no-template-curly-in-string
|
||||
// value: 'mongodb+srv://${DB_USERNAME}:${DB_PASSWORD}@mongodb.net',
|
||||
// valueOverride: undefined,
|
||||
// comment: 'Secret referencing example',
|
||||
// id: '',
|
||||
// tags: []
|
||||
// },
|
||||
// {
|
||||
// pos: 1,
|
||||
// key: 'DB_USERNAME',
|
||||
// value: 'OVERRIDE_THIS',
|
||||
// valueOverride: undefined,
|
||||
// comment:
|
||||
// 'Override secrets with personal value',
|
||||
// id: '',
|
||||
// tags: []
|
||||
// },
|
||||
// {
|
||||
// pos: 2,
|
||||
// key: 'DB_PASSWORD',
|
||||
// value: 'OVERRIDE_THIS',
|
||||
// valueOverride: undefined,
|
||||
// comment:
|
||||
// 'Another secret override',
|
||||
// id: '',
|
||||
// tags: []
|
||||
// },
|
||||
// {
|
||||
// pos: 3,
|
||||
// key: 'DB_USERNAME',
|
||||
// value: 'user1234',
|
||||
// valueOverride: 'user1234',
|
||||
// comment: '',
|
||||
// id: '',
|
||||
// tags: []
|
||||
// },
|
||||
// {
|
||||
// pos: 4,
|
||||
// key: 'DB_PASSWORD',
|
||||
// value: 'example_password',
|
||||
// valueOverride: 'example_password',
|
||||
// comment: '',
|
||||
// id: '',
|
||||
// tags: []
|
||||
// },
|
||||
// {
|
||||
// pos: 5,
|
||||
// key: 'TWILIO_AUTH_TOKEN',
|
||||
// value: 'example_twillio_token',
|
||||
// valueOverride: undefined,
|
||||
// comment: '',
|
||||
// id: '',
|
||||
// tags: []
|
||||
// },
|
||||
// {
|
||||
// pos: 6,
|
||||
// key: 'WEBSITE_URL',
|
||||
// value: 'http://localhost:3000',
|
||||
// valueOverride: undefined,
|
||||
// comment: '',
|
||||
// id: '',
|
||||
// tags: []
|
||||
// }
|
||||
// ];
|
||||
// const secrets = await encryptSecrets({
|
||||
// secretsToEncrypt: secretsToBeAdded,
|
||||
// workspaceId: String(localStorage.getItem('projectData.id')),
|
||||
// env: 'dev'
|
||||
// });
|
||||
// await addSecrets({
|
||||
// secrets: secrets ?? [],
|
||||
// env: 'dev',
|
||||
// workspaceId: String(localStorage.getItem('projectData.id'))
|
||||
// });
|
||||
// }
|
||||
export default attemptLogin;
|
||||
@@ -3,6 +3,8 @@ import jsrp from 'jsrp';
|
||||
|
||||
import login1 from '@app/pages/api/auth/Login1';
|
||||
import verifyMfaToken from '@app/pages/api/auth/verifyMfaToken';
|
||||
import getOrganizations from '@app/pages/api/organization/getOrgs';
|
||||
import getOrganizationUserProjects from '@app/pages/api/organization/GetOrgUserProjects';
|
||||
import KeyService from '@app/services/KeyService';
|
||||
|
||||
import { saveTokenToLocalStorage } from './saveTokenToLocalStorage';
|
||||
@@ -51,7 +53,8 @@ const attemptLoginMfa = async ({
|
||||
mfaToken
|
||||
});
|
||||
|
||||
// set JWT token
|
||||
// unset temporary (MFA) JWT token and set JWT token
|
||||
SecurityClient.setMfaToken('');
|
||||
SecurityClient.setToken(token);
|
||||
|
||||
const privateKey = await KeyService.decryptPrivateKey({
|
||||
@@ -77,6 +80,18 @@ const attemptLoginMfa = async ({
|
||||
privateKey
|
||||
});
|
||||
|
||||
// TODO: in the future - move this logic elsewhere
|
||||
// because this function is about logging the user in
|
||||
// and not initializing the login details
|
||||
const userOrgs = await getOrganizations();
|
||||
const orgId = userOrgs[0]._id;
|
||||
localStorage.setItem('orgData.id', orgId);
|
||||
|
||||
const orgUserProjects = await getOrganizationUserProjects({
|
||||
orgId
|
||||
});
|
||||
localStorage.setItem('projectData.id', orgUserProjects[0]._id);
|
||||
|
||||
resolve(true);
|
||||
} catch (err) {
|
||||
reject(err);
|
||||
|
||||
Reference in New Issue
Block a user