diff options
author | Vitaly Takmazov | 2020-02-27 14:00:13 +0300 |
---|---|---|
committer | Vitaly Takmazov | 2020-02-27 14:01:01 +0300 |
commit | 6d177fbb3e57409b223e835eabc79009a89a1031 (patch) | |
tree | 5144cf89e6095c8ec693a771dd284fc3cce11d6e /src/main/java/com | |
parent | 8f3a101df251de5965ca28086974c2c10f60c6d9 (diff) |
API: handle existing Google user flow
Diffstat (limited to 'src/main/java/com')
-rw-r--r-- | src/main/java/com/juick/model/AuthResponse.java (renamed from src/main/java/com/juick/model/Auth.java) | 12 | ||||
-rw-r--r-- | src/main/java/com/juick/server/api/ApiSocialLogin.java | 25 | ||||
-rw-r--r-- | src/main/java/com/juick/service/UserService.java | 4 | ||||
-rw-r--r-- | src/main/java/com/juick/service/UserServiceImpl.java | 6 |
4 files changed, 25 insertions, 22 deletions
diff --git a/src/main/java/com/juick/model/Auth.java b/src/main/java/com/juick/model/AuthResponse.java index 45185ace..b229c7ac 100644 --- a/src/main/java/com/juick/model/Auth.java +++ b/src/main/java/com/juick/model/AuthResponse.java @@ -17,14 +17,18 @@ package com.juick.model; +import com.juick.server.api.Users; + /** * Created by vt on 09/02/16. */ -public class Auth { +public class AuthResponse { + private final Users.SecureUser user; private final String account; private final String authCode; - public Auth(String account, String authCode) { + public AuthResponse(Users.SecureUser user, String account, String authCode) { + this.user = user; this.account = account; this.authCode = authCode; } @@ -36,4 +40,8 @@ public class Auth { public String getAuthCode() { return authCode; } + + public Users.SecureUser getUser() { + return user; + } }
\ No newline at end of file diff --git a/src/main/java/com/juick/server/api/ApiSocialLogin.java b/src/main/java/com/juick/server/api/ApiSocialLogin.java index 8ca7d6d8..6a6b4293 100644 --- a/src/main/java/com/juick/server/api/ApiSocialLogin.java +++ b/src/main/java/com/juick/server/api/ApiSocialLogin.java @@ -32,7 +32,7 @@ import com.google.api.client.http.HttpTransport; import com.google.api.client.http.javanet.NetHttpTransport; import com.google.api.client.json.JsonFactory; import com.google.api.client.json.jackson2.JacksonFactory; -import com.juick.model.Auth; +import com.juick.model.AuthResponse; import com.juick.model.facebook.User; import com.juick.server.util.HttpBadRequestException; import com.juick.service.CrosspostService; @@ -40,20 +40,11 @@ import com.juick.service.EmailService; import com.juick.service.UserService; import com.juick.model.vk.UsersResponse; import com.nimbusds.jose.JOSEException; -import com.nimbusds.jose.JWSAlgorithm; -import com.nimbusds.jose.jwk.source.JWKSource; -import com.nimbusds.jose.jwk.source.RemoteJWKSet; import com.nimbusds.jose.proc.BadJOSEException; -import com.nimbusds.jose.proc.JWSKeySelector; -import com.nimbusds.jose.proc.JWSVerificationKeySelector; -import com.nimbusds.jose.proc.SecurityContext; -import com.nimbusds.jwt.proc.ConfigurableJWTProcessor; -import com.nimbusds.jwt.proc.DefaultJWTClaimsVerifier; -import com.nimbusds.jwt.proc.DefaultJWTProcessor; -import net.minidev.json.JSONObject; import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; +import org.checkerframework.checker.units.qual.A; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; @@ -69,7 +60,6 @@ import org.springframework.web.util.UriComponentsBuilder; import javax.annotation.PostConstruct; import javax.inject.Inject; import java.io.IOException; -import java.net.URL; import java.security.GeneralSecurityException; import java.text.ParseException; import java.util.Collections; @@ -120,6 +110,8 @@ public class ApiSocialLogin { private EmailService emailService; @Inject private AppleClientSecretGenerator clientSecretGenerator; + @Inject + private Users users; private final HttpTransport transport = new NetHttpTransport(); private final JsonFactory jsonFactory = new JacksonFactory(); @@ -254,17 +246,20 @@ public class ApiSocialLogin { } @ResponseBody @PostMapping("/api/_google") - public ResponseEntity<Auth> googleSignIn(@RequestParam(name = "idToken") String idTokenString) + public ResponseEntity<AuthResponse> googleSignIn(@RequestParam(name = "idToken") String idTokenString) throws GeneralSecurityException, IOException { logger.info("Token: {}", idTokenString); logger.info("Client: {}", googleClientId); GoogleIdToken idToken = verifier.verify(idTokenString); if (idToken != null) { String email = idToken.getPayload().getEmail(); - if (userService.getUserByEmail(email).isAnonymous()) { + com.juick.User visitor = userService.getUserByEmail(email); + if (visitor.isAnonymous()) { String verificationCode = RandomStringUtils.randomAlphanumeric(8).toUpperCase(); emailService.addVerificationCode(null, email, verificationCode); - return ResponseEntity.ok(new Auth(email, verificationCode)); + return ResponseEntity.ok(new AuthResponse(null, email, verificationCode)); + } else { + return ResponseEntity.ok(new AuthResponse(users.getMe(visitor), null, null)); } } return ResponseEntity.status(HttpStatus.FORBIDDEN).body(null); diff --git a/src/main/java/com/juick/service/UserService.java b/src/main/java/com/juick/service/UserService.java index cc834173..71b38594 100644 --- a/src/main/java/com/juick/service/UserService.java +++ b/src/main/java/com/juick/service/UserService.java @@ -19,7 +19,7 @@ package com.juick.service; import com.juick.Message; import com.juick.User; -import com.juick.model.Auth; +import com.juick.model.AuthResponse; import javax.annotation.Nonnull; import java.util.Collection; @@ -113,7 +113,7 @@ public interface UserService { List<String> getAllJIDs(User user); - List<Auth> getAuthCodes(User user); + List<AuthResponse> getAuthCodes(User user); List<String> getEmails(User user); diff --git a/src/main/java/com/juick/service/UserServiceImpl.java b/src/main/java/com/juick/service/UserServiceImpl.java index dc35f361..9f01b4db 100644 --- a/src/main/java/com/juick/service/UserServiceImpl.java +++ b/src/main/java/com/juick/service/UserServiceImpl.java @@ -20,7 +20,7 @@ package com.juick.service; import com.juick.Message; import com.juick.User; import com.juick.model.AnonymousUser; -import com.juick.model.Auth; +import com.juick.model.AuthResponse; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.StringUtils; @@ -630,10 +630,10 @@ public class UserServiceImpl extends BaseJdbcService implements UserService { @Transactional(readOnly = true) @Override - public List<Auth> getAuthCodes(final User user) { + public List<AuthResponse> getAuthCodes(final User user) { return getJdbcTemplate().query( "SELECT account,authcode FROM auth WHERE user_id=? AND protocol='xmpp'", - (rs, num) -> new Auth(rs.getString(1), rs.getString(2)), + (rs, num) -> new AuthResponse(null, rs.getString(1), rs.getString(2)), user.getUid()); } |