package com.fastbee.iot.oauth.api; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.oauth2.common.util.OAuth2Utils; import org.springframework.security.oauth2.provider.AuthorizationRequest; import org.springframework.security.oauth2.provider.ClientDetails; import org.springframework.security.oauth2.provider.approval.Approval; import org.springframework.security.oauth2.provider.approval.ApprovalStore; import org.springframework.security.oauth2.provider.client.JdbcClientDetailsService; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.SessionAttributes; import java.security.Principal; import java.util.LinkedHashMap; import java.util.Map; /** * kerwincui */ @Controller @SessionAttributes("authorizationRequest") public class ConfirmAccessController { @Autowired private JdbcClientDetailsService clientDetailsService; @Autowired private ApprovalStore approvalStore; @RequestMapping("/oauth/confirm_access") public String getAccessConfirmation(Map model, Principal principal ) { AuthorizationRequest clientAuth = (AuthorizationRequest) model.remove("authorizationRequest"); ClientDetails client = clientDetailsService.loadClientByClientId(clientAuth.getClientId()); Map scopes = new LinkedHashMap(); for (String scope : clientAuth.getScope()) { scopes.put(OAuth2Utils.SCOPE_PREFIX + scope, "false"); } for (Approval approval : approvalStore.getApprovals(principal.getName(), client.getClientId())) { if (clientAuth.getScope().contains(approval.getScope())) { scopes.put(OAuth2Utils.SCOPE_PREFIX + approval.getScope(), approval.getStatus() == Approval.ApprovalStatus.APPROVED ? "true" : "false"); } } model.put("auth_request", clientAuth); model.put("client", client); model.put("scopes", scopes); return "oauth/access_confirmation"; } }