DirectResponseState
Introduction and overview
This AuthState can be used to send a direct HTTP response to an end user / client by forcing nevisProxy to directly forward the response.
An example is a situation where nevisAuth needs to send a JSON response to a web application. As the DirectResponseState does nothing but generating a response, it should be used as a final AuthState and the resumeState flag should be set to false.
A typical example where the DirectResponseState can be used is in the context of a mobile application: Depending on whether the authentication was successful or not, nevisAuth will send different JSON content in the HTTP response.
Description
The following table describes the characteristics of the AuthState.
| Topic | Description | 
|---|---|
| Class | ch.nevis.esauth.auth.states.directResponse.DirectResponseState | 
| Logging | DirectResponseState | 
| Auditing | none | 
| Marker | none | 
| Properties | contentType (string, - )This optional property defines the Content-Type header field of the HTTP response. It must be set if the content property is set. | 
content (string, -)This optional property defines the content of the HTTP response. The value can be a URL of a file, starting with file://. For example:<property name="content" value="file://path/to/my/file"/>.nevisAuth does not have to be restarted when the file content changes. | |
| statusCode (string, "200")This property defines the status code of the HTTP response status line. | |
header.<header-field> (string, -)Optional properties to define custom HTTP response header fields. | |
| Methods | process generate | 
| Transitions | none (should only be used as final AuthState) | 
| Input | none | 
| Output | An HTTP response containing the fields and content defined in the properties. | 
| Errors | none | 
Example 1
The following DirectResponseState definition is used when the processing has failed. It sends a JSON response with an attribute called ErrorCode, whose value is 150: {ErrorCode: "150"}
<AuthState class="ch.nevis.esauth.auth.states.directResponse.DirectResponseState"
final="false"
name="GenMob-AuthErrGeneric"
resumeState="false">
 <Response value="AUTH_ERROR">
 <!-- This is not necessary but is kept here to avoid a warning -->
 <Gui name="DummyGui" />
 </Response>
 <property name="content" value="{ "ErrorCode":"150" }" />
 <property name="contentType" value="application/json" />
 <property name="statusCode" value="401" />
</AuthState>
The following DirectResponseState definition can be used when the processing was successful and sends a JSON response with an attribute called message whose value is login successful: {message: "login successful"}
<AuthState
name="GenMob-Ok"
class="ch.nevis.esauth.auth.states.directResponse.DirectResponseState"
final="true"
resumeState="false">
 <Response value="AUTH_DONE"/>
 <property name="contentType" value="application/json"/>
 <property name="content" value="{"message":"login successful"}"/>
 <property name="header.Expires" value="Tue, 15 Nov 2020 08:12:31 GMT"/>
</AuthState>
The AuthStates can be referenced by other AuthStates. For example, the following AuthState will use the previously defined DirectResponseStates, which depends on the result condition:
<AuthState
class="ch.nevis.esauth.auth.states.xml.DocumentProcessor"
final="false"
name="GenMob-Ok"
resumeState="true">
 <ResultCond name="default" next="GenMob-AuthErrGeneric" />
 <ResultCond name="ok" next="GenMob-Ok" />
...
Example 2
<AuthState
name="DirectResponse"
class="ch.nevis.esauth.auth.states.directResponse.DirectResponseState"
final="true"
resumeState="false">
 <Response value="AUTH_ERROR"/>
 <property name="contentType" value="application/json"/>
 <property name="content" value="{"Error Message":"${notes.lasterrorinfo}"}"/>
 <property name="statusCode" value="401"/>
 <property name="header.Expires" value="Tue, 15 Nov 2020 08:12:31 GMT"/>
</AuthState>
Example 3
The following example uses the contents in the session to generates a JSON response providing the authentication level stored in the notes in the JSON status attribute:
<AuthState
class="ch.nevis.esauth.auth.states.directResponse.DirectResponseState"
final="false"
name="GenMob-RegNewDevAuthDoneResponse"
resumeState="false">
 <Response value="AUTH_DONE">
 <Gui name="AuthDoneDialog" />
 </Response>
 <property name="content" value="{ "status":"${notes:authlevel}" }" />
 <property name="contentType" value="application/json" />
 <property name="header.isiwebauthstate" value="valid" />
 <property name="statusCode" value="200" />
</AuthState>