package sagan.team.support; import sagan.team.MemberProfile; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.social.github.api.GitHub; import org.springframework.social.github.api.GitHubUserProfile; import org.springframework.stereotype.Service; @Service public class SignInService { private static final String IS_MEMBER_URL = "https://api.github.com/teams/{team}/members/{user}"; private final TeamService teamService; private final String gitHubTeamId; @Autowired public SignInService(TeamService teamService, @Value("${github.team.id}") String gitHubTeamId) { this.teamService = teamService; this.gitHubTeamId = gitHubTeamId; } public MemberProfile getOrCreateMemberProfile(Long githubId, GitHub gitHub) { GitHubUserProfile remoteProfile = gitHub.userOperations().getUserProfile(); return teamService.createOrUpdateMemberProfile(githubId, remoteProfile.getUsername(), remoteProfile .getProfileImageUrl(), remoteProfile.getName()); } public boolean isSpringMember(String userId, GitHub gitHub) { ResponseEntity<Void> response = gitHub.restOperations().getForEntity(IS_MEMBER_URL, Void.class, gitHubTeamId, userId); return response.getStatusCode() == HttpStatus.NO_CONTENT; } }