-
-
Notifications
You must be signed in to change notification settings - Fork 3.9k
/
AcceptableUsagePolicyWebflowConfigurer.java
108 lines (94 loc) · 4.84 KB
/
AcceptableUsagePolicyWebflowConfigurer.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
package org.apereo.cas.web.flow;
import org.apereo.cas.configuration.CasConfigurationProperties;
import org.apereo.cas.web.flow.configurer.AbstractCasWebflowConfigurer;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationContext;
import org.springframework.webflow.definition.registry.FlowDefinitionRegistry;
import org.springframework.webflow.engine.ActionState;
import org.springframework.webflow.engine.Flow;
import org.springframework.webflow.engine.TransitionSet;
import org.springframework.webflow.engine.ViewState;
import org.springframework.webflow.engine.builder.support.FlowBuilderServices;
/**
* The {@link AcceptableUsagePolicyWebflowConfigurer} is responsible for
* adjusting the CAS webflow context for aup integration.
*
* @author Misagh Moayyed
* @since 4.2
*/
@Slf4j
public class AcceptableUsagePolicyWebflowConfigurer extends AbstractCasWebflowConfigurer {
private static final String VIEW_ID_ACCEPTABLE_USAGE_POLICY_VIEW = "acceptableUsagePolicyView";
private static final String AUP_ACCEPTED_ACTION = "aupAcceptedAction";
private static final String STATE_ID_AUP_CHECK = "acceptableUsagePolicyCheck";
public AcceptableUsagePolicyWebflowConfigurer(final FlowBuilderServices flowBuilderServices,
final FlowDefinitionRegistry loginFlowDefinitionRegistry,
final ApplicationContext applicationContext,
final CasConfigurationProperties casProperties) {
super(flowBuilderServices, loginFlowDefinitionRegistry, applicationContext, casProperties);
}
@Override
protected void doInitialize() {
final Flow flow = getLoginFlow();
if (flow != null) {
createVerifyActionState(flow);
createAcceptableUsagePolicyView(flow);
createSubmitActionState(flow);
createTransitionStateToAcceptableUsagePolicy(flow);
}
}
/**
* Create transition state to acceptable usage policy.
*
* @param flow the flow
*/
protected void createTransitionStateToAcceptableUsagePolicy(final Flow flow) {
final ActionState submit = getRealSubmissionState(flow);
createTransitionForState(submit, CasWebflowConstants.TRANSITION_ID_SUCCESS, STATE_ID_AUP_CHECK, true);
}
/**
* Gets real submission state.
*
* @param flow the flow
* @return the real submission state
*/
protected ActionState getRealSubmissionState(final Flow flow) {
return getState(flow, CasWebflowConstants.STATE_ID_REAL_SUBMIT, ActionState.class);
}
/**
* Create submit action state.
*
* @param flow the flow
*/
protected void createSubmitActionState(final Flow flow) {
final ActionState aupAcceptedAction = createActionState(flow, AUP_ACCEPTED_ACTION, "acceptableUsagePolicySubmitAction");
final String target = getRealSubmissionState(flow).getTransition(CasWebflowConstants.TRANSITION_ID_SUCCESS).getTargetStateId();
final TransitionSet transitionSet = aupAcceptedAction.getTransitionSet();
transitionSet.add(createTransition(CasWebflowConstants.TRANSITION_ID_SUCCESS, target));
transitionSet.add(createTransition(CasWebflowConstants.TRANSITION_ID_ERROR, CasWebflowConstants.STATE_ID_INIT_LOGIN_FORM));
}
/**
* Create acceptable usage policy view.
*
* @param flow the flow
*/
protected void createAcceptableUsagePolicyView(final Flow flow) {
final ViewState viewState = createViewState(flow, VIEW_ID_ACCEPTABLE_USAGE_POLICY_VIEW, "casAcceptableUsagePolicyView");
createTransitionForState(viewState, CasWebflowConstants.TRANSITION_ID_SUBMIT, AUP_ACCEPTED_ACTION);
}
/**
* Create verify action state.
*
* @param flow the flow
*/
protected void createVerifyActionState(final Flow flow) {
final ActionState actionState = createActionState(flow, STATE_ID_AUP_CHECK, "acceptableUsagePolicyVerifyAction");
final String target = getRealSubmissionState(flow).getTransition(CasWebflowConstants.TRANSITION_ID_SUCCESS).getTargetStateId();
final TransitionSet transitionSet = actionState.getTransitionSet();
transitionSet.add(createTransition(CasWebflowConstants.TRANSITION_ID_SUCCESS, target));
transitionSet.add(createTransition(AcceptableUsagePolicyVerifyAction.EVENT_ID_MUST_ACCEPT, VIEW_ID_ACCEPTABLE_USAGE_POLICY_VIEW));
final ActionState ticketCreateState = getState(flow, CasWebflowConstants.STATE_ID_CREATE_TICKET_GRANTING_TICKET, ActionState.class);
ticketCreateState.getEntryActionList().add(createEvaluateAction("acceptableUsagePolicyVerifyAction"));
createTransitionForState(ticketCreateState, AcceptableUsagePolicyVerifyAction.EVENT_ID_MUST_ACCEPT, VIEW_ID_ACCEPTABLE_USAGE_POLICY_VIEW);
}
}