mirror of
https://github.com/keycloak/keycloak.git
synced 2026-01-09 15:02:05 -03:30
Realign source code examples in auth-spi doc
closes #43757 Signed-off-by: olympus5 <erwan.iquel@gmail.com>
This commit is contained in:
parent
12d4146eb9
commit
ffed84194e
@ -453,7 +453,7 @@ public boolean isValid(RealmModel realm, UserModel user, CredentialInput input)
|
||||
if (challengeResponse == null) {
|
||||
return false;
|
||||
}
|
||||
CredentialModel credentialModel = getCredentialStore().getStoredCredentialById(realm, user, input.getCredentialId());
|
||||
CredentialModel credentialModel = user.credentialManager().getStoredCredentialById(input.getCredentialId());
|
||||
SecretQuestionCredentialModel sqcm = getCredentialFromModel(credentialModel);
|
||||
return sqcm.getSecretQuestionSecretData().getAnswer().equals(challengeResponse);
|
||||
}
|
||||
@ -473,7 +473,7 @@ public boolean supportsCredentialType(String credentialType) {
|
||||
@Override
|
||||
public boolean isConfiguredFor(RealmModel realm, UserModel user, String credentialType) {
|
||||
if (!supportsCredentialType(credentialType)) return false;
|
||||
return !getCredentialStore().getStoredCredentialsByType(realm, user, credentialType).isEmpty();
|
||||
return user.credentialManager().getStoredCredentialsByTypeStream(credentialType).findAny().isPresent();
|
||||
}
|
||||
----
|
||||
|
||||
@ -519,7 +519,7 @@ Here is the implementation of the setRequiredActions() method.
|
||||
----
|
||||
@Override
|
||||
public void setRequiredActions(KeycloakSession session, RealmModel realm, UserModel user) {
|
||||
user.addRequiredAction("SECRET_QUESTION_CONFIG");
|
||||
user.addRequiredAction(SecretQuestionRequiredAction.PROVIDER_ID);
|
||||
}
|
||||
----
|
||||
|
||||
@ -631,11 +631,13 @@ protected void setCookie(AuthenticationFlowContext context) {
|
||||
|
||||
}
|
||||
URI uri = context.getUriInfo().getBaseUriBuilder().path("realms").path(context.getRealm().getName()).build();
|
||||
addCookie(context, "SECRET_QUESTION_ANSWERED", "true",
|
||||
uri.getRawPath(),
|
||||
null, null,
|
||||
maxCookieAge,
|
||||
false, true);
|
||||
|
||||
NewCookie newCookie = new NewCookie.Builder("SECRET_QUESTION_ANSWERED").value("true")
|
||||
.path(uri.getRawPath())
|
||||
.maxAge(maxCookieAge)
|
||||
.secure(false)
|
||||
.build();
|
||||
context.getSession().getContext().getHttpResponse().setCookieIfAbsent(newCookie);
|
||||
}
|
||||
----
|
||||
|
||||
@ -647,7 +649,7 @@ The config values can be defined within the Admin Console if you set up config d
|
||||
[source,java]
|
||||
----
|
||||
@Override
|
||||
public CredentialTypeMetadata getCredentialTypeMetadata(CredentialTypeMetadataContext metadataContext) {
|
||||
public CredentialTypeMetadata getCredentialTypeMetadata(CredentialTypeMetadataContext metadataContext) {
|
||||
return CredentialTypeMetadata.builder()
|
||||
.type(getType())
|
||||
.category(CredentialTypeMetadata.Category.TWO_FACTOR)
|
||||
@ -656,7 +658,7 @@ The config values can be defined within the Admin Console if you set up config d
|
||||
.createAction(SecretQuestionAuthenticatorFactory.PROVIDER_ID)
|
||||
.removeable(false)
|
||||
.build(session);
|
||||
}
|
||||
}
|
||||
----
|
||||
|
||||
The last method to implement in the SecretQuestionCredentialProvider class is getCredentialTypeMetadata(CredentialTypeMetadataContext metadataContext), which is an abstract method of the CredentialProvider interface. Each Credential provider has to provide and implement this method. The method returns an instance of CredentialTypeMetadata,
|
||||
@ -805,16 +807,6 @@ When you call AuthenticationFlowContext.form() this gives you a LoginFormsProvid
|
||||
If you called, `LoginFormsProvider.setAttribute("foo", "bar")`, the value of "foo" would be available for reference in your form as `${foo}`.
|
||||
The value of an attribute can be any Java bean as well.
|
||||
|
||||
If you look at the top of the file, you'll see that we are importing a template:
|
||||
|
||||
[source,xml]
|
||||
----
|
||||
<#import "select.ftl" as layout>
|
||||
----
|
||||
|
||||
Importing this template, instead of the standard `template.ftl` allows {project_name} to display a dropdown box that allows the user to select
|
||||
a different credential or execution.
|
||||
|
||||
[[_adding_authenticator]]
|
||||
==== Adding an authenticator to a flow
|
||||
|
||||
@ -860,7 +852,7 @@ This method is responsible for rendering the HTML form that will drive the requi
|
||||
|
||||
@Override
|
||||
public void requiredActionChallenge(RequiredActionContext context) {
|
||||
Response challenge = context.form().createForm("secret_question_config.ftl");
|
||||
Response challenge = context.form().createForm("secret-question-config.ftl");
|
||||
context.challenge(challenge);
|
||||
|
||||
}
|
||||
@ -882,11 +874,9 @@ The action URL of the form will be routed to the RequiredActionProvider.processA
|
||||
|
||||
@Override
|
||||
public void processAction(RequiredActionContext context) {
|
||||
String answer = (context.getHttpRequest().getDecodedFormParameters().getFirst("answer"));
|
||||
UserCredentialValueModel model = new UserCredentialValueModel();
|
||||
model.setValue(answer);
|
||||
model.setType(SecretQuestionAuthenticator.CREDENTIAL_TYPE);
|
||||
context.getUser().updateCredentialDirectly(model);
|
||||
String answer = (context.getHttpRequest().getDecodedFormParameters().getFirst("secret_answer"));
|
||||
SecretQuestionCredentialProvider sqcp = (SecretQuestionCredentialProvider) context.getSession().getProvider(CredentialProvider.class, "secret-question");
|
||||
sqcp.createCredential(context.getRealm(), context.getUser(), SecretQuestionCredentialModel.createSecretQuestion("What is your mom's first name?", answer));
|
||||
context.success();
|
||||
}
|
||||
----
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user