mirror of
https://github.com/opennetworkinglab/onos.git
synced 2025-10-23 05:11:04 +02:00
CORD GUI - Coded up email -> SSID -> Subscriber ID lookup on the server side.
Change-Id: I79715f090a692cfcce744cede88772f79b49f599
This commit is contained in:
parent
48dd9a1b1f
commit
c686c6a7c3
@ -32,6 +32,8 @@ import org.onosproject.cord.gui.model.XosFunctionDescriptor;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.TreeMap;
|
||||
@ -44,12 +46,28 @@ import static org.onosproject.cord.gui.model.XosFunctionDescriptor.URL_FILTER;
|
||||
*/
|
||||
public class CordModelCache extends JsonFactory {
|
||||
|
||||
private static final String KEY_SSID_MAP = "ssidmap";
|
||||
// FIXME: should not be a colon in the key..... Scott to fix on XOS
|
||||
private static final String KEY_SSID = "service_specific_id:";
|
||||
private static final String KEY_SUB_ID = "subscriber_id";
|
||||
|
||||
private static final int DEMO_SSID = 1234;
|
||||
|
||||
private static final String EMAIL_0 = "john@smith.org";
|
||||
private static final String EMAIL_1 = "john@doe.org";
|
||||
|
||||
private static final String EMAIL = "email";
|
||||
private static final String SSID = "ssid";
|
||||
private static final String SUB_ID = "subId";
|
||||
|
||||
private static final String BUNDLE = "bundle";
|
||||
private static final String USERS = "users";
|
||||
private static final String SUB_ID = "subId";
|
||||
private static final String LEVEL = "level";
|
||||
|
||||
private static final Map<Integer, Integer> LOOKUP = new HashMap<>();
|
||||
|
||||
private int subscriberId;
|
||||
private int ssid;
|
||||
private Bundle currentBundle;
|
||||
|
||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||
@ -59,18 +77,76 @@ public class CordModelCache extends JsonFactory {
|
||||
new TreeMap<Integer, SubscriberUser>();
|
||||
|
||||
/**
|
||||
* Constructs a model cache, (retrieving demo subscriber ID),
|
||||
* initializing it with basic bundle, and fetching the list of users.
|
||||
* Constructs a model cache, retrieving a mapping of SSID to XOS Subscriber
|
||||
* IDs from the XOS server.
|
||||
*/
|
||||
CordModelCache() {
|
||||
log.info("Initialize model cache");
|
||||
subscriberId = XosManager.INSTANCE.initXosSubscriber();
|
||||
ObjectNode map = XosManager.INSTANCE.initXosSubscriberLookups();
|
||||
initLookupMap(map);
|
||||
log.info("{} entries in SSID->SubID lookup map", LOOKUP.size());
|
||||
}
|
||||
|
||||
private void initLookupMap(ObjectNode map) {
|
||||
ArrayNode array = (ArrayNode) map.get(KEY_SSID_MAP);
|
||||
Iterator<JsonNode> iter = array.elements();
|
||||
while (iter.hasNext()) {
|
||||
ObjectNode node = (ObjectNode) iter.next();
|
||||
String ssidStr = node.get(KEY_SSID).asText();
|
||||
int ssid = Integer.valueOf(ssidStr);
|
||||
int subId = node.get(KEY_SUB_ID).asInt();
|
||||
LOOKUP.put(ssid, subId);
|
||||
log.info("... binding SSID {} to sub-id {}", ssid, subId);
|
||||
}
|
||||
}
|
||||
|
||||
private int lookupSubId(int ssid) {
|
||||
Integer subId = LOOKUP.get(ssid);
|
||||
if (subId == null) {
|
||||
log.error("Unmapped SSID: {}", ssid);
|
||||
return 0;
|
||||
}
|
||||
return subId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initializes the model for the subscriber account associated with
|
||||
* the given email address.
|
||||
*
|
||||
* @param email the email address
|
||||
*/
|
||||
void init(String email) {
|
||||
// defaults to the demo account
|
||||
int ssid = DEMO_SSID;
|
||||
|
||||
// obviously not scalable, but good enough for demo code...
|
||||
if (EMAIL_0.equals(email)) {
|
||||
ssid = 0;
|
||||
} else if (EMAIL_1.equals(email)) {
|
||||
ssid = 1;
|
||||
}
|
||||
|
||||
this.ssid = ssid;
|
||||
subscriberId = lookupSubId(ssid);
|
||||
XosManager.INSTANCE.setXosUtilsForSubscriber(subscriberId);
|
||||
|
||||
// if we are using the demo account, tell XOS to reset it...
|
||||
if (ssid == DEMO_SSID) {
|
||||
XosManager.INSTANCE.initDemoSubscriber();
|
||||
}
|
||||
|
||||
// NOTE: I think the following should work for non-DEMO account...
|
||||
currentBundle = new Bundle(BundleFactory.BASIC_BUNDLE);
|
||||
initUsers();
|
||||
}
|
||||
|
||||
private void initUsers() {
|
||||
ArrayNode users = XosManager.INSTANCE.getUserList();
|
||||
if (users == null) {
|
||||
log.warn("no user list for SSID {} (subid {})", ssid, subscriberId);
|
||||
return;
|
||||
}
|
||||
|
||||
for (JsonNode u: users) {
|
||||
ObjectNode user = (ObjectNode) u;
|
||||
|
||||
@ -194,6 +270,25 @@ public class CordModelCache extends JsonFactory {
|
||||
|
||||
private void addSubId(ObjectNode root) {
|
||||
root.put(SUB_ID, subscriberId);
|
||||
root.put(SSID, ssid);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns response JSON for login request.
|
||||
* <p>
|
||||
* Depending on which email is used, will bind the GUI to the
|
||||
* appropriate XOS Subscriber ID.
|
||||
*
|
||||
* @param email the supplied email
|
||||
* @return JSON acknowledgement
|
||||
*/
|
||||
public String jsonLogin(String email) {
|
||||
init(email);
|
||||
ObjectNode root = objectNode();
|
||||
root.put(EMAIL, email);
|
||||
addSubId(root);
|
||||
return root.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -52,6 +52,13 @@ public class CordWebResource {
|
||||
|
||||
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||
|
||||
@GET
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
@Path("login/{email}")
|
||||
public Response login(@PathParam("email") String email) {
|
||||
return Response.ok(CordModelCache.INSTANCE.jsonLogin(email)).build();
|
||||
}
|
||||
|
||||
@GET
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
@Path("bundle/{id}")
|
||||
|
@ -85,35 +85,46 @@ public class XosManager {
|
||||
}
|
||||
|
||||
/**
|
||||
* Queries XOS for the Demo Subscriber ID and caches it for future calls.
|
||||
* Queries XOS for the Subscriber ID lookup data, and returns it.
|
||||
*/
|
||||
public int initXosSubscriber() {
|
||||
log.info("intDemoSubscriber() called");
|
||||
public ObjectNode initXosSubscriberLookups() {
|
||||
log.info("intDemoSubscriberLookups() called");
|
||||
xosServerIp = getXosServerIp();
|
||||
xosServerPort = getXosServerPort();
|
||||
log.info("Using XOS server at {}:{}", xosServerIp, xosServerPort);
|
||||
|
||||
xosUtilsRs = new XosManagerRestUtils(xosServerIp, xosServerPort, URI_RS);
|
||||
|
||||
// ask XOS for the subscriber ID of the canned Demo account...
|
||||
String result = xosUtilsRs.getRest("initdemo/");
|
||||
log.info("from XOS: {}", result);
|
||||
// ask XOS for the subscriber ID lookup info
|
||||
String result = xosUtilsRs.getRest("subidlookup/");
|
||||
log.info("lookup data from XOS: {}", result);
|
||||
|
||||
JsonNode node;
|
||||
try {
|
||||
node = MAPPER.readTree(result);
|
||||
} catch (IOException e) {
|
||||
log.error("failed to read demo subscriber JSON", e);
|
||||
return 0;
|
||||
log.error("failed to read subscriber lookup JSON data", e);
|
||||
return null;
|
||||
}
|
||||
return (ObjectNode) node;
|
||||
}
|
||||
|
||||
ObjectNode obj = (ObjectNode) node;
|
||||
int demoId = obj.get("id").asInt();
|
||||
log.info("Using DEMO subscriber ID {}.", demoId);
|
||||
|
||||
String uri = String.format(URI_SUBSCRIBER, demoId);
|
||||
/**
|
||||
* Sets a new XOS utils object to bind URL patterns for the
|
||||
* given XOS subscriber ID.
|
||||
*
|
||||
* @param xosSubId XOS subscriber ID
|
||||
*/
|
||||
public void setXosUtilsForSubscriber(int xosSubId) {
|
||||
String uri = String.format(URI_SUBSCRIBER, xosSubId);
|
||||
xosUtils = new XosManagerRestUtils(xosServerIp, xosServerPort, uri);
|
||||
return demoId;
|
||||
}
|
||||
|
||||
|
||||
public void initDemoSubscriber() {
|
||||
log.info("initDemoSubscriber() called");
|
||||
String result = xosUtilsRs.getRest("initdemo/");
|
||||
log.info("initdemo data from XOS: {}", result);
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user