if (!tokenInfo.getIssuedTo().equals(Constants.GOOGLE_PROJECT_CLIENT_ID)) {
throw new Exception();
}
// ユーザー情報の取得
UserModel userModel = UserService.getOrNull(tokenInfo.getUserId());
if(userModel == null) {
// ユーザー制限チェック
List<UserModel> userList = UserService.getAllUserList();
if(userList.size() > 1000) {
throw new UserMaxLimitException();
}
// ---------------------------------------------------------
// ユーザー登録
// ---------------------------------------------------------
// Google Plus APIを使ってユーザー情報を取得する
Plus plus = new Plus.Builder(TRANSPORT, JSON_FACTORY, credential)
.setApplicationName(Constants.GOOGLE_APPLICATION_NAME)
.build();
Person person = plus.people().get("me").execute();
userModel = UserService.put(
tokenInfo.getUserId(),
tokenInfo.getEmail(),
person.getUrl(),
person.getDisplayName(),
person.getImage(),
person.getTagline(),
person.getBraggingRights(),
person.getAboutMe(),
person.getCover(),
credential.getAccessToken(),
credential.getRefreshToken()
);
// URLS登録
if(person.getUrls() != null && person.getUrls().size() > 0) {
List<Urls> urlsList = person.getUrls();
for(Urls urls: urlsList) {
UserUrlsService.put(userModel, urls.getValue(), urls.getType(), urls.getLabel());
}
}
// ユーザー数のキャッシュをクリア
UserService.clearUserCountAndListMemcache();
}else {
// ---------------------------------------------------------
// ユーザーログイン
// ---------------------------------------------------------
// ログインユーザーのアクセストークンとリフレッシュトークンを更新
userModel.setAccessToken(credential.getAccessToken());
if(credential.getRefreshToken() != null) {
userModel.setRefreshToken(credential.getRefreshToken());
}
UserService.put(userModel);
}
// ユーザー情報をセッションに入れる