Skip to content

Commit 6352c8f

Browse files
committed
Discord authorization works!
1 parent ac19761 commit 6352c8f

4 files changed

Lines changed: 54 additions & 15 deletions

File tree

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package net.developerden.backend.controller;
2+
3+
import net.developerden.backend.security.DiscordUser;
4+
import org.springframework.security.core.annotation.AuthenticationPrincipal;
5+
import org.springframework.security.oauth2.core.user.OAuth2User;
6+
import org.springframework.web.bind.annotation.GetMapping;
7+
import org.springframework.web.bind.annotation.RestController;
8+
9+
@RestController
10+
public class InfoController {
11+
12+
@GetMapping("/user")
13+
public String user(@AuthenticationPrincipal DiscordUser principal) {
14+
return "Hello, " + principal.getName();
15+
}
16+
}
Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,32 @@
11
package net.developerden.backend.security;
22

3-
public record DiscordUser(String id, String username, String discriminator, String locale) {
3+
import org.springframework.security.core.GrantedAuthority;
4+
import org.springframework.security.oauth2.core.user.OAuth2User;
5+
6+
import java.util.Collection;
7+
import java.util.Map;
8+
9+
public record DiscordUser(String id, String username, String discriminator, String locale) implements OAuth2User {
10+
private String fullName() {
11+
return username + "#" + discriminator;
12+
}
13+
14+
@Override
15+
public Map<String, Object> getAttributes() {
16+
return Map.of(
17+
"id", id,
18+
"username", fullName(),
19+
"locale", locale
20+
);
21+
}
22+
23+
@Override
24+
public Collection<? extends GrantedAuthority> getAuthorities() {
25+
return null;
26+
}
27+
28+
@Override
29+
public String getName() {
30+
return fullName();
31+
}
432
}

src/main/java/net/developerden/backend/security/DiscordUserService.java

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,33 +7,31 @@
77
import org.springframework.security.oauth2.client.userinfo.OAuth2UserRequest;
88
import org.springframework.security.oauth2.client.userinfo.OAuth2UserService;
99
import org.springframework.security.oauth2.core.OAuth2AuthenticationException;
10-
import org.springframework.security.oauth2.core.user.DefaultOAuth2User;
1110
import org.springframework.security.oauth2.core.user.OAuth2User;
1211
import org.springframework.web.client.RestTemplate;
1312

1413
import java.util.List;
15-
import java.util.Map;
1614

1715
public class DiscordUserService implements OAuth2UserService<OAuth2UserRequest, OAuth2User> {
1816
private static final String DISCORD_USERINFO_URI = "https://discord.com/api/users/@me";
1917

2018

2119
@Override
2220
public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException {
23-
var headers = new HttpHeaders();
24-
headers.add("Authorization", "Bearer: " + userRequest.getAccessToken().getTokenValue());
21+
final var headers = new HttpHeaders();
22+
23+
final String authorization = userRequest.getAccessToken().getTokenType().getValue() + " " + userRequest.getAccessToken().getTokenValue();
24+
headers.add("Authorization", authorization);
25+
2526
headers.setAccept(List.of(MediaType.APPLICATION_JSON));
26-
var entity = new HttpEntity<>(headers);
2727

28-
var user = new RestTemplate()
28+
final var entity = new HttpEntity<>(headers);
29+
30+
final var user = new RestTemplate()
2931
.exchange(DISCORD_USERINFO_URI, HttpMethod.GET,
3032
entity, DiscordUser.class)
3133
.getBody();
3234

33-
return new DefaultOAuth2User(
34-
null,
35-
Map.of("username", user.username()),
36-
"username"
37-
);
35+
return user;
3836
}
3937
}

src/main/resources/static/index.html

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,6 @@
77
<meta name="description" content=""/>
88
<meta name="viewport" content="width=device-width"/>
99
<base href="/"/>
10-
<link rel="stylesheet" type="text/css" href="/webjars/bootstrap/css/bootstrap.min.css"/>
11-
<script type="text/javascript" src="/webjars/jquery/jquery.min.js"></script>
12-
<script type="text/javascript" src="/webjars/bootstrap/js/bootstrap.min.js"></script>
1310
</head>
1411
<body>
1512
<h1>Demo</h1>

0 commit comments

Comments
 (0)