mirror of
https://github.com/opennetworkinglab/onos.git
synced 2025-10-23 13:21:21 +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.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.TreeMap;
|
import java.util.TreeMap;
|
||||||
@ -44,12 +46,28 @@ import static org.onosproject.cord.gui.model.XosFunctionDescriptor.URL_FILTER;
|
|||||||
*/
|
*/
|
||||||
public class CordModelCache extends JsonFactory {
|
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 BUNDLE = "bundle";
|
||||||
private static final String USERS = "users";
|
private static final String USERS = "users";
|
||||||
private static final String SUB_ID = "subId";
|
|
||||||
private static final String LEVEL = "level";
|
private static final String LEVEL = "level";
|
||||||
|
|
||||||
|
private static final Map<Integer, Integer> LOOKUP = new HashMap<>();
|
||||||
|
|
||||||
private int subscriberId;
|
private int subscriberId;
|
||||||
|
private int ssid;
|
||||||
private Bundle currentBundle;
|
private Bundle currentBundle;
|
||||||
|
|
||||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||||
@ -59,18 +77,76 @@ public class CordModelCache extends JsonFactory {
|
|||||||
new TreeMap<Integer, SubscriberUser>();
|
new TreeMap<Integer, SubscriberUser>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs a model cache, (retrieving demo subscriber ID),
|
* Constructs a model cache, retrieving a mapping of SSID to XOS Subscriber
|
||||||
* initializing it with basic bundle, and fetching the list of users.
|
* IDs from the XOS server.
|
||||||
*/
|
*/
|
||||||
CordModelCache() {
|
CordModelCache() {
|
||||||
log.info("Initialize model cache");
|
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);
|
currentBundle = new Bundle(BundleFactory.BASIC_BUNDLE);
|
||||||
initUsers();
|
initUsers();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initUsers() {
|
private void initUsers() {
|
||||||
ArrayNode users = XosManager.INSTANCE.getUserList();
|
ArrayNode users = XosManager.INSTANCE.getUserList();
|
||||||
|
if (users == null) {
|
||||||
|
log.warn("no user list for SSID {} (subid {})", ssid, subscriberId);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
for (JsonNode u: users) {
|
for (JsonNode u: users) {
|
||||||
ObjectNode user = (ObjectNode) u;
|
ObjectNode user = (ObjectNode) u;
|
||||||
|
|
||||||
@ -194,6 +270,25 @@ public class CordModelCache extends JsonFactory {
|
|||||||
|
|
||||||
private void addSubId(ObjectNode root) {
|
private void addSubId(ObjectNode root) {
|
||||||
root.put(SUB_ID, subscriberId);
|
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
|
@GET
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
@Path("bundle/{id}")
|
@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() {
|
public ObjectNode initXosSubscriberLookups() {
|
||||||
log.info("intDemoSubscriber() called");
|
log.info("intDemoSubscriberLookups() called");
|
||||||
xosServerIp = getXosServerIp();
|
xosServerIp = getXosServerIp();
|
||||||
xosServerPort = getXosServerPort();
|
xosServerPort = getXosServerPort();
|
||||||
log.info("Using XOS server at {}:{}", xosServerIp, xosServerPort);
|
log.info("Using XOS server at {}:{}", xosServerIp, xosServerPort);
|
||||||
|
|
||||||
xosUtilsRs = new XosManagerRestUtils(xosServerIp, xosServerPort, URI_RS);
|
xosUtilsRs = new XosManagerRestUtils(xosServerIp, xosServerPort, URI_RS);
|
||||||
|
|
||||||
// ask XOS for the subscriber ID of the canned Demo account...
|
// ask XOS for the subscriber ID lookup info
|
||||||
String result = xosUtilsRs.getRest("initdemo/");
|
String result = xosUtilsRs.getRest("subidlookup/");
|
||||||
log.info("from XOS: {}", result);
|
log.info("lookup data from XOS: {}", result);
|
||||||
|
|
||||||
JsonNode node;
|
JsonNode node;
|
||||||
try {
|
try {
|
||||||
node = MAPPER.readTree(result);
|
node = MAPPER.readTree(result);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
log.error("failed to read demo subscriber JSON", e);
|
log.error("failed to read subscriber lookup JSON data", e);
|
||||||
return 0;
|
return null;
|
||||||
}
|
}
|
||||||
|
return (ObjectNode) node;
|
||||||
|
}
|
||||||
|
|
||||||
ObjectNode obj = (ObjectNode) node;
|
/**
|
||||||
int demoId = obj.get("id").asInt();
|
* Sets a new XOS utils object to bind URL patterns for the
|
||||||
log.info("Using DEMO subscriber ID {}.", demoId);
|
* given XOS subscriber ID.
|
||||||
|
*
|
||||||
String uri = String.format(URI_SUBSCRIBER, demoId);
|
* @param xosSubId XOS subscriber ID
|
||||||
|
*/
|
||||||
|
public void setXosUtilsForSubscriber(int xosSubId) {
|
||||||
|
String uri = String.format(URI_SUBSCRIBER, xosSubId);
|
||||||
xosUtils = new XosManagerRestUtils(xosServerIp, xosServerPort, uri);
|
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