/**
* BeNomad BeMap JavaScript API - AclDetailsResponse
*
* Response from `GET service/acl/1.0/user/details` — the current user's
* identity, granted roles, accessible geoservers, and accessible charging-
* station providers. The geoserver list is **already filtered by the user's
* ACL** server-side, so it is safe to render directly in a dropdown.
*
* Wire shape (cross-checked against a real beta response):
*
* {
* "username": "your-login",
* "rights": ["ROLE_GEOCODING", "ROLE_ROUTING", ...],
* "geoservers": [
* { "key": "osm", "value": "OpenStreetMap" },
* { "key": "here", "value": "HERE", "byDefault": true }
* ],
* "chargingStationProviders": [
* { "key": "ecoMovement", "value": "Eco-Movement" }
* ]
* }
*
* @since 1.5.0
* @public
* @constructor
* @param {Object} [options]
* @param {String} [options.username]
* @param {Array.<String>} [options.rights]
* @param {Array.<bemap.AclLabel>} [options.geoservers]
* @param {Array.<bemap.AclLabel>} [options.chargingStationProviders]
*/
bemap.AclDetailsResponse = function(options) {
var opts = options || {};
this.username = opts.username || null;
this.rights = Array.isArray(opts.rights) ? opts.rights.slice() : [];
this.geoservers = Array.isArray(opts.geoservers) ? opts.geoservers : [];
this.chargingStationProviders = Array.isArray(opts.chargingStationProviders) ? opts.chargingStationProviders : [];
};
bemap.AclDetailsResponse.prototype.getUsername = function() { return this.username; };
bemap.AclDetailsResponse.prototype.getRights = function() { return this.rights; };
bemap.AclDetailsResponse.prototype.getGeoservers = function() { return this.geoservers; };
bemap.AclDetailsResponse.prototype.getChargingStationProviders = function() { return this.chargingStationProviders; };
/**
* `true` when the current user has the supplied role (e.g. `'ROLE_ROUTING'`).
* @public
* @param {String} role
* @return {Boolean}
*/
bemap.AclDetailsResponse.prototype.hasRight = function(role) {
return this.rights.indexOf(role) >= 0;
};
/**
* Find the geoserver in the user's allowed list flagged as the default,
* or `null` when none is flagged.
* @public
* @return {bemap.AclLabel|null}
*/
bemap.AclDetailsResponse.prototype.getDefaultGeoserver = function() {
for (var i = 0; i < this.geoservers.length; i++) {
if (this.geoservers[i].isDefault()) return this.geoservers[i];
}
return null;
};
bemap.AclDetailsResponse.fromJson = function(json) {
if (!json) return new bemap.AclDetailsResponse();
var geoservers = Array.isArray(json.geoservers)
? json.geoservers.map(function(g) { return bemap.AclLabel.fromJson(g); })
: [];
var providers = Array.isArray(json.chargingStationProviders)
? json.chargingStationProviders.map(function(p) { return bemap.AclLabel.fromJson(p); })
: [];
return new bemap.AclDetailsResponse({
username: json.username,
rights: Array.isArray(json.rights) ? json.rights.slice() : [],
geoservers: geoservers,
chargingStationProviders: providers
});
};