Skip to content

Commit 33c2a05

Browse files
committed
feat(ui): fix PR
1 parent 56ccf36 commit 33c2a05

File tree

11 files changed

+84
-102
lines changed

11 files changed

+84
-102
lines changed

chutney/server/src/main/java/com/chutneytesting/security/api/SsoOpenIdConnectConfigDto.java

Lines changed: 4 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -9,33 +9,8 @@
99

1010
import java.util.Map;
1111

12-
public class SsoOpenIdConnectConfigDto {
13-
public final String issuer;
14-
public final String clientId;
15-
public final String clientSecret;
16-
public final String responseType;
17-
public final String scope;
18-
public final String redirectBaseUrl;
19-
public final String ssoProviderName;
20-
public final Boolean oidc;
21-
public final String uriRequireHeader;
22-
public final Map<String, String> headers;
23-
public final String ssoProviderImageUrl;
24-
public final Map<String, String> additionalQueryParams;
25-
26-
27-
public SsoOpenIdConnectConfigDto(String issuer, String clientId, String clientSecret, String responseType, String scope, String redirectBaseUrl, String ssoProviderName, Boolean oidc, String uriRequireHeader, Map<String, String> headers, String ssoProviderImageUrl, Map<String, String> additionalQueryParams) {
28-
this.issuer = issuer;
29-
this.clientId = clientId;
30-
this.clientSecret = clientSecret;
31-
this.responseType = responseType;
32-
this.scope = scope;
33-
this.redirectBaseUrl = redirectBaseUrl;
34-
this.ssoProviderName = ssoProviderName;
35-
this.oidc = oidc;
36-
this.uriRequireHeader = uriRequireHeader;
37-
this.headers = headers;
38-
this.ssoProviderImageUrl = ssoProviderImageUrl;
39-
this.additionalQueryParams = additionalQueryParams;
40-
}
12+
public record SsoOpenIdConnectConfigDto(String issuer, String clientId, String clientSecret, String responseType,
13+
String scope, String redirectBaseUrl, String ssoProviderName, Boolean oidc,
14+
String uriRequireHeader, Map<String, String> headers,
15+
String ssoProviderImageUrl, Map<String, String> additionalQueryParams) {
4116
}

chutney/server/src/main/java/com/chutneytesting/security/api/SsoOpenIdConnectController.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,10 @@
88
package com.chutneytesting.security.api;
99

1010
import static com.chutneytesting.security.api.SsoOpenIdConnectMapper.toDto;
11-
import static java.util.Optional.ofNullable;
1211

1312
import com.chutneytesting.security.infra.sso.SsoOpenIdConnectConfigProperties;
14-
import java.util.NoSuchElementException;
15-
import org.springframework.context.annotation.Profile;
1613
import org.springframework.http.MediaType;
14+
import org.springframework.lang.Nullable;
1715
import org.springframework.web.bind.annotation.CrossOrigin;
1816
import org.springframework.web.bind.annotation.GetMapping;
1917
import org.springframework.web.bind.annotation.RequestMapping;
@@ -22,20 +20,18 @@
2220
@RestController
2321
@RequestMapping(SsoOpenIdConnectController.BASE_URL)
2422
@CrossOrigin(origins = "*")
25-
@Profile("sso-auth")
2623
public class SsoOpenIdConnectController {
2724

2825
public static final String BASE_URL = "/api/v1/sso";
2926

3027
private final SsoOpenIdConnectConfigProperties ssoOpenIdConnectConfigProperties;
3128

32-
SsoOpenIdConnectController(SsoOpenIdConnectConfigProperties ssoOpenIdConnectConfigProperties) {
29+
SsoOpenIdConnectController(@Nullable SsoOpenIdConnectConfigProperties ssoOpenIdConnectConfigProperties) {
3330
this.ssoOpenIdConnectConfigProperties = ssoOpenIdConnectConfigProperties;
3431
}
3532

3633
@GetMapping(path = "/config", produces = MediaType.APPLICATION_JSON_VALUE)
3734
public SsoOpenIdConnectConfigDto getSsoOpenIdConnectConfig() {
38-
return ofNullable(toDto(ssoOpenIdConnectConfigProperties))
39-
.orElseThrow(NoSuchElementException::new);
35+
return toDto(ssoOpenIdConnectConfigProperties);
4036
}
4137
}

chutney/server/src/main/java/com/chutneytesting/security/api/SsoOpenIdConnectMapper.java

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,26 +7,26 @@
77

88
package com.chutneytesting.security.api;
99

10+
import static java.util.Optional.ofNullable;
11+
1012
import com.chutneytesting.security.infra.sso.SsoOpenIdConnectConfigProperties;
1113

1214
public class SsoOpenIdConnectMapper {
1315
public static SsoOpenIdConnectConfigDto toDto(SsoOpenIdConnectConfigProperties ssoOpenIdConnectConfig) {
14-
if (ssoOpenIdConnectConfig == null) {
15-
return null;
16-
}
17-
return new SsoOpenIdConnectConfigDto(
18-
ssoOpenIdConnectConfig.issuer,
19-
ssoOpenIdConnectConfig.clientId,
20-
ssoOpenIdConnectConfig.clientSecret,
21-
ssoOpenIdConnectConfig.responseType,
22-
ssoOpenIdConnectConfig.scope,
23-
ssoOpenIdConnectConfig.redirectBaseUrl,
24-
ssoOpenIdConnectConfig.ssoProviderName,
25-
ssoOpenIdConnectConfig.oidc,
26-
ssoOpenIdConnectConfig.uriRequireHeader,
27-
ssoOpenIdConnectConfig.headers,
28-
ssoOpenIdConnectConfig.ssoProviderImageUrl,
29-
ssoOpenIdConnectConfig.additionalQueryParams
30-
);
16+
return ofNullable(ssoOpenIdConnectConfig)
17+
.map(config -> new SsoOpenIdConnectConfigDto(
18+
ssoOpenIdConnectConfig.issuer,
19+
ssoOpenIdConnectConfig.clientId,
20+
ssoOpenIdConnectConfig.clientSecret,
21+
ssoOpenIdConnectConfig.responseType,
22+
ssoOpenIdConnectConfig.scope,
23+
ssoOpenIdConnectConfig.redirectBaseUrl,
24+
ssoOpenIdConnectConfig.ssoProviderName,
25+
ssoOpenIdConnectConfig.oidc,
26+
ssoOpenIdConnectConfig.uriRequireHeader,
27+
ssoOpenIdConnectConfig.headers,
28+
ssoOpenIdConnectConfig.ssoProviderImageUrl,
29+
ssoOpenIdConnectConfig.additionalQueryParams
30+
)).orElse(null);
3131
}
3232
}

chutney/server/src/main/java/com/chutneytesting/security/infra/sso/OAuth2SsoUserService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public OAuth2SsoUserService(AuthenticationService authenticationService, @Nullab
3434

3535
@Override
3636
public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException {
37-
org.springframework.security.oauth2.client.userinfo.DefaultOAuth2UserService delegate = new DefaultOAuth2UserService();
37+
DefaultOAuth2UserService delegate = new DefaultOAuth2UserService();
3838
if (restOperations != null) {
3939
delegate.setRestOperations(restOperations);
4040
}

chutney/ui/src/app/core/components/login/login.component.html

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,15 @@ <h3><strong>Login</strong></h3>
4646
<button type="submit" class="btn btn-primary btn-lg w-100">Login</button>
4747
</div>
4848
</form>
49-
@if (getSsoProviderName()) {
49+
@if (displaySsoButton()) {
5050
<div class="text-center text-lg-start mt-2 pt-2 d-flex justify-content-center">
51-
<button class="btn btn-secondary btn-lg w-100" (click)="connectSso()">
52-
<img src="{{getSsoProviderImageUrl()}}" class="ssoImage" alt="sso image"/>
53-
<span class="ms-2">{{getSsoProviderName()}}</span>
51+
<button class="btn btn-lg" [ngClass]="getSsoProviderName() ? 'btn-secondary' : ''" (click)="connectSso()">
52+
@if (getSsoProviderImageUrl()) {
53+
<img src="{{getSsoProviderImageUrl()}}" class="ssoImage" alt="sso"/>
54+
}
55+
@if (getSsoProviderName()) {
56+
<span class="ms-2">{{getSsoProviderName()}}</span>
57+
}
5458
</button>
5559
</div>
5660
}

chutney/ui/src/app/core/components/login/login.component.scss

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,5 +62,8 @@
6262
}
6363

6464
.ssoImage {
65-
width: 40px
65+
height: 4rem;
66+
border-radius: 10px;
67+
border: solid 1px #d3d7d7;
68+
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.2);
6669
}

chutney/ui/src/app/core/components/login/login.component.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,10 @@ export class LoginComponent implements OnDestroy, OnInit {
8989
return this.ssoService.getSsoProviderName()
9090
}
9191

92+
displaySsoButton() {
93+
return this.ssoService.getEnableSso
94+
}
95+
9296
getSsoProviderImageUrl() {
9397
return this.ssoService.getSsoProviderImageUrl()
9498
}

chutney/ui/src/app/core/core.module.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import { CommonModule } from '@angular/common';
1515
import { TranslateModule } from '@ngx-translate/core';
1616
import { ParentComponent } from './components/parent/parent.component';
1717
import { DROPDOWN_SETTINGS, DropdownSettings } from '@core/model/dropdown-settings';
18-
import { OAuth2ContentTypeInterceptor } from '@core/services/sso.service';
18+
import { OAuth2ContentTypeInterceptor } from '@core/services/oauth2-content-type-interceptor.service';
1919

2020
@NgModule({
2121
declarations: [

chutney/ui/src/app/core/services/login.service.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -160,10 +160,6 @@ export class LoginService {
160160
return false;
161161
}
162162

163-
isLoginUrl(url: string): boolean {
164-
return url.includes(this.loginUrl);
165-
}
166-
167163
currentUser(skipInterceptor: boolean = false, headers: HttpHeaders | {
168164
[header: string]: string | string[];
169165
} = {}): Observable<User> {
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/*
2+
* SPDX-FileCopyrightText: 2017-2024 Enedis
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*
6+
*/
7+
8+
import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';
9+
import { Observable } from 'rxjs';
10+
import { Injectable } from '@angular/core';
11+
import { SsoService } from '@core/services/sso.service';
12+
13+
@Injectable()
14+
export class OAuth2ContentTypeInterceptor implements HttpInterceptor {
15+
16+
constructor(private ssoService: SsoService) {}
17+
18+
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
19+
const isTokenEndpoint = this.ssoService.headers && req.url.startsWith(this.ssoService.tokenEndpoint);
20+
if (isTokenEndpoint) {
21+
const modifiedReq = req.clone({
22+
setHeaders: this.ssoService.headers
23+
});
24+
return next.handle(modifiedReq);
25+
}
26+
return next.handle(req);
27+
}
28+
}

0 commit comments

Comments
 (0)