Skip to content

Commit 2cb93fe

Browse files
author
FrancescoMauto
committed
[DSC-1786] fix captcha cookie old ref to klaro, fix missing subscribe + minor refactor
Porting of [CST-26767]
1 parent 93efe5d commit 2cb93fe

7 files changed

Lines changed: 40 additions & 17 deletions

File tree

src/app/core/google-recaptcha/google-recaptcha-base.component.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import { CookieService } from '../services/cookie.service';
1515
import { isNotEmpty } from './../../shared/empty.util';
1616
import { NotificationsService } from './../../shared/notifications/notifications.service';
1717
import {
18-
CAPTCHA_NAME,
18+
CAPTCHA_FEEDBACK_NAME,
1919
GoogleRecaptchaService,
2020
} from './google-recaptcha.service';
2121

@@ -81,7 +81,7 @@ export abstract class GoogleRecaptchaBaseComponent {
8181
isRecaptchaCookieAccepted(): boolean {
8282
const orejimeAnonymousCookie = this.cookieService.get('orejime-anonymous');
8383
return isNotEmpty(orejimeAnonymousCookie)
84-
? orejimeAnonymousCookie[CAPTCHA_NAME]
84+
? orejimeAnonymousCookie[CAPTCHA_FEEDBACK_NAME]
8585
: false;
8686
}
8787

src/app/core/google-recaptcha/google-recaptcha.service.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ import { getFirstCompletedRemoteData } from '../shared/operators';
3333
export const CAPTCHA_COOKIE = '_GRECAPTCHA';
3434
export const CAPTCHA_REGISTRATION_NAME = 'google-recaptcha-registration';
3535

36-
export const CAPTCHA_NAME = 'google-recaptcha';
36+
export const CAPTCHA_FEEDBACK_NAME = 'google-recaptcha';
3737

3838
/**
3939
* A GoogleRecaptchaService used to send action and get a token from REST
@@ -107,10 +107,8 @@ export class GoogleRecaptchaService {
107107
tap(([recaptchaVersionRD, recaptchaModeRD, recaptchaKeyRD]) => {
108108

109109
if (
110-
this.cookieService.get('orejime-anonymous') && (
111-
this.cookieService.get('orejime-anonymous')[CAPTCHA_REGISTRATION_NAME] ||
112-
this.cookieService.get('klaro-anonymous')[CAPTCHA_NAME]
113-
) &&
110+
this.cookieService.get('orejime-anonymous') &&
111+
(this.cookieService.get('orejime-anonymous')[CAPTCHA_FEEDBACK_NAME] || this.cookieService.get('orejime-anonymous')[CAPTCHA_REGISTRATION_NAME]) &&
114112
recaptchaKeyRD.hasSucceeded && recaptchaVersionRD.hasSucceeded &&
115113
isNotEmpty(recaptchaVersionRD.payload?.values) && isNotEmpty(recaptchaKeyRD.payload?.values)
116114
) {

src/app/info/feedback/feedback-form/feedback-form.component.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,14 +59,14 @@ <h1>{{ 'info.feedback.head' | translate }}</h1>
5959
}
6060
</fieldset>
6161

62-
@if (submissionVerification && !isRecaptchaCookieAccepted()) {
62+
@let captchaCookieAccepted = isRecaptchaCookieAccepted();
63+
@if (submissionVerification && !captchaCookieAccepted) {
6364
<ds-alert [type]="AlertTypeEnum.Warning">
6465
<p class="m-0" [innerHTML]="MESSAGE_PREFIX + '.google-recaptcha.must-accept-cookies' | translate"></p>
6566
<p class="m-0"><a href="javascript:void(0);" (click)="openCookieSettings()">{{ MESSAGE_PREFIX + '.google-recaptcha.open-cookie-settings' | translate }}</a></p>
6667
</ds-alert>
6768
}
68-
69-
@if (isRecaptchaCookieAccepted() && (captchaVersion() | async) === 'v2') {
69+
@if (captchaCookieAccepted && (googleRecaptchaService.captchaVersion() | async) === 'v2') {
7070
<div class="my-3">
7171
<ds-google-recaptcha [captchaMode]="(captchaMode() | async)"
7272
(executeRecaptcha)="submitFeedback($event)" (checkboxChecked)="onCheckboxChecked($event)"
@@ -79,7 +79,7 @@ <h1>{{ 'info.feedback.head' | translate }}</h1>
7979
<div class="control-group col-sm-12 text-end">
8080
@if (!((captchaVersion() | async) === 'v2' && (captchaMode() | async) === 'invisible')) {
8181
<button class="btn btn-primary"
82-
[dsBtnDisabled]="feedbackForm.invalid || submissionVerification && !isRecaptchaCookieAccepted() || disableUntilChecked"
82+
[dsBtnDisabled]="feedbackForm.invalid || submissionVerification && !captchaCookieAccepted || disableUntilChecked"
8383
(click)="submitFeedback()">
8484
{{ 'info.feedback.send' | translate }}
8585
</button>

src/app/info/feedback/feedback-form/feedback-form.component.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ import { NotificationsService } from '../../../shared/notifications/notification
5656
import { OrejimeService } from '../../../shared/cookies/orejime.service';
5757
import { ConfigurationDataService } from '../../../core/data/configuration-data.service';
5858
import { CookieService } from '../../../core/services/cookie.service';
59+
import { ConfigurationProperty } from 'src/app/core/shared/configuration-property.model';
5960

6061
@Component({
6162
selector: 'ds-base-feedback-form',
@@ -120,6 +121,17 @@ export class FeedbackFormComponent extends GoogleRecaptchaBaseComponent implemen
120121
@Optional() public orejimeService: OrejimeService,
121122
) {
122123
super(googleRecaptchaService, cookieService, notificationsService, translate);
124+
125+
this.subscriptions.push(
126+
this.configService.findByPropertyName('feedback.verification.enabled').pipe(
127+
getFirstSucceededRemoteDataPayload(),
128+
map((res: ConfigurationProperty) => res?.values[0].toLowerCase() === 'true'),
129+
).subscribe((res: boolean) => {
130+
this.submissionVerification = res;
131+
if (res) {
132+
this.googleRecaptchaService.loadRecaptchaProperties().subscribe();
133+
}
134+
}));
123135
}
124136

125137
/**

src/app/register-email-form/register-email-form.component.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ import { ConfigurationDataService } from '../core/data/configuration-data.servic
3939
import { EpersonRegistrationService } from '../core/data/eperson-registration.service';
4040
import { RemoteData } from '../core/data/remote-data';
4141
import {
42-
CAPTCHA_NAME,
42+
CAPTCHA_FEEDBACK_NAME,
4343
GoogleRecaptchaService,
4444
} from '../core/google-recaptcha/google-recaptcha.service';
4545
import { CookieService } from '../core/services/cookie.service';
@@ -251,7 +251,7 @@ export class RegisterEmailFormComponent implements OnDestroy, OnInit {
251251
*/
252252
isRecaptchaCookieAccepted(): boolean {
253253
const orejimeAnonymousCookie = this.cookieService.get('orejime-anonymous');
254-
return isNotEmpty(orejimeAnonymousCookie) ? orejimeAnonymousCookie[CAPTCHA_NAME] : false;
254+
return isNotEmpty(orejimeAnonymousCookie) ? orejimeAnonymousCookie[CAPTCHA_FEEDBACK_NAME] : false;
255255
}
256256

257257
/**

src/app/shared/cookies/browser-orejime.service.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import { AuthService } from '../../core/auth/auth.service';
2929
import { ConfigurationDataService } from '../../core/data/configuration-data.service';
3030
import { EPersonDataService } from '../../core/eperson/eperson-data.service';
3131
import { EPerson } from '../../core/eperson/models/eperson.model';
32-
import { CAPTCHA_NAME } from '../../core/google-recaptcha/google-recaptcha.service';
32+
import { CAPTCHA_FEEDBACK_NAME } from '../../core/google-recaptcha/google-recaptcha.service';
3333
import { CookieService } from '../../core/services/cookie.service';
3434
import {
3535
NativeWindowRef,
@@ -212,7 +212,7 @@ export class BrowserOrejimeService extends OrejimeService {
212212
appsToHideArray.push(this.GOOGLE_ANALYTICS_SERVICE_NAME);
213213
}
214214
if (hideRegistrationVerification && hideFeedbackVerification) {
215-
appsToHideArray.push(CAPTCHA_NAME);
215+
appsToHideArray.push(CAPTCHA_FEEDBACK_NAME);
216216
}
217217
if (hideMatomo) {
218218
appsToHideArray.push(MATOMO_OREJIME_KEY);

src/app/shared/cookies/orejime-configuration.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ import {
66
import { TOKENITEM } from '../../core/auth/models/auth-token-info.model';
77
import {
88
CAPTCHA_COOKIE,
9-
CAPTCHA_NAME,
9+
CAPTCHA_FEEDBACK_NAME,
10+
CAPTCHA_REGISTRATION_NAME,
1011
} from '../../core/google-recaptcha/google-recaptcha.service';
1112
import { LANG_COOKIE } from '../../core/locale/locale.service';
1213
import { NativeWindowRef } from '../../core/services/window.service';
@@ -212,7 +213,7 @@ export function getOrejimeConfiguration(_window: NativeWindowRef): any {
212213
onlyOnce: true,
213214
},
214215
{
215-
name: CAPTCHA_NAME,
216+
name: CAPTCHA_REGISTRATION_NAME,
216217
purposes: ['registration-password-recovery'],
217218
required: false,
218219
cookies: [
@@ -223,6 +224,18 @@ export function getOrejimeConfiguration(_window: NativeWindowRef): any {
223224
},
224225
onlyOnce: true,
225226
},
227+
{
228+
name: CAPTCHA_FEEDBACK_NAME,
229+
purposes: ['feedback-form-submission'],
230+
required: false,
231+
cookies: [
232+
CAPTCHA_COOKIE,
233+
],
234+
callback: (consent: boolean) => {
235+
_window?.nativeWindow.refreshCaptchaScript?.call();
236+
},
237+
onlyOnce: true,
238+
},
226239
{
227240
name: 'accessibility',
228241
purposes: ['functional'],

0 commit comments

Comments
 (0)