thêm lưu token
This commit is contained in:
parent
dca934afd8
commit
d5b7fdf853
|
|
@ -0,0 +1,14 @@
|
||||||
|
package com.vega.hrm.dto;
|
||||||
|
|
||||||
|
import com.google.api.client.auth.oauth2.TokenResponse;
|
||||||
|
import com.google.api.client.util.Key;
|
||||||
|
|
||||||
|
public class CustomTokenResponse extends TokenResponse {
|
||||||
|
|
||||||
|
@Key("refresh_token_expires_in")
|
||||||
|
private Long refreshTokenExpiresIn;
|
||||||
|
|
||||||
|
public Long getRefreshTokenExpiresIn() {
|
||||||
|
return refreshTokenExpiresIn;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -15,12 +15,17 @@ import com.google.api.client.json.JsonFactory;
|
||||||
import com.google.api.client.json.jackson2.JacksonFactory;
|
import com.google.api.client.json.jackson2.JacksonFactory;
|
||||||
import com.google.api.services.oauth2.Oauth2;
|
import com.google.api.services.oauth2.Oauth2;
|
||||||
import com.vega.hrm.core.component.TokenStore;
|
import com.vega.hrm.core.component.TokenStore;
|
||||||
|
import com.vega.hrm.core.entities.UserGoogleToken;
|
||||||
import com.vega.hrm.core.models.responses.BaseResponse;
|
import com.vega.hrm.core.models.responses.BaseResponse;
|
||||||
import com.vega.hrm.core.dto.GoogleOAuthConfig;
|
import com.vega.hrm.core.dto.GoogleOAuthConfig;
|
||||||
import com.google.api.services.oauth2.model.Userinfo;
|
import com.google.api.services.oauth2.model.Userinfo;
|
||||||
|
import com.vega.hrm.core.repositories.UserGoogleTokenRepository;
|
||||||
|
import com.vega.hrm.dto.CustomTokenResponse;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.security.GeneralSecurityException;
|
import java.security.GeneralSecurityException;
|
||||||
|
import java.time.Instant;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
import java.util.UUID;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
@ -30,7 +35,7 @@ import org.springframework.stereotype.Service;
|
||||||
public class GoogleService {
|
public class GoogleService {
|
||||||
private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
|
private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
|
||||||
private final TokenStore tokenStore;
|
private final TokenStore tokenStore;
|
||||||
|
private final UserGoogleTokenRepository userGoogleTokenRepository;
|
||||||
public BaseResponse<String> getGoogleAuthUrl() {
|
public BaseResponse<String> getGoogleAuthUrl() {
|
||||||
var googleOAuthConfig = GoogleOAuthConfig.builder().build();
|
var googleOAuthConfig = GoogleOAuthConfig.builder().build();
|
||||||
NetHttpTransport httpTransport = null;
|
NetHttpTransport httpTransport = null;
|
||||||
|
|
@ -72,9 +77,9 @@ public class GoogleService {
|
||||||
.setAccessType("offline")
|
.setAccessType("offline")
|
||||||
.setApprovalPrompt("force")
|
.setApprovalPrompt("force")
|
||||||
.build();
|
.build();
|
||||||
TokenResponse tokenResponse = null;
|
CustomTokenResponse tokenResponse = null;
|
||||||
try {
|
try {
|
||||||
tokenResponse = flow.newTokenRequest(code).setRedirectUri(googleOAuthConfig.redirectUri).execute();
|
tokenResponse = (CustomTokenResponse) flow.newTokenRequest(code).setRedirectUri(googleOAuthConfig.redirectUri).execute();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
return BaseResponse.invalid(e.getMessage());
|
return BaseResponse.invalid(e.getMessage());
|
||||||
}
|
}
|
||||||
|
|
@ -92,7 +97,25 @@ public class GoogleService {
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
return BaseResponse.invalid(e.getMessage());
|
return BaseResponse.invalid(e.getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
String email = userInfo.getEmail();
|
String email = userInfo.getEmail();
|
||||||
|
var userGoogleToken = userGoogleTokenRepository.findUserGoogleTokenByEmail(email);
|
||||||
|
|
||||||
|
if (userGoogleToken == null) {
|
||||||
|
userGoogleToken = new UserGoogleToken();
|
||||||
|
userGoogleToken.setId(UUID.randomUUID());
|
||||||
|
userGoogleToken.setEmail(email);
|
||||||
|
userGoogleToken.setAccessToken(tokenResponse.getAccessToken());
|
||||||
|
userGoogleToken.setRefreshToken(tokenResponse.getRefreshToken());
|
||||||
|
userGoogleToken.setScope(tokenResponse.getScope());
|
||||||
|
userGoogleToken.setExpiresIn(tokenResponse.getExpiresInSeconds());
|
||||||
|
userGoogleToken.setRefreshTokenExpiresIn(tokenResponse.getRefreshTokenExpiresIn());
|
||||||
|
userGoogleToken.setCreatedAt(Instant.now().plusSeconds(tokenResponse.getExpiresInSeconds()));
|
||||||
|
userGoogleToken.setRefreshTokenExpiresAt(Instant.now().plusSeconds(tokenResponse.getRefreshTokenExpiresIn()));
|
||||||
|
userGoogleToken.setCreatedAt(Instant.now());
|
||||||
|
userGoogleTokenRepository.save(userGoogleToken);
|
||||||
|
}
|
||||||
|
|
||||||
tokenStore.storeToken(email, tokenResponse);
|
tokenStore.storeToken(email, tokenResponse);
|
||||||
return BaseResponse.success("00",true);
|
return BaseResponse.success("00",true);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,73 @@
|
||||||
|
package com.vega.hrm.core.entities;
|
||||||
|
|
||||||
|
import jakarta.persistence.Column;
|
||||||
|
import jakarta.persistence.Entity;
|
||||||
|
import jakarta.persistence.Id;
|
||||||
|
import jakarta.persistence.Table;
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
import jakarta.validation.constraints.Size;
|
||||||
|
import java.time.Instant;
|
||||||
|
import java.util.UUID;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
import org.hibernate.annotations.ColumnDefault;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@Entity
|
||||||
|
@Table(name = "user_google_tokens")
|
||||||
|
public class UserGoogleToken {
|
||||||
|
|
||||||
|
@Id
|
||||||
|
@ColumnDefault("gen_random_uuid()")
|
||||||
|
@Column(name = "id", nullable = false)
|
||||||
|
private UUID id;
|
||||||
|
|
||||||
|
@Size(max = 255)
|
||||||
|
@Column(name = "email")
|
||||||
|
private String email;
|
||||||
|
|
||||||
|
@Size(max = 2048)
|
||||||
|
@NotNull
|
||||||
|
@Column(name = "access_token", nullable = false, length = 2048)
|
||||||
|
private String accessToken;
|
||||||
|
|
||||||
|
@Size(max = 2048)
|
||||||
|
@NotNull
|
||||||
|
@Column(name = "refresh_token", nullable = false, length = 2048)
|
||||||
|
private String refreshToken;
|
||||||
|
|
||||||
|
@Column(name = "expires_in")
|
||||||
|
private Long expiresIn;
|
||||||
|
|
||||||
|
@Column(name = "refresh_token_expires_in")
|
||||||
|
private Long refreshTokenExpiresIn;
|
||||||
|
|
||||||
|
@Size(max = 2500)
|
||||||
|
@Column(name = "scope", length = 2500)
|
||||||
|
private String scope;
|
||||||
|
|
||||||
|
@Size(max = 50)
|
||||||
|
@Column(name = "token_type", length = 50)
|
||||||
|
private String tokenType;
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Column(name = "expires_at", nullable = false)
|
||||||
|
private Instant expiresAt;
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Column(name = "refresh_token_expires_at", nullable = false)
|
||||||
|
private Instant refreshTokenExpiresAt;
|
||||||
|
|
||||||
|
@ColumnDefault("CURRENT_TIMESTAMP")
|
||||||
|
@Column(name = "created_at")
|
||||||
|
private Instant createdAt;
|
||||||
|
|
||||||
|
@ColumnDefault("CURRENT_TIMESTAMP")
|
||||||
|
@Column(name = "updated_at")
|
||||||
|
private Instant updatedAt;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
package com.vega.hrm.core.repositories;
|
||||||
|
|
||||||
|
import com.vega.hrm.core.entities.BoUser;
|
||||||
|
import com.vega.hrm.core.entities.UserGoogleToken;
|
||||||
|
import java.util.UUID;
|
||||||
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
@Repository
|
||||||
|
public interface UserGoogleTokenRepository extends JpaRepository<UserGoogleToken, UUID> {
|
||||||
|
UserGoogleToken findUserGoogleTokenByEmail(String user);
|
||||||
|
}
|
||||||
4
vega-hrm-core/src/main/resources/application.properties
Normal file
4
vega-hrm-core/src/main/resources/application.properties
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
google.client.clientId = 719251949807-0jqbsmlh0a116cm8vm47oknmc5vpi19q.apps.googleusercontent.com
|
||||||
|
google.client.clientSecret = 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
|
||||||
|
google.redirect.uri=https://localhost:8443/api/auth/google/callback
|
||||||
|
|
||||||
3
vega-hrm-core/src/main/resources/youtube.properties
Normal file
3
vega-hrm-core/src/main/resources/youtube.properties
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
# Replace this with an API key available at
|
||||||
|
# https://console.developers.google.com/project/_/apiui/credential
|
||||||
|
youtube.apikey=AIzaSyCH_ERSntAWkfZF7XFf877GTQKkE982cKk
|
||||||
Loading…
Reference in New Issue
Block a user