aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Vitaly Takmazov2020-02-27 14:00:13 +0300
committerGravatar Vitaly Takmazov2020-02-27 14:01:01 +0300
commit6d177fbb3e57409b223e835eabc79009a89a1031 (patch)
tree5144cf89e6095c8ec693a771dd284fc3cce11d6e /src
parent8f3a101df251de5965ca28086974c2c10f60c6d9 (diff)
API: handle existing Google user flow
Diffstat (limited to 'src')
-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.java25
-rw-r--r--src/main/java/com/juick/service/UserService.java4
-rw-r--r--src/main/java/com/juick/service/UserServiceImpl.java6
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());
}