feat: Add legal requirements (#1306)

This commit is contained in:
Maksim Eltyshev
2025-08-21 15:10:02 +02:00
committed by GitHub
parent bb40a22563
commit 2f4bcb0583
122 changed files with 1522 additions and 81 deletions
+3 -3
View File
@@ -119,11 +119,11 @@ export function* updateHomeView(value) {
}
}
export function* logout(invalidateAccessToken) {
export function* logout(revokeAccessToken) {
yield call(removeAccessToken);
if (invalidateAccessToken) {
yield put(actions.logout.invalidateAccessToken());
if (revokeAccessToken) {
yield put(actions.logout.revokeAccessToken());
try {
yield call(request, api.deleteCurrentAccessToken);
+2 -2
View File
@@ -19,8 +19,8 @@ export default function* coreWatchers() {
takeEvery(EntryActionTypes.HOME_VIEW_UPDATE, ({ payload: { value } }) =>
services.updateHomeView(value),
),
takeEvery(EntryActionTypes.LOGOUT, ({ payload: { invalidateAccessToken } }) =>
services.logout(invalidateAccessToken),
takeEvery(EntryActionTypes.LOGOUT, ({ payload: { revokeAccessToken } }) =>
services.logout(revokeAccessToken),
),
]);
}
+6 -1
View File
@@ -13,7 +13,12 @@ export default function* loginSaga() {
const watcherTasks = yield all(watchers.map((watcher) => fork(watcher)));
yield fork(services.initializeLogin);
yield take([ActionTypes.AUTHENTICATE__SUCCESS, ActionTypes.WITH_OIDC_AUTHENTICATE__SUCCESS]);
yield take([
ActionTypes.AUTHENTICATE__SUCCESS,
ActionTypes.WITH_OIDC_AUTHENTICATE__SUCCESS,
ActionTypes.TERMS_ACCEPT__SUCCESS,
]);
yield cancel(watcherTasks);
yield call(services.goToRoot);
+74 -2
View File
@@ -10,8 +10,10 @@ import { replace } from '../../../lib/redux-router';
import selectors from '../../../selectors';
import actions from '../../../actions';
import api from '../../../api';
import i18n from '../../../i18n';
import { setAccessToken } from '../../../utils/access-token-storage';
import Paths from '../../../constants/Paths';
import AccessTokenSteps from '../../../constants/AccessTokenSteps';
export function* initializeLogin() {
const { item: config } = yield call(api.getConfig); // TODO: handle error
@@ -26,7 +28,12 @@ export function* authenticate(data) {
try {
({ item: accessToken } = yield call(api.createAccessToken, data));
} catch (error) {
yield put(actions.authenticate.failure(error));
let terms;
if (error.step === AccessTokenSteps.ACCEPT_TERMS) {
({ item: terms } = yield call(api.getTerms, error.termsType, i18n.resolvedLanguage));
}
yield put(actions.authenticate.failure(error, terms));
return;
}
@@ -106,7 +113,12 @@ export function* authenticateWithOidcCallback() {
nonce,
}));
} catch (error) {
yield put(actions.authenticateWithOidc.failure(error));
let terms;
if (error.step === AccessTokenSteps.ACCEPT_TERMS) {
({ item: terms } = yield call(api.getTerms, error.termsType, i18n.resolvedLanguage));
}
yield put(actions.authenticateWithOidc.failure(error, terms));
return;
}
@@ -118,10 +130,70 @@ export function* clearAuthenticateError() {
yield put(actions.clearAuthenticateError());
}
export function* acceptTerms(signature) {
yield put(actions.acceptTerms(signature));
const { pendingToken } = yield select(selectors.selectAuthenticateForm);
let accessToken;
try {
({ item: accessToken } = yield call(api.acceptTerms, {
pendingToken,
signature,
}));
} catch (error) {
yield put(actions.acceptTerms.failure(error));
return;
}
yield call(setAccessToken, accessToken);
yield put(actions.acceptTerms.success(accessToken));
}
export function* cancelTerms() {
const { pendingToken } = yield select(selectors.selectAuthenticateForm);
yield put(actions.cancelTerms());
try {
yield call(api.revokePendingToken, {
pendingToken,
});
} catch (error) {
yield put(actions.cancelTerms.failure(error));
return;
}
yield put(actions.cancelTerms.success(pendingToken));
}
export function* updateTermsLanguage(value) {
yield put(actions.updateTermsLanguage(value));
const {
termsForm: {
payload: { type },
},
} = yield select(selectors.selectAuthenticateForm);
let terms;
try {
({ item: terms } = yield call(api.getTerms, type, value));
} catch (error) {
yield put(actions.updateTermsLanguage.failure(error));
return;
}
yield put(actions.updateTermsLanguage.success(terms));
}
export default {
initializeLogin,
authenticate,
authenticateWithOidc,
authenticateWithOidcCallback,
clearAuthenticateError,
acceptTerms,
cancelTerms,
updateTermsLanguage,
};
+7
View File
@@ -15,5 +15,12 @@ export default function* loginWatchers() {
),
takeEvery(EntryActionTypes.WITH_OIDC_AUTHENTICATE, () => services.authenticateWithOidc()),
takeEvery(EntryActionTypes.AUTHENTICATE_ERROR_CLEAR, () => services.clearAuthenticateError()),
takeEvery(EntryActionTypes.TERMS_ACCEPT, ({ payload: { signature } }) =>
services.acceptTerms(signature),
),
takeEvery(EntryActionTypes.TERMS_CANCEL, () => services.cancelTerms()),
takeEvery(EntryActionTypes.TERMS_LANGUAGE_UPDATE, ({ payload: { value } }) =>
services.updateTermsLanguage(value),
),
]);
}