keycloak-service
クラス | 公開メンバ関数 | 静的公開メンバ関数 | 静的公開変数類 | 限定公開メンバ関数 | 限定公開変数類 | 静的関数 | 非公開メンバ関数 | 非公開変数類 | 静的非公開変数類 | 全メンバ一覧
org.keycloak.services.resources.account.AccountFormService クラス
org.keycloak.services.resources.account.AccountFormService の継承関係図
Inheritance graph
org.keycloak.services.resources.account.AccountFormService 連携図
Collaboration graph

クラス

enum  AccountSocialAction
 

公開メンバ関数

 AccountFormService (RealmModel realm, ClientModel client, EventBuilder event)
 
void init ()
 
Response accountPage ()
 
Response totpPage ()
 
Response passwordPage ()
 
Response federatedIdentityPage ()
 
Response logPage ()
 
Response sessionsPage ()
 
Response applicationsPage ()
 
Response processAccountUpdate (final MultivaluedMap< String, String > formData)
 
Response processSessionsLogout (final MultivaluedMap< String, String > formData)
 
Response processRevokeGrant (final MultivaluedMap< String, String > formData)
 
Response processTotpUpdate (final MultivaluedMap< String, String > formData)
 
Response processPasswordUpdate (final MultivaluedMap< String, String > formData)
 
Response processFederatedIdentityUpdate (final MultivaluedMap< String, String > formData)
 
Response resourcesPage (@QueryParam("resource_id") String resourceId)
 
Response resourceDetailPage (@PathParam("resource_id") String resourceId)
 
Response grantPermission (@PathParam("resource_id") String resourceId, @FormParam("action") String action, @FormParam("permission_id") String[] permissionId, @FormParam("requester") String requester)
 
Response shareResource (@PathParam("resource_id") String resourceId, @FormParam("user_id") String[] userIds, @FormParam("scope_id") String[] scopes)
 
Response processResourceActions (@FormParam("resource_id") String[] resourceIds, @FormParam("action") String action)
 
Response loginRedirect (@QueryParam("code") String code, @QueryParam("state") String state, @QueryParam("error") String error, @QueryParam("path") String path, @QueryParam("referrer") String referrer, @Context HttpHeaders headers)
 

静的公開メンバ関数

static UriBuilder accountServiceBaseUrl (UriInfo uriInfo)
 
static UriBuilder accountServiceApplicationPage (UriInfo uriInfo)
 
static UriBuilder totpUrl (UriBuilder base)
 
static UriBuilder passwordUrl (UriBuilder base)
 
static UriBuilder loginRedirectUrl (UriBuilder base)
 
static boolean isPasswordSet (KeycloakSession session, RealmModel realm, UserModel user)
 

静的公開変数類

static final String ACCOUNT_MGMT_FORWARDED_ERROR_NOTE = "ACCOUNT_MGMT_FORWARDED_ERROR"
 

限定公開メンバ関数

Set< String > getValidPaths ()
 
URI getBaseRedirectUri ()
 
Response login (String path)
 

限定公開変数類

final ClientModel client
 
RealmModel realm
 
HttpHeaders headers
 
ClientConnection clientConnection
 
String stateChecker
 
KeycloakSession session
 
HttpRequest request
 
Auth auth
 

静的関数

 [static initializer]
 

非公開メンバ関数

Response forwardToPage (String path, AccountPages page)
 
void setReferrerOnPage ()
 
String [] getReferrer ()
 
void updateUsername (String username, UserModel user, KeycloakSession session)
 
void updateEmail (String email, UserModel user, KeycloakSession session, EventBuilder event)
 
void csrfCheck (final MultivaluedMap< String, String > formData)
 

非公開変数類

final AppAuthManager authManager
 
EventBuilder event
 
AccountProvider account
 
EventStoreProvider eventStore
 

静的非公開変数類

static final Logger logger = Logger.getLogger(AccountFormService.class)
 
static Set< String > VALID_PATHS = new HashSet<String>()
 

詳解

著者
Stian Thorgersen

構築子と解体子

◆ AccountFormService()

org.keycloak.services.resources.account.AccountFormService.AccountFormService ( RealmModel  realm,
ClientModel  client,
EventBuilder  event 
)
inline
130  {
131  super(realm, client);
132  this.event = event;
133  this.authManager = new AppAuthManager();
134  }
EventBuilder event
Definition: AccountFormService.java:126
final AppAuthManager authManager
Definition: AccountFormService.java:125
RealmModel realm
Definition: AbstractSecuredLocalService.java:59
final ClientModel client
Definition: AbstractSecuredLocalService.java:58

関数詳解

◆ [static initializer]()

org.keycloak.services.resources.account.AccountFormService.[static initializer] ( )
inlinestaticpackage

◆ accountPage()

Response org.keycloak.services.resources.account.AccountFormService.accountPage ( )
inline

Get account information.

戻り値
241  {
242  return forwardToPage(null, AccountPages.ACCOUNT);
243  }
Response forwardToPage(String path, AccountPages page)
Definition: AccountFormService.java:191

◆ accountServiceApplicationPage()

static UriBuilder org.keycloak.services.resources.account.AccountFormService.accountServiceApplicationPage ( UriInfo  uriInfo)
inlinestatic
183  {
184  return accountServiceBaseUrl(uriInfo).path(AccountFormService.class, "applicationsPage");
185  }
static UriBuilder accountServiceBaseUrl(UriInfo uriInfo)
Definition: AccountFormService.java:178
AccountFormService(RealmModel realm, ClientModel client, EventBuilder event)
Definition: AccountFormService.java:130

◆ accountServiceBaseUrl()

static UriBuilder org.keycloak.services.resources.account.AccountFormService.accountServiceBaseUrl ( UriInfo  uriInfo)
inlinestatic
178  {
179  UriBuilder base = uriInfo.getBaseUriBuilder().path(RealmsResource.class).path(RealmsResource.class, "getAccountService");
180  return base;
181  }

◆ applicationsPage()

Response org.keycloak.services.resources.account.AccountFormService.applicationsPage ( )
inline
305  {
306  return forwardToPage("applications", AccountPages.APPLICATIONS);
307  }
Response forwardToPage(String path, AccountPages page)
Definition: AccountFormService.java:191

◆ csrfCheck()

void org.keycloak.services.resources.account.AccountFormService.csrfCheck ( final MultivaluedMap< String, String >  formData)
inlineprivate
1048  {
1049  String formStateChecker = formData.getFirst("stateChecker");
1050  if (formStateChecker == null || !formStateChecker.equals(this.stateChecker)) {
1051  throw new ForbiddenException();
1052  }
1053  }

◆ federatedIdentityPage()

Response org.keycloak.services.resources.account.AccountFormService.federatedIdentityPage ( )
inline
270  {
271  return forwardToPage("identity", AccountPages.FEDERATED_IDENTITY);
272  }
Response forwardToPage(String path, AccountPages page)
Definition: AccountFormService.java:191

◆ forwardToPage()

Response org.keycloak.services.resources.account.AccountFormService.forwardToPage ( String  path,
AccountPages  page 
)
inlineprivate
191  {
192  if (auth != null) {
193  try {
194  auth.require(AccountRoles.MANAGE_ACCOUNT);
195  } catch (ForbiddenException e) {
196  return session.getProvider(LoginFormsProvider.class).setError(Messages.NO_ACCESS).createErrorPage(Response.Status.FORBIDDEN);
197  }
198 
200 
201  UserSessionModel userSession = auth.getSession();
202 
203  String tabId = request.getUri().getQueryParameters().getFirst(org.keycloak.models.Constants.TAB_ID);
204  if (tabId != null) {
205  AuthenticationSessionModel authSession = new AuthenticationSessionManager(session).getAuthenticationSessionByIdAndClient(realm, userSession.getId(), client, tabId);
206  if (authSession != null) {
207  String forwardedError = authSession.getAuthNote(ACCOUNT_MGMT_FORWARDED_ERROR_NOTE);
208  if (forwardedError != null) {
209  try {
210  FormMessage errorMessage = JsonSerialization.readValue(forwardedError, FormMessage.class);
211  account.setError(Response.Status.INTERNAL_SERVER_ERROR, errorMessage.getMessage(), errorMessage.getParameters());
212  authSession.removeAuthNote(ACCOUNT_MGMT_FORWARDED_ERROR_NOTE);
213  } catch (IOException ioe) {
214  throw new RuntimeException(ioe);
215  }
216  }
217  }
218  }
219 
220  return account.createResponse(page);
221  } else {
222  return login(path);
223  }
224  }
Auth auth
Definition: AbstractSecuredLocalService.java:70
Response login(String path)
Definition: AbstractSecuredLocalService.java:132
HttpRequest request
Definition: AbstractSecuredLocalService.java:69
AccountProvider account
Definition: AccountFormService.java:127
static final String ACCOUNT_MGMT_FORWARDED_ERROR_NOTE
Definition: AccountFormService.java:123
KeycloakSession session
Definition: AbstractSecuredLocalService.java:67
RealmModel realm
Definition: AbstractSecuredLocalService.java:59
final ClientModel client
Definition: AbstractSecuredLocalService.java:58
void setReferrerOnPage()
Definition: AccountFormService.java:226
UserSessionModel getSession()
Definition: Auth.java:71
void require(String role)
Definition: Auth.java:83

◆ getBaseRedirectUri()

URI org.keycloak.services.resources.account.AccountFormService.getBaseRedirectUri ( )
inlineprotected
941  {
942  return Urls.accountBase(session.getContext().getUri().getBaseUri()).path("/").build(realm.getName());
943  }
KeycloakSession session
Definition: AbstractSecuredLocalService.java:67
RealmModel realm
Definition: AbstractSecuredLocalService.java:59

◆ getReferrer()

String [] org.keycloak.services.resources.account.AccountFormService.getReferrer ( )
inlineprivate
949  {
950  String referrer = session.getContext().getUri().getQueryParameters().getFirst("referrer");
951  if (referrer == null) {
952  return null;
953  }
954 
955  String referrerUri = session.getContext().getUri().getQueryParameters().getFirst("referrer_uri");
956 
957  ClientModel referrerClient = realm.getClientByClientId(referrer);
958  if (referrerClient != null) {
959  if (referrerUri != null) {
960  referrerUri = RedirectUtils.verifyRedirectUri(session.getContext().getUri(), referrerUri, realm, referrerClient);
961  } else {
962  referrerUri = ResolveRelative.resolveRelativeUri(session.getContext().getUri().getRequestUri(), client.getRootUrl(), referrerClient.getBaseUrl());
963  }
964 
965  if (referrerUri != null) {
966  String referrerName = referrerClient.getName();
967  if (Validation.isBlank(referrerName)) {
968  referrerName = referrer;
969  }
970  return new String[]{referrerName, referrerUri};
971  }
972  } else if (referrerUri != null) {
973  referrerClient = realm.getClientByClientId(referrer);
974  if (client != null) {
975  referrerUri = RedirectUtils.verifyRedirectUri(session.getContext().getUri(), referrerUri, realm, referrerClient);
976 
977  if (referrerUri != null) {
978  return new String[]{referrer, referrerUri};
979  }
980  }
981  }
982 
983  return null;
984  }
KeycloakSession session
Definition: AbstractSecuredLocalService.java:67
RealmModel realm
Definition: AbstractSecuredLocalService.java:59
final ClientModel client
Definition: AbstractSecuredLocalService.java:58

◆ getValidPaths()

Set<String> org.keycloak.services.resources.account.AccountFormService.getValidPaths ( )
inlineprotected
187  {
188  return AccountFormService.VALID_PATHS;
189  }
AccountFormService(RealmModel realm, ClientModel client, EventBuilder event)
Definition: AccountFormService.java:130

◆ grantPermission()

Response org.keycloak.services.resources.account.AccountFormService.grantPermission ( @PathParam("resource_id") String  resourceId,
@FormParam("action") String  action,
@FormParam("permission_id") String []  permissionId,
@FormParam("requester") String  requester 
)
inline
718  {
719  AuthorizationProvider authorization = session.getProvider(AuthorizationProvider.class);
720  PermissionTicketStore ticketStore = authorization.getStoreFactory().getPermissionTicketStore();
721  Resource resource = authorization.getStoreFactory().getResourceStore().findById(resourceId, null);
722 
723  if (resource == null) {
724  return ErrorResponse.error("Invalid resource", Response.Status.BAD_REQUEST);
725  }
726 
727  if (action == null) {
728  return ErrorResponse.error("Invalid action", Response.Status.BAD_REQUEST);
729  }
730 
731  boolean isGrant = "grant".equals(action);
732  boolean isDeny = "deny".equals(action);
733  boolean isRevoke = "revoke".equals(action);
734  boolean isRevokePolicy = "revokePolicy".equals(action);
735  boolean isRevokePolicyAll = "revokePolicyAll".equals(action);
736 
737  if (isRevokePolicy || isRevokePolicyAll) {
738  List<String> ids = new ArrayList(Arrays.asList(permissionId));
739  Iterator<String> iterator = ids.iterator();
740  PolicyStore policyStore = authorization.getStoreFactory().getPolicyStore();
741  Policy policy = null;
742 
743  while (iterator.hasNext()) {
744  String id = iterator.next();
745 
746  if (!id.contains(":")) {
747  policy = policyStore.findById(id, client.getId());
748  iterator.remove();
749  break;
750  }
751  }
752 
753  Set<Scope> scopesToKeep = new HashSet<>();
754 
755  if (isRevokePolicyAll) {
756  for (Scope scope : policy.getScopes()) {
757  policy.removeScope(scope);
758  }
759  } else {
760  for (String id : ids) {
761  scopesToKeep.add(authorization.getStoreFactory().getScopeStore().findById(id.split(":")[1], client.getId()));
762  }
763 
764  for (Scope scope : policy.getScopes()) {
765  if (!scopesToKeep.contains(scope)) {
766  policy.removeScope(scope);
767  }
768  }
769  }
770 
771  if (policy.getScopes().isEmpty()) {
772  for (Policy associated : policy.getAssociatedPolicies()) {
773  policyStore.delete(associated.getId());
774  }
775 
776  policyStore.delete(policy.getId());
777  }
778  } else {
779  Map<String, String> filters = new HashMap<>();
780 
781  filters.put(PermissionTicket.RESOURCE, resource.getId());
782  filters.put(PermissionTicket.REQUESTER, session.users().getUserByUsername(requester, realm).getId());
783 
784  if (isRevoke) {
785  filters.put(PermissionTicket.GRANTED, Boolean.TRUE.toString());
786  } else {
787  filters.put(PermissionTicket.GRANTED, Boolean.FALSE.toString());
788  }
789 
790  List<PermissionTicket> tickets = ticketStore.find(filters, resource.getResourceServer().getId(), -1, -1);
791  Iterator<PermissionTicket> iterator = tickets.iterator();
792 
793  while (iterator.hasNext()) {
794  PermissionTicket ticket = iterator.next();
795 
796  if (isGrant) {
797  if (permissionId != null && permissionId.length > 0 && !Arrays.asList(permissionId).contains(ticket.getId())) {
798  continue;
799  }
800  }
801 
802  if (isGrant && !ticket.isGranted()) {
803  ticket.setGrantedTimestamp(System.currentTimeMillis());
804  iterator.remove();
805  } else if (isDeny || isRevoke) {
806  if (permissionId != null && permissionId.length > 0 && Arrays.asList(permissionId).contains(ticket.getId())) {
807  iterator.remove();
808  }
809  }
810  }
811 
812  for (PermissionTicket ticket : tickets) {
813  ticketStore.delete(ticket.getId());
814  }
815  }
816 
817  if (isRevoke || isRevokePolicy || isRevokePolicyAll) {
818  return forwardToPage("resource-detail", AccountPages.RESOURCE_DETAIL);
819  }
820 
821  return forwardToPage("resources", AccountPages.RESOURCES);
822  }
KeycloakSession session
Definition: AbstractSecuredLocalService.java:67
RealmModel realm
Definition: AbstractSecuredLocalService.java:59
final ClientModel client
Definition: AbstractSecuredLocalService.java:58
Response forwardToPage(String path, AccountPages page)
Definition: AccountFormService.java:191

◆ init()

void org.keycloak.services.resources.account.AccountFormService.init ( )
inline
136  {
137  eventStore = session.getProvider(EventStoreProvider.class);
138 
139  account = session.getProvider(AccountProvider.class).setRealm(realm).setUriInfo(session.getContext().getUri()).setHttpHeaders(headers);
140 
141  AuthenticationManager.AuthResult authResult = authManager.authenticateIdentityCookie(session, realm);
142  if (authResult != null) {
143  stateChecker = (String) session.getAttribute("state_checker");
144  auth = new Auth(realm, authResult.getToken(), authResult.getUser(), client, authResult.getSession(), true);
145  account.setStateChecker(stateChecker);
146  }
147 
148  String requestOrigin = UriUtils.getOrigin(session.getContext().getUri().getBaseUri());
149 
150  String origin = headers.getRequestHeaders().getFirst("Origin");
151  if (origin != null && !requestOrigin.equals(origin)) {
152  throw new ForbiddenException();
153  }
154 
155  if (!request.getHttpMethod().equals("GET")) {
156  String referrer = headers.getRequestHeaders().getFirst("Referer");
157  if (referrer != null && !requestOrigin.equals(UriUtils.getOrigin(referrer))) {
158  throw new ForbiddenException();
159  }
160  }
161 
162  if (authResult != null) {
163  UserSessionModel userSession = authResult.getSession();
164  if (userSession != null) {
165  AuthenticatedClientSessionModel clientSession = userSession.getAuthenticatedClientSessionByClient(client.getId());
166  if (clientSession == null) {
167  clientSession = session.sessions().createClientSession(userSession.getRealm(), client, userSession);
168  }
169  auth.setClientSession(clientSession);
170  }
171 
172  account.setUser(auth.getUser());
173  }
174 
175  account.setFeatures(realm.isIdentityFederationEnabled(), eventStore != null && realm.isEventsEnabled(), true, Profile.isFeatureEnabled(Feature.AUTHORIZATION));
176  }
EventStoreProvider eventStore
Definition: AccountFormService.java:128
HttpHeaders headers
Definition: AbstractSecuredLocalService.java:62
Auth auth
Definition: AbstractSecuredLocalService.java:70
AuthResult authenticateIdentityCookie(KeycloakSession session, RealmModel realm)
Definition: AppAuthManager.java:35
UserModel getUser()
Definition: Auth.java:59
final AppAuthManager authManager
Definition: AccountFormService.java:125
HttpRequest request
Definition: AbstractSecuredLocalService.java:69
AccountProvider account
Definition: AccountFormService.java:127
KeycloakSession session
Definition: AbstractSecuredLocalService.java:67
RealmModel realm
Definition: AbstractSecuredLocalService.java:59
final ClientModel client
Definition: AbstractSecuredLocalService.java:58
void setClientSession(AuthenticatedClientSessionModel clientSession)
Definition: Auth.java:79
String stateChecker
Definition: AbstractSecuredLocalService.java:65

◆ isPasswordSet()

static boolean org.keycloak.services.resources.account.AccountFormService.isPasswordSet ( KeycloakSession  session,
RealmModel  realm,
UserModel  user 
)
inlinestatic
945  {
946  return session.userCredentialManager().isConfiguredFor(realm, user, CredentialModel.PASSWORD);
947  }
KeycloakSession session
Definition: AbstractSecuredLocalService.java:67
RealmModel realm
Definition: AbstractSecuredLocalService.java:59

◆ login()

Response org.keycloak.services.resources.AbstractSecuredLocalService.login ( String  path)
inlineprotectedinherited
132  {
133  OAuthRedirect oauth = new OAuthRedirect();
134  String authUrl = OIDCLoginProtocolService.authUrl(session.getContext().getUri()).build(realm.getName()).toString();
135  oauth.setAuthUrl(authUrl);
136 
137  oauth.setClientId(client.getClientId());
138 
139  oauth.setSecure(realm.getSslRequired().isRequired(clientConnection));
140 
141  UriBuilder uriBuilder = UriBuilder.fromUri(getBaseRedirectUri()).path("login-redirect");
142 
143  if (path != null) {
144  uriBuilder.queryParam("path", path);
145  }
146 
147  String referrer = session.getContext().getUri().getQueryParameters().getFirst("referrer");
148  if (referrer != null) {
149  uriBuilder.queryParam("referrer", referrer);
150  }
151 
152  String referrerUri = session.getContext().getUri().getQueryParameters().getFirst("referrer_uri");
153  if (referrerUri != null) {
154  uriBuilder.queryParam("referrer_uri", referrerUri);
155  }
156 
157  URI accountUri = uriBuilder.build(realm.getName());
158 
159  oauth.setStateCookiePath(accountUri.getRawPath());
160  return oauth.redirect(session.getContext().getUri(), accountUri.toString());
161  }
ClientConnection clientConnection
Definition: AbstractSecuredLocalService.java:64
KeycloakSession session
Definition: AbstractSecuredLocalService.java:67
RealmModel realm
Definition: AbstractSecuredLocalService.java:59
final ClientModel client
Definition: AbstractSecuredLocalService.java:58

◆ loginRedirect()

Response org.keycloak.services.resources.AbstractSecuredLocalService.loginRedirect ( @QueryParam("code") String  code,
@QueryParam("state") String  state,
@QueryParam("error") String  error,
@QueryParam("path") String  path,
@QueryParam("referrer") String  referrer,
@Context HttpHeaders  headers 
)
inlineinherited
84  {
85  try {
86  if (error != null) {
87  if (OAuthErrorException.ACCESS_DENIED.equals(error)) {
88  // cased by CANCELLED_BY_USER or CONSENT_DENIED
89  session.getContext().setClient(client);
90  return session.getProvider(LoginFormsProvider.class).setError(Messages.NO_ACCESS).createErrorPage(Response.Status.FORBIDDEN);
91  } else {
92  logger.debug("error from oauth");
93  throw new ForbiddenException("error");
94  }
95  }
96  if (path != null && !getValidPaths().contains(path)) {
97  throw new BadRequestException("Invalid path");
98  }
99  if (!realm.isEnabled()) {
100  logger.debug("realm not enabled");
101  throw new ForbiddenException();
102  }
103  if (!client.isEnabled()) {
104  logger.debug("account management app not enabled");
105  throw new ForbiddenException();
106  }
107  if (code == null) {
108  logger.debug("code not specified");
109  throw new BadRequestException("code not specified");
110  }
111  if (state == null) {
112  logger.debug("state not specified");
113  throw new BadRequestException("state not specified");
114  }
115  KeycloakUriBuilder redirect = KeycloakUriBuilder.fromUri(getBaseRedirectUri());
116  if (path != null) {
117  redirect.path(path);
118  }
119  if (referrer != null) {
120  redirect.queryParam("referrer", referrer);
121  }
122 
123  return Response.status(302).location(redirect.build()).build();
124  } finally {
125  }
126  }
static final Logger logger
Definition: AbstractSecuredLocalService.java:56
KeycloakSession session
Definition: AbstractSecuredLocalService.java:67
RealmModel realm
Definition: AbstractSecuredLocalService.java:59
final ClientModel client
Definition: AbstractSecuredLocalService.java:58

◆ loginRedirectUrl()

static UriBuilder org.keycloak.services.resources.account.AccountFormService.loginRedirectUrl ( UriBuilder  base)
inlinestatic
936  {
937  return RealmsResource.accountUrl(base).path(AccountFormService.class, "loginRedirect");
938  }
AccountFormService(RealmModel realm, ClientModel client, EventBuilder event)
Definition: AccountFormService.java:130

◆ logPage()

Response org.keycloak.services.resources.account.AccountFormService.logPage ( )
inline
276  {
277  if (auth != null) {
278  List<Event> events = eventStore.createQuery().type(Constants.EXPOSED_LOG_EVENTS).user(auth.getUser().getId()).maxResults(30).getResultList();
279  for (Event e : events) {
280  if (e.getDetails() != null) {
281  Iterator<Map.Entry<String, String>> itr = e.getDetails().entrySet().iterator();
282  while (itr.hasNext()) {
283  if (!Constants.EXPOSED_LOG_DETAILS.contains(itr.next().getKey())) {
284  itr.remove();
285  }
286  }
287  }
288  }
289  account.setEvents(events);
290  }
291  return forwardToPage("log", AccountPages.LOG);
292  }
EventStoreProvider eventStore
Definition: AccountFormService.java:128
Auth auth
Definition: AbstractSecuredLocalService.java:70
UserModel getUser()
Definition: Auth.java:59
AccountProvider account
Definition: AccountFormService.java:127
Response forwardToPage(String path, AccountPages page)
Definition: AccountFormService.java:191

◆ passwordPage()

Response org.keycloak.services.resources.account.AccountFormService.passwordPage ( )
inline
260  {
261  if (auth != null) {
262  account.setPasswordSet(isPasswordSet(session, realm, auth.getUser()));
263  }
264 
265  return forwardToPage("password", AccountPages.PASSWORD);
266  }
Auth auth
Definition: AbstractSecuredLocalService.java:70
static boolean isPasswordSet(KeycloakSession session, RealmModel realm, UserModel user)
Definition: AccountFormService.java:945
UserModel getUser()
Definition: Auth.java:59
AccountProvider account
Definition: AccountFormService.java:127
KeycloakSession session
Definition: AbstractSecuredLocalService.java:67
RealmModel realm
Definition: AbstractSecuredLocalService.java:59
Response forwardToPage(String path, AccountPages page)
Definition: AccountFormService.java:191

◆ passwordUrl()

static UriBuilder org.keycloak.services.resources.account.AccountFormService.passwordUrl ( UriBuilder  base)
inlinestatic
255  {
256  return RealmsResource.accountUrl(base).path(AccountFormService.class, "passwordPage");
257  }
AccountFormService(RealmModel realm, ClientModel client, EventBuilder event)
Definition: AccountFormService.java:130

◆ processAccountUpdate()

Response org.keycloak.services.resources.account.AccountFormService.processAccountUpdate ( final MultivaluedMap< String, String >  formData)
inline

Update account information.

Form params:

firstName lastName email

引数
formData
戻り値
324  {
325  if (auth == null) {
326  return login(null);
327  }
328 
329  auth.require(AccountRoles.MANAGE_ACCOUNT);
330 
331  String action = formData.getFirst("submitAction");
332  if (action != null && action.equals("Cancel")) {
334  return account.createResponse(AccountPages.ACCOUNT);
335  }
336 
337  csrfCheck(formData);
338 
339  UserModel user = auth.getUser();
340 
341  event.event(EventType.UPDATE_PROFILE).client(auth.getClient()).user(auth.getUser());
342 
343  List<FormMessage> errors = Validation.validateUpdateProfileForm(realm, formData);
344  if (errors != null && !errors.isEmpty()) {
346  return account.setErrors(Response.Status.BAD_REQUEST, errors).setProfileFormData(formData).createResponse(AccountPages.ACCOUNT);
347  }
348 
349  try {
350  updateUsername(formData.getFirst("username"), user, session);
351  updateEmail(formData.getFirst("email"), user, session, event);
352 
353  user.setFirstName(formData.getFirst("firstName"));
354  user.setLastName(formData.getFirst("lastName"));
355 
356  AttributeFormDataProcessor.process(formData, realm, user);
357 
358  event.success();
359 
361  return account.setSuccess(Messages.ACCOUNT_UPDATED).createResponse(AccountPages.ACCOUNT);
362  } catch (ReadOnlyException roe) {
364  return account.setError(Response.Status.BAD_REQUEST, Messages.READ_ONLY_USER).setProfileFormData(formData).createResponse(AccountPages.ACCOUNT);
365  } catch (ModelDuplicateException mde) {
367  return account.setError(Response.Status.CONFLICT, mde.getMessage()).setProfileFormData(formData).createResponse(AccountPages.ACCOUNT);
368  }
369  }
void csrfCheck(final MultivaluedMap< String, String > formData)
Definition: AccountFormService.java:1048
void updateEmail(String email, UserModel user, KeycloakSession session, EventBuilder event)
Definition: AccountFormService.java:1019
ClientModel getClient()
Definition: Auth.java:63
Auth auth
Definition: AbstractSecuredLocalService.java:70
Response login(String path)
Definition: AbstractSecuredLocalService.java:132
UserModel getUser()
Definition: Auth.java:59
EventBuilder event
Definition: AccountFormService.java:126
AccountProvider account
Definition: AccountFormService.java:127
KeycloakSession session
Definition: AbstractSecuredLocalService.java:67
RealmModel realm
Definition: AbstractSecuredLocalService.java:59
void setReferrerOnPage()
Definition: AccountFormService.java:226
void require(String role)
Definition: Auth.java:83
void updateUsername(String username, UserModel user, KeycloakSession session)
Definition: AccountFormService.java:1002

◆ processFederatedIdentityUpdate()

Response org.keycloak.services.resources.account.AccountFormService.processFederatedIdentityUpdate ( final MultivaluedMap< String, String >  formData)
inline
610  {
611  if (auth == null) {
612  return login("identity");
613  }
614 
615  auth.require(AccountRoles.MANAGE_ACCOUNT);
616  csrfCheck(formData);
617  UserModel user = auth.getUser();
618 
619  String action = formData.getFirst("action");
620  String providerId = formData.getFirst("providerId");
621 
622  if (Validation.isEmpty(providerId)) {
624  return account.setError(Response.Status.BAD_REQUEST, Messages.MISSING_IDENTITY_PROVIDER).createResponse(AccountPages.FEDERATED_IDENTITY);
625  }
626  AccountSocialAction accountSocialAction = AccountSocialAction.getAction(action);
627  if (accountSocialAction == null) {
629  return account.setError(Response.Status.BAD_REQUEST, Messages.INVALID_FEDERATED_IDENTITY_ACTION).createResponse(AccountPages.FEDERATED_IDENTITY);
630  }
631 
632  boolean hasProvider = false;
633 
634  for (IdentityProviderModel model : realm.getIdentityProviders()) {
635  if (model.getAlias().equals(providerId)) {
636  hasProvider = true;
637  }
638  }
639 
640  if (!hasProvider) {
642  return account.setError(Response.Status.BAD_REQUEST, Messages.IDENTITY_PROVIDER_NOT_FOUND).createResponse(AccountPages.FEDERATED_IDENTITY);
643  }
644 
645  if (!user.isEnabled()) {
647  return account.setError(Response.Status.BAD_REQUEST, Messages.ACCOUNT_DISABLED).createResponse(AccountPages.FEDERATED_IDENTITY);
648  }
649 
650  switch (accountSocialAction) {
651  case ADD:
652  String redirectUri = UriBuilder.fromUri(Urls.accountFederatedIdentityPage(session.getContext().getUri().getBaseUri(), realm.getName())).build().toString();
653 
654  try {
655  String nonce = UUID.randomUUID().toString();
656  MessageDigest md = MessageDigest.getInstance("SHA-256");
657  String input = nonce + auth.getSession().getId() + client.getClientId() + providerId;
658  byte[] check = md.digest(input.getBytes(StandardCharsets.UTF_8));
659  String hash = Base64Url.encode(check);
660  URI linkUrl = Urls.identityProviderLinkRequest(this.session.getContext().getUri().getBaseUri(), providerId, realm.getName());
661  linkUrl = UriBuilder.fromUri(linkUrl)
662  .queryParam("nonce", nonce)
663  .queryParam("hash", hash)
664  .queryParam("client_id", client.getClientId())
665  .queryParam("redirect_uri", redirectUri)
666  .build();
667  return Response.seeOther(linkUrl)
668  .build();
669  } catch (Exception spe) {
671  return account.setError(Response.Status.INTERNAL_SERVER_ERROR, Messages.IDENTITY_PROVIDER_REDIRECT_ERROR).createResponse(AccountPages.FEDERATED_IDENTITY);
672  }
673  case REMOVE:
674  FederatedIdentityModel link = session.users().getFederatedIdentity(user, providerId, realm);
675  if (link != null) {
676 
677  // Removing last social provider is not possible if you don't have other possibility to authenticate
678  if (session.users().getFederatedIdentities(user, realm).size() > 1 || user.getFederationLink() != null || isPasswordSet(session, realm, user)) {
679  session.users().removeFederatedIdentity(realm, user, providerId);
680 
681  logger.debugv("Social provider {0} removed successfully from user {1}", providerId, user.getUsername());
682 
683  event.event(EventType.REMOVE_FEDERATED_IDENTITY).client(auth.getClient()).user(auth.getUser())
684  .detail(Details.USERNAME, auth.getUser().getUsername())
685  .detail(Details.IDENTITY_PROVIDER, link.getIdentityProvider())
686  .detail(Details.IDENTITY_PROVIDER_USERNAME, link.getUserName())
687  .success();
688 
690  return account.setSuccess(Messages.IDENTITY_PROVIDER_REMOVED).createResponse(AccountPages.FEDERATED_IDENTITY);
691  } else {
693  return account.setError(Response.Status.BAD_REQUEST, Messages.FEDERATED_IDENTITY_REMOVING_LAST_PROVIDER).createResponse(AccountPages.FEDERATED_IDENTITY);
694  }
695  } else {
697  return account.setError(Response.Status.BAD_REQUEST, Messages.FEDERATED_IDENTITY_NOT_ACTIVE).createResponse(AccountPages.FEDERATED_IDENTITY);
698  }
699  default:
700  throw new IllegalArgumentException();
701  }
702  }
static final Logger logger
Definition: AccountFormService.java:110
void csrfCheck(final MultivaluedMap< String, String > formData)
Definition: AccountFormService.java:1048
ClientModel getClient()
Definition: Auth.java:63
Auth auth
Definition: AbstractSecuredLocalService.java:70
Response login(String path)
Definition: AbstractSecuredLocalService.java:132
static boolean isPasswordSet(KeycloakSession session, RealmModel realm, UserModel user)
Definition: AccountFormService.java:945
UserModel getUser()
Definition: Auth.java:59
AccountProvider account
Definition: AccountFormService.java:127
KeycloakSession session
Definition: AbstractSecuredLocalService.java:67
RealmModel realm
Definition: AbstractSecuredLocalService.java:59
final ClientModel client
Definition: AbstractSecuredLocalService.java:58
void setReferrerOnPage()
Definition: AccountFormService.java:226
UserSessionModel getSession()
Definition: Auth.java:71
void require(String role)
Definition: Auth.java:83

◆ processPasswordUpdate()

Response org.keycloak.services.resources.account.AccountFormService.processPasswordUpdate ( final MultivaluedMap< String, String >  formData)
inline

Update account password

Form params:

password - old password password-new pasword-confirm

引数
formData
戻り値
528  {
529  if (auth == null) {
530  return login("password");
531  }
532 
533  auth.require(AccountRoles.MANAGE_ACCOUNT);
534 
535  csrfCheck(formData);
536  UserModel user = auth.getUser();
537 
538  boolean requireCurrent = isPasswordSet(session, realm, user);
539  account.setPasswordSet(requireCurrent);
540 
541  String password = formData.getFirst("password");
542  String passwordNew = formData.getFirst("password-new");
543  String passwordConfirm = formData.getFirst("password-confirm");
544 
545  EventBuilder errorEvent = event.clone().event(EventType.UPDATE_PASSWORD_ERROR)
546  .client(auth.getClient())
547  .user(auth.getSession().getUser());
548 
549  if (requireCurrent) {
550  if (Validation.isBlank(password)) {
552  errorEvent.error(Errors.PASSWORD_MISSING);
553  return account.setError(Response.Status.BAD_REQUEST, Messages.MISSING_PASSWORD).createResponse(AccountPages.PASSWORD);
554  }
555 
556  UserCredentialModel cred = UserCredentialModel.password(password);
557  if (!session.userCredentialManager().isValid(realm, user, cred)) {
559  errorEvent.error(Errors.INVALID_USER_CREDENTIALS);
560  return account.setError(Response.Status.BAD_REQUEST, Messages.INVALID_PASSWORD_EXISTING).createResponse(AccountPages.PASSWORD);
561  }
562  }
563 
564  if (Validation.isBlank(passwordNew)) {
566  errorEvent.error(Errors.PASSWORD_MISSING);
567  return account.setError(Response.Status.BAD_REQUEST, Messages.MISSING_PASSWORD).createResponse(AccountPages.PASSWORD);
568  }
569 
570  if (!passwordNew.equals(passwordConfirm)) {
572  errorEvent.error(Errors.PASSWORD_CONFIRM_ERROR);
573  return account.setError(Response.Status.BAD_REQUEST, Messages.INVALID_PASSWORD_CONFIRM).createResponse(AccountPages.PASSWORD);
574  }
575 
576  try {
577  session.userCredentialManager().updateCredential(realm, user, UserCredentialModel.password(passwordNew, false));
578  } catch (ReadOnlyException mre) {
580  errorEvent.error(Errors.NOT_ALLOWED);
581  return account.setError(Response.Status.BAD_REQUEST, Messages.READ_ONLY_PASSWORD).createResponse(AccountPages.PASSWORD);
582  } catch (ModelException me) {
583  ServicesLogger.LOGGER.failedToUpdatePassword(me);
585  errorEvent.detail(Details.REASON, me.getMessage()).error(Errors.PASSWORD_REJECTED);
586  return account.setError(Response.Status.INTERNAL_SERVER_ERROR, me.getMessage(), me.getParameters()).createResponse(AccountPages.PASSWORD);
587  } catch (Exception ape) {
588  ServicesLogger.LOGGER.failedToUpdatePassword(ape);
590  errorEvent.detail(Details.REASON, ape.getMessage()).error(Errors.PASSWORD_REJECTED);
591  return account.setError(Response.Status.INTERNAL_SERVER_ERROR, ape.getMessage()).createResponse(AccountPages.PASSWORD);
592  }
593 
594  List<UserSessionModel> sessions = session.sessions().getUserSessions(realm, user);
595  for (UserSessionModel s : sessions) {
596  if (!s.getId().equals(auth.getSession().getId())) {
597  AuthenticationManager.backchannelLogout(session, realm, s, session.getContext().getUri(), clientConnection, headers, true);
598  }
599  }
600 
601  event.event(EventType.UPDATE_PASSWORD).client(auth.getClient()).user(auth.getUser()).success();
602 
604  return account.setPasswordSet(true).setSuccess(Messages.ACCOUNT_PASSWORD_UPDATED).createResponse(AccountPages.PASSWORD);
605  }
void csrfCheck(final MultivaluedMap< String, String > formData)
Definition: AccountFormService.java:1048
ClientModel getClient()
Definition: Auth.java:63
HttpHeaders headers
Definition: AbstractSecuredLocalService.java:62
Auth auth
Definition: AbstractSecuredLocalService.java:70
Response login(String path)
Definition: AbstractSecuredLocalService.java:132
static boolean isPasswordSet(KeycloakSession session, RealmModel realm, UserModel user)
Definition: AccountFormService.java:945
ClientConnection clientConnection
Definition: AbstractSecuredLocalService.java:64
UserModel getUser()
Definition: Auth.java:59
AccountProvider account
Definition: AccountFormService.java:127
KeycloakSession session
Definition: AbstractSecuredLocalService.java:67
RealmModel realm
Definition: AbstractSecuredLocalService.java:59
void setReferrerOnPage()
Definition: AccountFormService.java:226
UserSessionModel getSession()
Definition: Auth.java:71
void require(String role)
Definition: Auth.java:83

◆ processResourceActions()

Response org.keycloak.services.resources.account.AccountFormService.processResourceActions ( @FormParam("resource_id") String []  resourceIds,
@FormParam("action") String  action 
)
inline
902  {
903  AuthorizationProvider authorization = session.getProvider(AuthorizationProvider.class);
904  PermissionTicketStore ticketStore = authorization.getStoreFactory().getPermissionTicketStore();
905 
906  if (action == null) {
907  return ErrorResponse.error("Invalid action", Response.Status.BAD_REQUEST);
908  }
909 
910  for (String resourceId : resourceIds) {
911  Resource resource = authorization.getStoreFactory().getResourceStore().findById(resourceId, null);
912 
913  if (resource == null) {
914  return ErrorResponse.error("Invalid resource", Response.Status.BAD_REQUEST);
915  }
916 
917  HashMap<String, String> filters = new HashMap<>();
918 
919  filters.put(PermissionTicket.REQUESTER, auth.getUser().getId());
920  filters.put(PermissionTicket.RESOURCE, resource.getId());
921 
922  if ("cancel".equals(action)) {
923  filters.put(PermissionTicket.GRANTED, Boolean.TRUE.toString());
924  } else if ("cancelRequest".equals(action)) {
925  filters.put(PermissionTicket.GRANTED, Boolean.FALSE.toString());
926  }
927 
928  for (PermissionTicket ticket : ticketStore.find(filters, resource.getResourceServer().getId(), -1, -1)) {
929  ticketStore.delete(ticket.getId());
930  }
931  }
932 
933  return forwardToPage("authorization", AccountPages.RESOURCES);
934  }
Auth auth
Definition: AbstractSecuredLocalService.java:70
UserModel getUser()
Definition: Auth.java:59
KeycloakSession session
Definition: AbstractSecuredLocalService.java:67
Response forwardToPage(String path, AccountPages page)
Definition: AccountFormService.java:191

◆ processRevokeGrant()

Response org.keycloak.services.resources.account.AccountFormService.processRevokeGrant ( final MultivaluedMap< String, String >  formData)
inline
405  {
406  if (auth == null) {
407  return login("applications");
408  }
409 
410  auth.require(AccountRoles.MANAGE_ACCOUNT);
411  csrfCheck(formData);
412 
413  String clientId = formData.getFirst("clientId");
414  if (clientId == null) {
415  return account.setError(Response.Status.BAD_REQUEST, Messages.CLIENT_NOT_FOUND).createResponse(AccountPages.APPLICATIONS);
416  }
417  ClientModel client = realm.getClientById(clientId);
418  if (client == null) {
419  return account.setError(Response.Status.BAD_REQUEST, Messages.CLIENT_NOT_FOUND).createResponse(AccountPages.APPLICATIONS);
420  }
421 
422  // Revoke grant in UserModel
423  UserModel user = auth.getUser();
424  session.users().revokeConsentForClient(realm, user.getId(), client.getId());
425  new UserSessionManager(session).revokeOfflineToken(user, client);
426 
427  // Logout clientSessions for this user and client
428  AuthenticationManager.backchannelLogoutUserFromClient(session, realm, user, client, session.getContext().getUri(), headers);
429 
430  event.event(EventType.REVOKE_GRANT).client(auth.getClient()).user(auth.getUser()).detail(Details.REVOKED_CLIENT, client.getClientId()).success();
432 
433  UriBuilder builder = Urls.accountBase(session.getContext().getUri().getBaseUri()).path(AccountFormService.class, "applicationsPage");
434  String referrer = session.getContext().getUri().getQueryParameters().getFirst("referrer");
435  if (referrer != null) {
436  builder.queryParam("referrer", referrer);
437 
438  }
439  URI location = builder.build(realm.getName());
440  return Response.seeOther(location).build();
441  }
void csrfCheck(final MultivaluedMap< String, String > formData)
Definition: AccountFormService.java:1048
ClientModel getClient()
Definition: Auth.java:63
HttpHeaders headers
Definition: AbstractSecuredLocalService.java:62
Auth auth
Definition: AbstractSecuredLocalService.java:70
Response login(String path)
Definition: AbstractSecuredLocalService.java:132
UserModel getUser()
Definition: Auth.java:59
AccountProvider account
Definition: AccountFormService.java:127
KeycloakSession session
Definition: AbstractSecuredLocalService.java:67
RealmModel realm
Definition: AbstractSecuredLocalService.java:59
final ClientModel client
Definition: AbstractSecuredLocalService.java:58
void setReferrerOnPage()
Definition: AccountFormService.java:226
AccountFormService(RealmModel realm, ClientModel client, EventBuilder event)
Definition: AccountFormService.java:130
void require(String role)
Definition: Auth.java:83

◆ processSessionsLogout()

Response org.keycloak.services.resources.account.AccountFormService.processSessionsLogout ( final MultivaluedMap< String, String >  formData)
inline
373  {
374  if (auth == null) {
375  return login("sessions");
376  }
377 
378  auth.require(AccountRoles.MANAGE_ACCOUNT);
379  csrfCheck(formData);
380 
381  UserModel user = auth.getUser();
382 
383  // Rather decrease time a bit. To avoid situation when user is immediatelly redirected to login screen, then automatically authenticated (eg. with Kerberos) and then seeing issues due the stale token
384  // as time on the token will be same like notBefore
385  session.users().setNotBeforeForUser(realm, user, Time.currentTime() - 1);
386 
387  List<UserSessionModel> userSessions = session.sessions().getUserSessions(realm, user);
388  for (UserSessionModel userSession : userSessions) {
389  AuthenticationManager.backchannelLogout(session, realm, userSession, session.getContext().getUri(), clientConnection, headers, true);
390  }
391 
392  UriBuilder builder = Urls.accountBase(session.getContext().getUri().getBaseUri()).path(AccountFormService.class, "sessionsPage");
393  String referrer = session.getContext().getUri().getQueryParameters().getFirst("referrer");
394  if (referrer != null) {
395  builder.queryParam("referrer", referrer);
396 
397  }
398  URI location = builder.build(realm.getName());
399  return Response.seeOther(location).build();
400  }
void csrfCheck(final MultivaluedMap< String, String > formData)
Definition: AccountFormService.java:1048
HttpHeaders headers
Definition: AbstractSecuredLocalService.java:62
Auth auth
Definition: AbstractSecuredLocalService.java:70
Response login(String path)
Definition: AbstractSecuredLocalService.java:132
ClientConnection clientConnection
Definition: AbstractSecuredLocalService.java:64
UserModel getUser()
Definition: Auth.java:59
KeycloakSession session
Definition: AbstractSecuredLocalService.java:67
RealmModel realm
Definition: AbstractSecuredLocalService.java:59
AccountFormService(RealmModel realm, ClientModel client, EventBuilder event)
Definition: AccountFormService.java:130
void require(String role)
Definition: Auth.java:83

◆ processTotpUpdate()

Response org.keycloak.services.resources.account.AccountFormService.processTotpUpdate ( final MultivaluedMap< String, String >  formData)
inline

Update the TOTP for this account.

form parameters:

totp - otp generated by authenticator totpSecret - totp secret to register

引数
formData
戻り値
457  {
458  if (auth == null) {
459  return login("totp");
460  }
461 
462  auth.require(AccountRoles.MANAGE_ACCOUNT);
463 
464  account.setAttribute("mode", session.getContext().getUri().getQueryParameters().getFirst("mode"));
465 
466  String action = formData.getFirst("submitAction");
467  if (action != null && action.equals("Cancel")) {
469  return account.createResponse(AccountPages.TOTP);
470  }
471 
472  csrfCheck(formData);
473 
474  UserModel user = auth.getUser();
475 
476  if (action != null && action.equals("Delete")) {
477  session.userCredentialManager().disableCredentialType(realm, user, CredentialModel.OTP);
478 
479  event.event(EventType.REMOVE_TOTP).client(auth.getClient()).user(auth.getUser()).success();
480 
482  return account.setSuccess(Messages.SUCCESS_TOTP_REMOVED).createResponse(AccountPages.TOTP);
483  } else {
484  String totp = formData.getFirst("totp");
485  String totpSecret = formData.getFirst("totpSecret");
486 
487  if (Validation.isBlank(totp)) {
489  return account.setError(Response.Status.BAD_REQUEST, Messages.MISSING_TOTP).createResponse(AccountPages.TOTP);
490  } else if (!CredentialValidation.validOTP(realm, totp, totpSecret)) {
492  return account.setError(Response.Status.BAD_REQUEST, Messages.INVALID_TOTP).createResponse(AccountPages.TOTP);
493  }
494 
495  UserCredentialModel credentials = new UserCredentialModel();
496  credentials.setType(realm.getOTPPolicy().getType());
497  credentials.setValue(totpSecret);
498  session.userCredentialManager().updateCredential(realm, user, credentials);
499 
500  // to update counter
501  UserCredentialModel cred = new UserCredentialModel();
502  cred.setType(realm.getOTPPolicy().getType());
503  cred.setValue(totp);
504  session.userCredentialManager().isValid(realm, user, cred);
505 
506  event.event(EventType.UPDATE_TOTP).client(auth.getClient()).user(auth.getUser()).success();
507 
509  return account.setSuccess(Messages.SUCCESS_TOTP).createResponse(AccountPages.TOTP);
510  }
511  }
void csrfCheck(final MultivaluedMap< String, String > formData)
Definition: AccountFormService.java:1048
ClientModel getClient()
Definition: Auth.java:63
Auth auth
Definition: AbstractSecuredLocalService.java:70
Response login(String path)
Definition: AbstractSecuredLocalService.java:132
UserModel getUser()
Definition: Auth.java:59
AccountProvider account
Definition: AccountFormService.java:127
KeycloakSession session
Definition: AbstractSecuredLocalService.java:67
RealmModel realm
Definition: AbstractSecuredLocalService.java:59
void setReferrerOnPage()
Definition: AccountFormService.java:226
void require(String role)
Definition: Auth.java:83

◆ resourceDetailPage()

Response org.keycloak.services.resources.account.AccountFormService.resourceDetailPage ( @PathParam("resource_id") String  resourceId)
inline
712  {
713  return forwardToPage("resource-detail", AccountPages.RESOURCE_DETAIL);
714  }
Response forwardToPage(String path, AccountPages page)
Definition: AccountFormService.java:191

◆ resourcesPage()

Response org.keycloak.services.resources.account.AccountFormService.resourcesPage ( @QueryParam("resource_id") String  resourceId)
inline
706  {
707  return forwardToPage("resources", AccountPages.RESOURCES);
708  }
Response forwardToPage(String path, AccountPages page)
Definition: AccountFormService.java:191

◆ sessionsPage()

Response org.keycloak.services.resources.account.AccountFormService.sessionsPage ( )
inline
296  {
297  if (auth != null) {
298  account.setSessions(session.sessions().getUserSessions(realm, auth.getUser()));
299  }
300  return forwardToPage("sessions", AccountPages.SESSIONS);
301  }
Auth auth
Definition: AbstractSecuredLocalService.java:70
UserModel getUser()
Definition: Auth.java:59
AccountProvider account
Definition: AccountFormService.java:127
KeycloakSession session
Definition: AbstractSecuredLocalService.java:67
RealmModel realm
Definition: AbstractSecuredLocalService.java:59
Response forwardToPage(String path, AccountPages page)
Definition: AccountFormService.java:191

◆ setReferrerOnPage()

void org.keycloak.services.resources.account.AccountFormService.setReferrerOnPage ( )
inlineprivate
226  {
227  String[] referrer = getReferrer();
228  if (referrer != null) {
229  account.setReferrer(referrer);
230  }
231  }
String [] getReferrer()
Definition: AccountFormService.java:949
AccountProvider account
Definition: AccountFormService.java:127

◆ shareResource()

Response org.keycloak.services.resources.account.AccountFormService.shareResource ( @PathParam("resource_id") String  resourceId,
@FormParam("user_id") String []  userIds,
@FormParam("scope_id") String []  scopes 
)
inline
826  {
827  AuthorizationProvider authorization = session.getProvider(AuthorizationProvider.class);
828  PermissionTicketStore ticketStore = authorization.getStoreFactory().getPermissionTicketStore();
829  Resource resource = authorization.getStoreFactory().getResourceStore().findById(resourceId, null);
830 
831  if (resource == null) {
832  return ErrorResponse.error("Invalid resource", Response.Status.BAD_REQUEST);
833  }
834 
835  if (userIds == null || userIds.length == 0) {
836  return account.setError(Status.BAD_REQUEST, Messages.MISSING_PASSWORD).createResponse(AccountPages.PASSWORD);
837  }
838 
839  for (String id : userIds) {
840  UserModel user = session.users().getUserById(id, realm);
841 
842  if (user == null) {
843  user = session.users().getUserByUsername(id, realm);
844  }
845 
846  if (user == null) {
847  user = session.users().getUserByEmail(id, realm);
848  }
849 
850  if (user == null) {
851  return account.setError(Status.BAD_REQUEST, Messages.INVALID_USER).createResponse(AccountPages.RESOURCE_DETAIL);
852  }
853 
854  Map<String, String> filters = new HashMap<>();
855 
856  filters.put(PermissionTicket.RESOURCE, resource.getId());
857  filters.put(PermissionTicket.OWNER, auth.getUser().getId());
858  filters.put(PermissionTicket.REQUESTER, user.getId());
859 
860  List<PermissionTicket> tickets = ticketStore.find(filters, resource.getResourceServer().getId(), -1, -1);
861 
862  if (tickets.isEmpty()) {
863  if (scopes != null && scopes.length > 0) {
864  for (String scope : scopes) {
865  PermissionTicket ticket = ticketStore.create(resourceId, scope, user.getId(), resource.getResourceServer());
866  ticket.setGrantedTimestamp(System.currentTimeMillis());
867  }
868  } else {
869  if (resource.getScopes().isEmpty()) {
870  PermissionTicket ticket = ticketStore.create(resourceId, null, user.getId(), resource.getResourceServer());
871  ticket.setGrantedTimestamp(System.currentTimeMillis());
872  } else {
873  for (Scope scope : resource.getScopes()) {
874  PermissionTicket ticket = ticketStore.create(resourceId, scope.getId(), user.getId(), resource.getResourceServer());
875  ticket.setGrantedTimestamp(System.currentTimeMillis());
876  }
877  }
878  }
879  } else if (scopes != null && scopes.length > 0) {
880  List<String> grantScopes = new ArrayList<>(Arrays.asList(scopes));
881 
882  for (PermissionTicket ticket : tickets) {
883  Scope scope = ticket.getScope();
884 
885  if (scope != null) {
886  grantScopes.remove(scope.getId());
887  }
888  }
889 
890  for (String grantScope : grantScopes) {
891  PermissionTicket ticket = ticketStore.create(resourceId, grantScope, user.getId(), resource.getResourceServer());
892  ticket.setGrantedTimestamp(System.currentTimeMillis());
893  }
894  }
895  }
896 
897  return forwardToPage("resource-detail", AccountPages.RESOURCE_DETAIL);
898  }
Auth auth
Definition: AbstractSecuredLocalService.java:70
UserModel getUser()
Definition: Auth.java:59
AccountProvider account
Definition: AccountFormService.java:127
KeycloakSession session
Definition: AbstractSecuredLocalService.java:67
RealmModel realm
Definition: AbstractSecuredLocalService.java:59
Response forwardToPage(String path, AccountPages page)
Definition: AccountFormService.java:191

◆ totpPage()

Response org.keycloak.services.resources.account.AccountFormService.totpPage ( )
inline
250  {
251  account.setAttribute("mode", session.getContext().getUri().getQueryParameters().getFirst("mode"));
252  return forwardToPage("totp", AccountPages.TOTP);
253  }
AccountProvider account
Definition: AccountFormService.java:127
KeycloakSession session
Definition: AbstractSecuredLocalService.java:67
Response forwardToPage(String path, AccountPages page)
Definition: AccountFormService.java:191

◆ totpUrl()

static UriBuilder org.keycloak.services.resources.account.AccountFormService.totpUrl ( UriBuilder  base)
inlinestatic
245  {
246  return RealmsResource.accountUrl(base).path(AccountFormService.class, "totpPage");
247  }
AccountFormService(RealmModel realm, ClientModel client, EventBuilder event)
Definition: AccountFormService.java:130

◆ updateEmail()

void org.keycloak.services.resources.account.AccountFormService.updateEmail ( String  email,
UserModel  user,
KeycloakSession  session,
EventBuilder  event 
)
inlineprivate
1019  {
1020  RealmModel realm = session.getContext().getRealm();
1021  String oldEmail = user.getEmail();
1022  boolean emailChanged = oldEmail != null ? !oldEmail.equals(email) : email != null;
1023  if (emailChanged && !realm.isDuplicateEmailsAllowed()) {
1024  UserModel existing = session.users().getUserByEmail(email, realm);
1025  if (existing != null && !existing.getId().equals(user.getId())) {
1026  throw new ModelDuplicateException(Messages.EMAIL_EXISTS);
1027  }
1028  }
1029 
1030  user.setEmail(email);
1031 
1032  if (emailChanged) {
1033  user.setEmailVerified(false);
1034  event.clone().event(EventType.UPDATE_EMAIL).detail(Details.PREVIOUS_EMAIL, oldEmail).detail(Details.UPDATED_EMAIL, email).success();
1035  }
1036 
1037  if (realm.isRegistrationEmailAsUsername()) {
1038  if (!realm.isDuplicateEmailsAllowed()) {
1039  UserModel existing = session.users().getUserByEmail(email, realm);
1040  if (existing != null && !existing.getId().equals(user.getId())) {
1041  throw new ModelDuplicateException(Messages.USERNAME_EXISTS);
1042  }
1043  }
1044  user.setUsername(email);
1045  }
1046  }
KeycloakSession session
Definition: AbstractSecuredLocalService.java:67
RealmModel realm
Definition: AbstractSecuredLocalService.java:59

◆ updateUsername()

void org.keycloak.services.resources.account.AccountFormService.updateUsername ( String  username,
UserModel  user,
KeycloakSession  session 
)
inlineprivate
1002  {
1003  RealmModel realm = session.getContext().getRealm();
1004  boolean usernameChanged = username == null || !user.getUsername().equals(username);
1005  if (realm.isEditUsernameAllowed() && !realm.isRegistrationEmailAsUsername()) {
1006  if (usernameChanged) {
1007  UserModel existing = session.users().getUserByUsername(username, realm);
1008  if (existing != null && !existing.getId().equals(user.getId())) {
1009  throw new ModelDuplicateException(Messages.USERNAME_EXISTS);
1010  }
1011 
1012  user.setUsername(username);
1013  }
1014  } else if (usernameChanged) {
1015 
1016  }
1017  }
KeycloakSession session
Definition: AbstractSecuredLocalService.java:67
RealmModel realm
Definition: AbstractSecuredLocalService.java:59

メンバ詳解

◆ account

AccountProvider org.keycloak.services.resources.account.AccountFormService.account
private

◆ ACCOUNT_MGMT_FORWARDED_ERROR_NOTE

final String org.keycloak.services.resources.account.AccountFormService.ACCOUNT_MGMT_FORWARDED_ERROR_NOTE = "ACCOUNT_MGMT_FORWARDED_ERROR"
static

◆ auth

Auth org.keycloak.services.resources.AbstractSecuredLocalService.auth
protectedinherited

◆ authManager

final AppAuthManager org.keycloak.services.resources.account.AccountFormService.authManager
private

◆ client

final ClientModel org.keycloak.services.resources.AbstractSecuredLocalService.client
protectedinherited

◆ clientConnection

ClientConnection org.keycloak.services.resources.AbstractSecuredLocalService.clientConnection
protectedinherited

◆ event

EventBuilder org.keycloak.services.resources.account.AccountFormService.event
private

◆ eventStore

EventStoreProvider org.keycloak.services.resources.account.AccountFormService.eventStore
private

◆ headers

HttpHeaders org.keycloak.services.resources.AbstractSecuredLocalService.headers
protectedinherited

◆ logger

final Logger org.keycloak.services.resources.account.AccountFormService.logger = Logger.getLogger(AccountFormService.class)
staticprivate

◆ realm

RealmModel org.keycloak.services.resources.AbstractSecuredLocalService.realm
protectedinherited

◆ request

HttpRequest org.keycloak.services.resources.AbstractSecuredLocalService.request
protectedinherited

◆ session

KeycloakSession org.keycloak.services.resources.AbstractSecuredLocalService.session
protectedinherited

◆ stateChecker

String org.keycloak.services.resources.AbstractSecuredLocalService.stateChecker
protectedinherited

◆ VALID_PATHS

Set<String> org.keycloak.services.resources.account.AccountFormService.VALID_PATHS = new HashSet<String>()
staticprivate

このクラス詳解は次のファイルから抽出されました: