Commit cdf6c0f9 authored by Σταύρος Παπαδάκης's avatar Σταύρος Παπαδάκης

Merge branch 'apimanagersample' into 'master'

Sample custom mediation for API manager

See merge request !2
parents 7bc5a672 a2fb27ff
package gr.gov.minedu.osteam;
import org.apache.synapse.MessageContext;
import org.apache.synapse.mediators.AbstractMediator;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Base64;
import java.security.*;
public class AcademicIdentityAuthMediator extends AbstractMediator {
private static final DateFormat ts = new SimpleDateFormat("MM/dd HH:mm:ss");
private void mylog(String msg) {
Date date = new Date();
String outMsg = this.getClass().getSimpleName() + " :: " + format(date) + " :: " + msg;
System.out.println(outMsg);
return;
}
public boolean mediate(MessageContext context) {
// defaults: these can also be provided as PROPERTIES
String username = (context.getProperty("uri.var.username") == null) ? "uname"
: context.getProperty("uri.var.username").toString();
String password = (context.getProperty("uri.var.password") == null) ? "password"
: context.getProperty("uri.var.password").toString();
// set the properties IF NEEDED
context.setProperty("username", username);
context.setProperty("password", password);
context.setProperty("auth", "");
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(password.getBytes("UTF-8"));
byte[] HashedPasswordBytes = md.digest();
StringBuffer stringBuffer = new StringBuffer();
for (byte bytes : HashedPasswordBytes) {
stringBuffer.append(String.format("%02x", bytes & 0xff));
}
String userpass = username + ":" + stringBuffer.toString();
String basicAuth = "Basic " + new String(Base64.getEncoder().encode(userpass.getBytes()));
context.setProperty("auth", basicAuth);
} catch (Exception ex) {
ex.printStackTrace();
}
mylog("--------------------------------------------------");
mylog("MEDIATOR CLASS URI VARS " + context.getProperty("uri.var.username") + " , " + context.getProperty("uri.var.password") + " , " + context.getProperty("uri.var.identity"));
mylog("--------------------------------------------------");
mylog("MEDIATOR CLASS IN CONTEXT " + context.getProperty("username") + " , " + context.getProperty("password") + " , " + context.getProperty("auth"));
return true;
}
}
# Κατανάλωση του Academic ID service με mediation από τον API manager
Η κατανάλωση μπορεί να γίνει και με mediation από τον API manager.
Σε ένα απλό σενάριο χρήσης ο mediator μπορεί να θέσει το εξειδικευμένο
authentication header και να παράγει το απαραίτητο μήνυμα για αποστολή.
## Mediation sequence
Το [mediation sequence](sequence.xml) υλοποιεί ένα απλό σενάριο κλήσης
στο οποίο πραγματοποιούνται οι λειτουργίες:
1. Κλήση με class mediator του custom mediator `gr.gov.minedu.osteam.AcademicIdentityAuthMediator` ο οποίος κατασκευάζει το εξειδικευμένο authentication header
2. Καθορισμός του Authorization header στο μήνυμα
3. Κατασκευή του payload - json message που παίρνει από το path το identity για το οποίο γίνεται η κλήση
4. Ορισμός μεθόδου σε POST
5. Καθαρισμός του URL για την τελική κλήση
```xml
<?xml version="1.0" encoding="UTF-8"?>
<sequence name="acad05" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
<class description="calculate auth" name="gr.gov.minedu.osteam.AcademicIdentityAuthMediator"/>
<property name="messageType" scope="axis2" type="STRING" value="application/json"/>
<property description="Set authorization"
expression="get-property('auth')" name="Authorization"
scope="transport" type="STRING"/>
<payloadFactory description="" media-type="json">
<format>{ "SubmissionCode": "$1" }</format>
<args>
<arg evaluator="xml" expression="$ctx:uri.var.identity"/>
</args>
</payloadFactory>
<property description="Set request method to POST" name="HTTP_METHOD"
scope="axis2" type="STRING" value="POST"/>
<property description="Clear postfix" name="REST_URL_POSTFIX"
scope="axis2" type="STRING" value=""/>
<log level="full"/>
</sequence>
```
## Προσαρμοσμένος mediator
Στο αρχείο [AcademicIdentityAuthMediator.java](AcademicIdentityAuthMediator.java) παρατίθεται δείγμα κώδικα για τον προσαρμοσμένο mediator.
<sequence name="acad05" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
<class description="calculate auth" name="gr.gov.minedu.osteam.AcademicIdentityAuthMediator"/>
<property name="messageType" scope="axis2" type="STRING" value="application/json"/>
<property description="Set authorization"
expression="get-property('auth')" name="Authorization"
scope="transport" type="STRING"/>
<payloadFactory description="" media-type="json">
<format>{ "SubmissionCode": "$1" }</format>
<args>
<arg evaluator="xml" expression="$ctx:uri.var.identity"/>
</args>
</payloadFactory>
<property description="Set request method to POST" name="HTTP_METHOD"
scope="axis2" type="STRING" value="POST"/>
<property description="Clear postfix" name="REST_URL_POSTFIX"
scope="axis2" type="STRING" value=""/>
<log level="full"/>
</sequence>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment