• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

damienbod / angular-auth-oidc-client / 9308899843

30 May 2024 08:37PM CUT coverage: 92.928%. Remained the same
9308899843

Pull #1948

github

web-flow
Merge 9ccb2c964 into 33372edf1
Pull Request #1948: feat(core): adds angular 18 support

706 of 826 branches covered (85.47%)

Branch coverage included in aggregate %.

2566 of 2695 relevant lines covered (95.21%)

8.31 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

41.94
/projects/angular-auth-oidc-client/src/lib/iframe/refresh-session-iframe.service.ts
1
import { DOCUMENT } from '@angular/common';
2
import { Injectable, RendererFactory2, inject } from '@angular/core';
3
import { Observable } from 'rxjs';
4
import { switchMap } from 'rxjs/operators';
5
import { OpenIdConfiguration } from '../config/openid-configuration';
6
import { LoggerService } from '../logging/logger.service';
7
import { UrlService } from '../utils/url/url.service';
8
import { SilentRenewService } from './silent-renew.service';
9

10
@Injectable({ providedIn: 'root' })
11
export class RefreshSessionIframeService {
1✔
12
  private readonly renderer = inject(RendererFactory2).createRenderer(
3✔
13
    null,
14
    null
15
  );
16

17
  private readonly loggerService = inject(LoggerService);
3✔
18

19
  private readonly urlService = inject(UrlService);
3✔
20

21
  private readonly silentRenewService = inject(SilentRenewService);
3✔
22

23
  private readonly document = inject(DOCUMENT);
3✔
24

25
  refreshSessionWithIframe(
26
    config: OpenIdConfiguration,
27
    allConfigs: OpenIdConfiguration[],
28
    customParams?: { [key: string]: string | number | boolean }
29
  ): Observable<boolean> {
30
    this.loggerService.logDebug(
1✔
31
      config,
32
      'BEGIN refresh session Authorize Iframe renew'
33
    );
34

35
    return this.urlService
1✔
36
      .getRefreshSessionSilentRenewUrl(config, customParams)
37
      .pipe(
38
        switchMap((url) => {
39
          return this.sendAuthorizeRequestUsingSilentRenew(
1✔
40
            url,
41
            config,
42
            allConfigs
43
          );
44
        })
45
      );
46
  }
47

48
  private sendAuthorizeRequestUsingSilentRenew(
49
    url: string | null,
50
    config: OpenIdConfiguration,
51
    allConfigs: OpenIdConfiguration[]
52
  ): Observable<boolean> {
53
    const sessionIframe = this.silentRenewService.getOrCreateIframe(config);
×
54

55
    this.initSilentRenewRequest(config, allConfigs);
×
56
    this.loggerService.logDebug(
×
57
      config,
58
      `sendAuthorizeRequestUsingSilentRenew for URL: ${url}`
59
    );
60

61
    return new Observable((observer) => {
×
62
      const onLoadHandler = (): void => {
×
63
        sessionIframe.removeEventListener('load', onLoadHandler);
×
64
        this.loggerService.logDebug(
×
65
          config,
66
          'removed event listener from IFrame'
67
        );
68
        observer.next(true);
×
69
        observer.complete();
×
70
      };
71

72
      sessionIframe.addEventListener('load', onLoadHandler);
×
73
      sessionIframe.contentWindow?.location.replace(url ?? '');
×
74
    });
75
  }
76

77
  private initSilentRenewRequest(
78
    config: OpenIdConfiguration,
79
    allConfigs: OpenIdConfiguration[]
80
  ): void {
81
    const instanceId = Math.random();
1✔
82

83
    const initDestroyHandler = this.renderer.listen(
1✔
84
      'window',
85
      'oidc-silent-renew-init',
86
      (e: CustomEvent) => {
87
        if (e.detail !== instanceId) {
×
88
          initDestroyHandler();
×
89
          renewDestroyHandler();
×
90
        }
91
      }
92
    );
93
    const renewDestroyHandler = this.renderer.listen(
1✔
94
      'window',
95
      'oidc-silent-renew-message',
96
      (e) =>
97
        this.silentRenewService.silentRenewEventHandler(e, config, allConfigs)
×
98
    );
99

100
    this.document.defaultView?.dispatchEvent(
1✔
101
      new CustomEvent('oidc-silent-renew-init', {
102
        detail: instanceId,
103
      })
104
    );
105
  }
106
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc