Fixing the conflicts

This commit is contained in:
geethkokila 2017-02-24 12:16:14 +05:30
commit d8303356cd
55 changed files with 875 additions and 445 deletions

View File

@ -63,7 +63,7 @@ public class ApiApplicationRegistrationServiceImpl implements ApiApplicationRegi
PrivilegedCarbonContext.getThreadLocalCarbonContext().setUsername(username);
APIManagementProviderService apiManagementProviderService = APIUtil.getAPIManagementProviderService();
ApiApplicationKey apiApplicationKey = apiManagementProviderService.generateAndRetrieveApplicationKeys(
applicationName, APIUtil.getAllowedApisTags().toArray(new String[APIUtil.getAllowedApisTags().size()]),
applicationName, APIUtil.getDefaultTags(),
ApiApplicationConstants.DEFAULT_TOKEN_TYPE, username, false,
ApiApplicationConstants.DEFAULT_VALIDITY_PERIOD);
return Response.status(Response.Status.CREATED).entity(apiApplicationKey.toString()).build();

View File

@ -31,6 +31,7 @@ import org.wso2.carbon.registry.core.exceptions.RegistryException;
import org.wso2.carbon.registry.core.service.RegistryService;
import org.wso2.carbon.user.core.service.RealmService;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
@ -95,8 +96,13 @@ public class APIUtil {
return deviceManagementProviderService;
}
public static String[] getDefaultTags() throws DeviceManagementException {
String[] allowedApisTags = new String[1];
allowedApisTags[0] = DEFAULT_CDMF_API_TAG;
return allowedApisTags;
}
public static List<String> getAllowedApisTags() throws DeviceManagementException {
//Todo get allowed cdmf service tags from config.
List<String> allowedApisTags = getDeviceManagementProviderService().getAvailableDeviceTypes();
allowedApisTags.add(DEFAULT_CDMF_API_TAG);
allowedApisTags.add(DEFAULT_CERT_API_TAG);

View File

@ -87,6 +87,10 @@ public class APIManagementProviderServiceImpl implements APIManagementProviderSe
throw new APIManagerException (
"Api application creation failed for " + applicationName + " to the user " + username);
}
SubscriptionList subscriptionList = storeClient.getSubscriptions().subscriptionsGet
(null, application.getApplicationId(), "", 0, 100, CONTENT_TYPE, null);
List<Subscription> needToSubscribe = new ArrayList<>();
// subscribe to apis.
if (tags != null && tags.length > 0) {
for (String tag: tags) {
@ -100,32 +104,33 @@ public class APIManagementProviderServiceImpl implements APIManagementProviderSe
if (apiList.getList() != null && apiList.getList().size() > 0) {
for (APIInfo apiInfo : apiList.getList()) {
Subscription subscription = new Subscription();
//fix for APIMANAGER-5566 admin-AT-tenant1.com-Tenant1API1-1.0.0
String id = apiInfo.getProvider().replace("@", "-AT-")
+ "-" + apiInfo.getName()+ "-" + apiInfo.getVersion();
subscription.setApiIdentifier(id);
subscription.setApplicationId(application.getApplicationId());
subscription.tier(ApiApplicationConstants.DEFAULT_TIER);
SubscriptionList subscriptionList = storeClient.getSubscriptions().subscriptionsGet
(id, application.getApplicationId(), "", 0, 100, CONTENT_TYPE, null);
boolean subscriptionExist = false;
if (subscriptionList.getList() != null && subscriptionList.getList().size() > 0) {
for (Subscription subs : subscriptionList.getList()) {
if (subs.getApiIdentifier().equals(id) && subs.getApplicationId().equals(
application.getApplicationId())) {
if (subs.getApiIdentifier().equals(id)) {
subscriptionExist = true;
break;
}
}
}
if (!subscriptionExist) {
storeClient.getIndividualSubscription().subscriptionsPost(subscription, CONTENT_TYPE);
Subscription subscription = new Subscription();
//fix for APIMANAGER-5566 admin-AT-tenant1.com-Tenant1API1-1.0.0
subscription.setApiIdentifier(id);
subscription.setApplicationId(application.getApplicationId());
subscription.tier(ApiApplicationConstants.DEFAULT_TIER);
needToSubscribe.add(subscription);
}
}
}
}
}
if (!needToSubscribe.isEmpty()) {
storeClient.getIndividualSubscription().subscriptionsPost(needToSubscribe, CONTENT_TYPE);
}
//end of subscription
List<ApplicationKey> applicationKeys = application.getKeys();

View File

@ -22,6 +22,8 @@ import feign.Param;
import feign.RequestLine;
import org.wso2.carbon.apimgt.integration.client.store.model.Subscription;
import java.util.List;
@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2017-01-24T00:03:54.991+05:30")
public interface SubscriptionindividualApi {
@ -42,6 +44,21 @@ public interface SubscriptionindividualApi {
})
Subscription subscriptionsPost(Subscription body, @Param("contentType") String contentType);
/**
* Add new subscriptions
* Add new subscriptions
* @param body Subscription objects that should to be added (required)
* @param contentType Media type of the entity in the body. Default is JSON. (required)
* @return Subscription
*/
@RequestLine("POST /subscriptions/multiple")
@Headers({
"Content-type: application/json",
"Accept: application/json",
"Content-Type: {contentType}"
})
List<Subscription> subscriptionsPost(List<Subscription> body, @Param("contentType") String contentType);
/**
* Remove subscription
* Remove subscription

View File

@ -53,7 +53,7 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
String sql = "INSERT INTO DM_DEVICE(DESCRIPTION, NAME, DEVICE_TYPE_ID, DEVICE_IDENTIFICATION, " +
"LAST_UPDATED_TIMESTAMP, TENANT_ID) " +
"VALUES (?, ?, ?, ?, ?, ?)";
stmt = conn.prepareStatement(sql, new String[]{"id"});
stmt = conn.prepareStatement(sql, new String[] {"id"});
stmt.setString(1, device.getDescription());
stmt.setString(2, device.getName());
stmt.setInt(3, typeId);
@ -85,7 +85,7 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
String sql = "UPDATE DM_DEVICE SET NAME = ?, DESCRIPTION = ?, LAST_UPDATED_TIMESTAMP = ? " +
"WHERE DEVICE_TYPE_ID = (SELECT ID FROM DM_DEVICE_TYPE WHERE NAME = ? AND PROVIDER_TENANT_ID = ?) " +
"AND DEVICE_IDENTIFICATION = ? AND TENANT_ID = ?";
stmt = conn.prepareStatement(sql, new String[]{"id"});
stmt = conn.prepareStatement(sql, new String[] {"id"});
stmt.setString(1, device.getName());
stmt.setString(2, device.getDescription());
stmt.setTimestamp(3, new Timestamp(new Date().getTime()));
@ -142,7 +142,7 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
@Override
public Device getDevice(DeviceIdentifier deviceIdentifier, Date since, int tenantId)
throws DeviceManagementDAOException {
throws DeviceManagementDAOException {
Connection conn;
PreparedStatement stmt = null;
ResultSet rs = null;
@ -150,11 +150,11 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
try {
conn = this.getConnection();
String sql = "SELECT d1.ID AS DEVICE_ID, d1.DESCRIPTION, d1.NAME AS DEVICE_NAME, d1.DEVICE_TYPE, " +
"d1.DEVICE_IDENTIFICATION, e.OWNER, e.OWNERSHIP, e.STATUS, e.DATE_OF_LAST_UPDATE, " +
"e.DATE_OF_ENROLMENT, e.ID AS ENROLMENT_ID FROM DM_ENROLMENT e, (SELECT d.ID, d.DESCRIPTION, d.NAME, " +
"t.NAME AS DEVICE_TYPE, d.DEVICE_IDENTIFICATION FROM DM_DEVICE d, DM_DEVICE_TYPE t, DM_DEVICE_DETAIL dt " +
"WHERE t.NAME = ? AND d.DEVICE_IDENTIFICATION = ? AND d.TENANT_ID = ? AND dt.DEVICE_ID = d.ID " +
"AND dt.UPDATE_TIMESTAMP > ?) d1 WHERE d1.ID = e.DEVICE_ID AND TENANT_ID = ?";
"d1.DEVICE_IDENTIFICATION, e.OWNER, e.OWNERSHIP, e.STATUS, e.DATE_OF_LAST_UPDATE, " +
"e.DATE_OF_ENROLMENT, e.ID AS ENROLMENT_ID FROM DM_ENROLMENT e, (SELECT d.ID, d.DESCRIPTION, d.NAME, " +
"t.NAME AS DEVICE_TYPE, d.DEVICE_IDENTIFICATION FROM DM_DEVICE d, DM_DEVICE_TYPE t, DM_DEVICE_DETAIL dt " +
"WHERE t.NAME = ? AND d.DEVICE_IDENTIFICATION = ? AND d.TENANT_ID = ? AND dt.DEVICE_ID = d.ID " +
"AND dt.UPDATE_TIMESTAMP > ?) d1 WHERE d1.ID = e.DEVICE_ID AND TENANT_ID = ?" ;
stmt = conn.prepareStatement(sql);
int paramIdx = 1;
stmt.setString(paramIdx++, deviceIdentifier.getType());
@ -168,7 +168,7 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
}
} catch (SQLException e) {
throw new DeviceManagementDAOException("Error occurred while listing device for type " +
"'" + deviceIdentifier.getType() + "'", e);
"'" + deviceIdentifier.getType() + "'", e);
} finally {
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
}
@ -177,7 +177,7 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
@Override
public Device getDevice(DeviceIdentifier deviceIdentifier, EnrolmentInfo.Status status, int tenantId) throws
DeviceManagementDAOException {
DeviceManagementDAOException {
Connection conn;
PreparedStatement stmt = null;
ResultSet rs = null;
@ -185,11 +185,11 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
try {
conn = this.getConnection();
String sql = "SELECT d1.ID AS DEVICE_ID, d1.DESCRIPTION, d1.NAME AS DEVICE_NAME, d1.DEVICE_TYPE, " +
"d1.DEVICE_IDENTIFICATION, e.OWNER, e.OWNERSHIP, e.STATUS, e.DATE_OF_LAST_UPDATE, " +
"e.DATE_OF_ENROLMENT, e.ID AS ENROLMENT_ID FROM DM_ENROLMENT e, (SELECT d.ID, d.DESCRIPTION, d.NAME, " +
"t.NAME AS DEVICE_TYPE, d.DEVICE_IDENTIFICATION FROM DM_DEVICE d, DM_DEVICE_TYPE t WHERE " +
"t.NAME = ? AND d.DEVICE_IDENTIFICATION = ? AND d.TENANT_ID = ?) d1 WHERE d1.ID = e.DEVICE_ID " +
"AND TENANT_ID = ? AND e.STATUS = ?";
"d1.DEVICE_IDENTIFICATION, e.OWNER, e.OWNERSHIP, e.STATUS, e.DATE_OF_LAST_UPDATE, " +
"e.DATE_OF_ENROLMENT, e.ID AS ENROLMENT_ID FROM DM_ENROLMENT e, (SELECT d.ID, d.DESCRIPTION, d.NAME, " +
"t.NAME AS DEVICE_TYPE, d.DEVICE_IDENTIFICATION FROM DM_DEVICE d, DM_DEVICE_TYPE t WHERE " +
"t.NAME = ? AND d.DEVICE_IDENTIFICATION = ? AND d.TENANT_ID = ?) d1 WHERE d1.ID = e.DEVICE_ID " +
"AND TENANT_ID = ? AND e.STATUS = ?";
stmt = conn.prepareStatement(sql);
stmt.setString(1, deviceIdentifier.getType());
stmt.setString(2, deviceIdentifier.getId());
@ -202,7 +202,7 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
}
} catch (SQLException e) {
throw new DeviceManagementDAOException("Error occurred while listing devices for type " +
"'" + deviceIdentifier.getType() + "'", e);
"'" + deviceIdentifier.getType() + "'", e);
} finally {
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
}
@ -249,11 +249,11 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
try {
conn = this.getConnection();
String sql = "SELECT d1.ID AS DEVICE_ID, d1.DESCRIPTION, d1.NAME AS DEVICE_NAME, d1.DEVICE_TYPE, " +
"d1.DEVICE_IDENTIFICATION, e.OWNER, e.OWNERSHIP, e.STATUS, e.DATE_OF_LAST_UPDATE, " +
"e.DATE_OF_ENROLMENT, e.ID AS ENROLMENT_ID FROM DM_ENROLMENT e, (SELECT d.ID, d.DESCRIPTION, d.NAME, " +
"t.NAME AS DEVICE_TYPE, d.DEVICE_IDENTIFICATION FROM DM_DEVICE d, DM_DEVICE_TYPE t WHERE " +
"d.ID = ? AND d.TENANT_ID = ?) d1 WHERE d1.ID = e.DEVICE_ID " +
"AND TENANT_ID = ?";
"d1.DEVICE_IDENTIFICATION, e.OWNER, e.OWNERSHIP, e.STATUS, e.DATE_OF_LAST_UPDATE, " +
"e.DATE_OF_ENROLMENT, e.ID AS ENROLMENT_ID FROM DM_ENROLMENT e, (SELECT d.ID, d.DESCRIPTION, d.NAME, " +
"t.NAME AS DEVICE_TYPE, d.DEVICE_IDENTIFICATION FROM DM_DEVICE d, DM_DEVICE_TYPE t WHERE " +
"d.ID = ? AND d.TENANT_ID = ?) d1 WHERE d1.ID = e.DEVICE_ID " +
"AND TENANT_ID = ?";
stmt = conn.prepareStatement(sql);
stmt.setInt(1, deviceId);
stmt.setInt(2, tenantId);
@ -264,7 +264,7 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
}
} catch (SQLException e) {
throw new DeviceManagementDAOException("Error occurred while retrieving device for id " +
"'" + deviceId + "'", e);
"'" + deviceId + "'", e);
} finally {
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
}
@ -346,11 +346,11 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
try {
conn = this.getConnection();
String sql = "SELECT e1.OWNER, e1.OWNERSHIP, e1.ENROLMENT_ID, e1.DEVICE_ID, e1.STATUS, e1.DATE_OF_LAST_UPDATE," +
" e1.DATE_OF_ENROLMENT, d.DESCRIPTION, d.NAME AS DEVICE_NAME, d.DEVICE_IDENTIFICATION, t.NAME " +
"AS DEVICE_TYPE FROM DM_DEVICE d, (SELECT e.OWNER, e.OWNERSHIP, e.ID AS ENROLMENT_ID, " +
"e.DEVICE_ID, e.STATUS, e.DATE_OF_LAST_UPDATE, e.DATE_OF_ENROLMENT FROM DM_ENROLMENT e WHERE " +
"e.TENANT_ID = ? AND e.OWNER = ?) e1, DM_DEVICE_TYPE t WHERE d.ID = e1.DEVICE_ID " +
"AND t.ID = d.DEVICE_TYPE_ID";
" e1.DATE_OF_ENROLMENT, d.DESCRIPTION, d.NAME AS DEVICE_NAME, d.DEVICE_IDENTIFICATION, t.NAME " +
"AS DEVICE_TYPE FROM DM_DEVICE d, (SELECT e.OWNER, e.OWNERSHIP, e.ID AS ENROLMENT_ID, " +
"e.DEVICE_ID, e.STATUS, e.DATE_OF_LAST_UPDATE, e.DATE_OF_ENROLMENT FROM DM_ENROLMENT e WHERE " +
"e.TENANT_ID = ? AND e.OWNER = ?) e1, DM_DEVICE_TYPE t WHERE d.ID = e1.DEVICE_ID " +
"AND t.ID = d.DEVICE_TYPE_ID";
stmt = conn.prepareStatement(sql);
stmt.setInt(1, tenantId);
stmt.setString(2, username);
@ -422,8 +422,8 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
try {
conn = this.getConnection();
String sql = "SELECT COUNT(d1.DEVICE_ID) AS DEVICE_COUNT FROM DM_ENROLMENT e, (SELECT d.ID AS DEVICE_ID FROM " +
"DM_DEVICE d, DM_DEVICE_TYPE t WHERE d.DEVICE_TYPE_ID = t.ID AND d.TENANT_ID = ?) d1 WHERE " +
"d1.DEVICE_ID = e.DEVICE_ID AND e.OWNER = ? AND TENANT_ID = ?";
"DM_DEVICE d, DM_DEVICE_TYPE t WHERE d.DEVICE_TYPE_ID = t.ID AND d.TENANT_ID = ?) d1 WHERE " +
"d1.DEVICE_ID = e.DEVICE_ID AND e.OWNER = ? AND TENANT_ID = ?";
stmt = conn.prepareStatement(sql);
stmt.setInt(1, tenantId);
stmt.setString(2, username);
@ -455,8 +455,8 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
try {
conn = this.getConnection();
String sql = "SELECT COUNT(d1.DEVICE_ID) AS DEVICE_COUNT FROM DM_ENROLMENT e, (SELECT d.ID AS DEVICE_ID FROM " +
"DM_DEVICE d, DM_DEVICE_TYPE t WHERE d.DEVICE_TYPE_ID = t.ID AND d.TENANT_ID = ?) d1 WHERE " +
"d1.DEVICE_ID = e.DEVICE_ID AND TENANT_ID = ?";
"DM_DEVICE d, DM_DEVICE_TYPE t WHERE d.DEVICE_TYPE_ID = t.ID AND d.TENANT_ID = ?) d1 WHERE " +
"d1.DEVICE_ID = e.DEVICE_ID AND TENANT_ID = ?";
stmt = conn.prepareStatement(sql);
stmt.setInt(1, tenantId);
stmt.setInt(2, tenantId);
@ -493,7 +493,7 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
try {
conn = this.getConnection();
String sql = "SELECT COUNT(d1.ID) AS DEVICE_COUNT FROM DM_ENROLMENT e, (SELECT d.ID, d.NAME, d.DEVICE_IDENTIFICATION, " +
"t.NAME AS DEVICE_TYPE FROM DM_DEVICE d, DM_DEVICE_TYPE t";
"t.NAME AS DEVICE_TYPE FROM DM_DEVICE d, DM_DEVICE_TYPE t";
//Add query for last updated timestamp
if (since != null) {
@ -561,7 +561,7 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
}
} catch (SQLException e) {
throw new DeviceManagementDAOException("Error occurred while retrieving information of all " +
"registered devices", e);
"registered devices", e);
} finally {
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
}
@ -577,8 +577,8 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
try {
conn = this.getConnection();
String sql = "SELECT COUNT(d1.ID) AS DEVICE_COUNT FROM DM_ENROLMENT e, (SELECT d.ID FROM DM_DEVICE d, " +
"DM_DEVICE_TYPE t WHERE DEVICE_TYPE_ID = t.ID AND t.NAME = ? " +
"AND d.TENANT_ID = ?) d1 WHERE d1.ID = e.DEVICE_ID AND TENANT_ID = ?";
"DM_DEVICE_TYPE t WHERE DEVICE_TYPE_ID = t.ID AND t.NAME = ? " +
"AND d.TENANT_ID = ?) d1 WHERE d1.ID = e.DEVICE_ID AND TENANT_ID = ?";
stmt = conn.prepareStatement(sql);
stmt.setString(1, type);
stmt.setInt(2, tenantId);
@ -603,8 +603,8 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
try {
conn = this.getConnection();
String sql = "SELECT COUNT(e1.DEVICE_ID) AS DEVICE_COUNT FROM DM_DEVICE d, (SELECT e.DEVICE_ID " +
"FROM DM_ENROLMENT e WHERE e.TENANT_ID = ? AND e.OWNER = ?) " +
"e1, DM_DEVICE_TYPE t WHERE d.ID = e1.DEVICE_ID AND t.ID = d.DEVICE_TYPE_ID";
"FROM DM_ENROLMENT e WHERE e.TENANT_ID = ? AND e.OWNER = ?) " +
"e1, DM_DEVICE_TYPE t WHERE d.ID = e1.DEVICE_ID AND t.ID = d.DEVICE_TYPE_ID";
stmt = conn.prepareStatement(sql);
stmt.setInt(1, tenantId);
stmt.setString(2, username);
@ -615,7 +615,7 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
}
} catch (SQLException e) {
throw new DeviceManagementDAOException("Error occurred while fetching the list of devices belongs to '" +
username + "'", e);
username + "'", e);
} finally {
DeviceManagementDAOUtil.cleanupResources(stmt, null);
}
@ -630,8 +630,8 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
try {
conn = this.getConnection();
String sql = "SELECT COUNT(d1.ID) AS DEVICE_COUNT FROM DM_ENROLMENT e, (SELECT d.ID FROM DM_DEVICE d, " +
"DM_DEVICE_TYPE t WHERE d.DEVICE_TYPE_ID = t.ID AND d.NAME LIKE ? AND d.TENANT_ID = ?) d1 " +
"WHERE d1.ID = e.DEVICE_ID AND TENANT_ID = ?";
"DM_DEVICE_TYPE t WHERE d.DEVICE_TYPE_ID = t.ID AND d.NAME LIKE ? AND d.TENANT_ID = ?) d1 " +
"WHERE d1.ID = e.DEVICE_ID AND TENANT_ID = ?";
stmt = conn.prepareStatement(sql);
stmt.setString(1, deviceName + "%");
stmt.setInt(2, tenantId);
@ -643,7 +643,7 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
}
} catch (SQLException e) {
throw new DeviceManagementDAOException("Error occurred while fetching the device count that matches " +
"'" + deviceName + "'", e);
"'" + deviceName + "'", e);
} finally {
DeviceManagementDAOUtil.cleanupResources(stmt, null);
}
@ -658,8 +658,8 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
try {
conn = this.getConnection();
String sql = "SELECT COUNT(d.ID) AS DEVICE_COUNT FROM (SELECT e.DEVICE_ID FROM DM_ENROLMENT e WHERE " +
"TENANT_ID = ? AND OWNERSHIP = ?) e, DM_DEVICE d, " +
"DM_DEVICE_TYPE t WHERE d.ID = e.DEVICE_ID AND d.DEVICE_TYPE_ID = t.ID AND d.TENANT_ID = ?";
"TENANT_ID = ? AND OWNERSHIP = ?) e, DM_DEVICE d, " +
"DM_DEVICE_TYPE t WHERE d.ID = e.DEVICE_ID AND d.DEVICE_TYPE_ID = t.ID AND d.TENANT_ID = ?";
stmt = conn.prepareStatement(sql);
stmt.setInt(1, tenantId);
stmt.setString(2, ownerShip);
@ -671,7 +671,7 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
}
} catch (SQLException e) {
throw new DeviceManagementDAOException("Error occurred while fetching the list of devices that matches to ownership " +
"'" + ownerShip + "'", e);
"'" + ownerShip + "'", e);
} finally {
DeviceManagementDAOUtil.cleanupResources(stmt, null);
}
@ -686,8 +686,8 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
try {
conn = this.getConnection();
String sql = "SELECT COUNT(d.ID) AS DEVICE_COUNT FROM (SELECT e.DEVICE_ID FROM DM_ENROLMENT e WHERE " +
"TENANT_ID = ? AND STATUS = ?) e, DM_DEVICE d, " +
"DM_DEVICE_TYPE t WHERE d.ID = e.DEVICE_ID AND d.DEVICE_TYPE_ID = t.ID AND d.TENANT_ID = ?";
"TENANT_ID = ? AND STATUS = ?) e, DM_DEVICE d, " +
"DM_DEVICE_TYPE t WHERE d.ID = e.DEVICE_ID AND d.DEVICE_TYPE_ID = t.ID AND d.TENANT_ID = ?";
stmt = conn.prepareStatement(sql);
stmt.setInt(1, tenantId);
stmt.setString(2, status);
@ -699,7 +699,7 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
}
} catch (SQLException e) {
throw new DeviceManagementDAOException("Error occurred while fetching the list of devices that matches to status " +
"'" + status + "'", e);
"'" + status + "'", e);
} finally {
DeviceManagementDAOUtil.cleanupResources(stmt, null);
}
@ -716,7 +716,7 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
conn = this.getConnection();
String sql = "INSERT INTO DM_ENROLMENT(DEVICE_ID, OWNER, OWNERSHIP, STATUS,DATE_OF_ENROLMENT, " +
"DATE_OF_LAST_UPDATE, TENANT_ID) VALUES(?, ?, ?, ?, ?, ?, ?)";
stmt = conn.prepareStatement(sql, new String[]{"id"});
stmt = conn.prepareStatement(sql, new String[] {"id"});
stmt.setInt(1, device.getId());
stmt.setString(2, device.getEnrolmentInfo().getOwner());
stmt.setString(3, device.getEnrolmentInfo().getOwnership().toString());
@ -837,10 +837,10 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
try {
conn = this.getConnection();
String sql = "SELECT ID AS ENROLMENT_ID, DEVICE_ID, OWNER, OWNERSHIP, STATUS, DATE_OF_ENROLMENT, " +
"DATE_OF_LAST_UPDATE, TENANT_ID FROM DM_ENROLMENT WHERE DEVICE_ID = (SELECT d.ID " +
"FROM DM_DEVICE d, DM_DEVICE_TYPE t WHERE d.DEVICE_TYPE_ID = t.ID " +
"AND d.DEVICE_IDENTIFICATION = ? AND t.NAME = ? AND d.TENANT_ID = ?) " +
"AND TENANT_ID = ?";
"DATE_OF_LAST_UPDATE, TENANT_ID FROM DM_ENROLMENT WHERE DEVICE_ID = (SELECT d.ID " +
"FROM DM_DEVICE d, DM_DEVICE_TYPE t WHERE d.DEVICE_TYPE_ID = t.ID " +
"AND d.DEVICE_IDENTIFICATION = ? AND t.NAME = ? AND d.TENANT_ID = ?) " +
"AND TENANT_ID = ?";
stmt = conn.prepareStatement(sql);
stmt.setString(1, deviceId.getId());
stmt.setString(2, deviceId.getType());
@ -853,7 +853,7 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
return enrolmentInfo;
} catch (SQLException e) {
throw new DeviceManagementDAOException("Error occurred while retrieving the enrolment " +
"of device '" + deviceId + "'", e);
"of device '" + deviceId + "'", e);
} finally {
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
}
@ -868,10 +868,10 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
try {
conn = this.getConnection();
String sql = "SELECT ID AS ENROLMENT_ID, DEVICE_ID, OWNER, OWNERSHIP, STATUS, DATE_OF_ENROLMENT, " +
"DATE_OF_LAST_UPDATE, TENANT_ID FROM DM_ENROLMENT WHERE DEVICE_ID = (SELECT d.ID " +
"FROM DM_DEVICE d, DM_DEVICE_TYPE t WHERE d.DEVICE_TYPE_ID = t.ID " +
"AND d.DEVICE_IDENTIFICATION = ? AND t.NAME = ? AND d.TENANT_ID = ?) " +
"AND TENANT_ID = ? AND STATUS in ('ACTIVE','UNREACHABLE','INACTIVE')";
"DATE_OF_LAST_UPDATE, TENANT_ID FROM DM_ENROLMENT WHERE DEVICE_ID = (SELECT d.ID " +
"FROM DM_DEVICE d, DM_DEVICE_TYPE t WHERE d.DEVICE_TYPE_ID = t.ID " +
"AND d.DEVICE_IDENTIFICATION = ? AND t.NAME = ? AND d.TENANT_ID = ?) " +
"AND TENANT_ID = ? AND STATUS in ('ACTIVE','UNREACHABLE','INACTIVE')";
stmt = conn.prepareStatement(sql);
stmt.setString(1, deviceId.getId());
stmt.setString(2, deviceId.getType());
@ -884,8 +884,8 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
return enrolmentInfo;
} catch (SQLException e) {
throw new DeviceManagementDAOException("Error occurred while retrieving the enrolment " +
"information of device '" + deviceId.getId() + "' of type : "
+ deviceId.getType(), e);
"information of device '" + deviceId.getId() + "' of type : "
+ deviceId.getType(), e);
} finally {
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
}
@ -899,8 +899,8 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
try {
conn = this.getConnection();
String sql = "SELECT e.ID AS ENROLMENT_ID FROM DM_ENROLMENT e, (SELECT d.ID FROM DM_DEVICE d, DM_DEVICE_TYPE t " +
"WHERE d.DEVICE_TYPE_ID = t.ID AND d.DEVICE_IDENTIFICATION = ? AND t.NAME = ? AND d.TENANT_ID = ?) dtm " +
"WHERE e.DEVICE_ID = dtm.ID AND e.STATUS = ? AND e.TENANT_ID = ?;";
"WHERE d.DEVICE_TYPE_ID = t.ID AND d.DEVICE_IDENTIFICATION = ? AND t.NAME = ? AND d.TENANT_ID = ?) dtm " +
"WHERE e.DEVICE_ID = dtm.ID AND e.STATUS = ? AND e.TENANT_ID = ?;";
stmt = conn.prepareStatement(sql);
stmt.setString(1, deviceId.getId());
stmt.setString(2, deviceId.getType());
@ -1029,7 +1029,7 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
*
* @param timestamp Timestamp in long, after which the devices have been updated.
* @param tenantId Tenant id of the currently logged in user.
* @return A collection of devices that have been updated after the provided timestamp
* @return A collection of devices that have been updated after the provided timestamp
* @throws DeviceManagementDAOException
*/
public List<Device> getDevices(long timestamp, int tenantId) throws DeviceManagementDAOException {
@ -1084,5 +1084,4 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
return tenants;
}
}

View File

@ -316,6 +316,22 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
}
@Override
public List<Integer> getDeviceEnrolledTenants() throws DeviceManagementException {
try {
DeviceManagementDAOFactory.openConnection();
return deviceDAO.getDeviceEnrolledTenants();
} catch (DeviceManagementDAOException e) {
throw new DeviceManagementException("Error occurred while retrieving the tenants " +
"which have device enrolled.", e);
} catch (SQLException e) {
throw new DeviceManagementException("Error occurred while opening a connection to the data source", e);
} finally {
DeviceManagementDAOFactory.closeConnection();
}
}
@Override
public boolean disenrollDevice(DeviceIdentifier deviceId) throws DeviceManagementException {
DeviceManager deviceManager = this.getDeviceManager(deviceId.getType());
if (deviceManager == null) {

View File

@ -31,6 +31,8 @@ import org.wso2.carbon.device.mgt.core.task.DeviceTaskManager;
import org.wso2.carbon.ntask.core.Task;
import org.wso2.carbon.user.api.Tenant;
import org.wso2.carbon.user.api.UserStoreException;
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
import java.util.List;
import java.util.List;
import java.util.Map;
@ -60,7 +62,6 @@ public class DeviceDetailsRetrieverTask implements Task {
@Override
public void execute() {
if (log.isDebugEnabled()) {
log.debug("Device details retrieving task started to run.");
}
@ -97,6 +98,7 @@ public class DeviceDetailsRetrieverTask implements Task {
"from device manager provider service.", e);
}
}
}

View File

@ -40,7 +40,6 @@
}
},
"errorPages": {
"404": "cdmf.page.error-404",
"default": "uuf.page.error"
}
}

View File

@ -1,25 +1,25 @@
{
"appContext": "/devicemgt/",
"isCloud": false,
"isCloud": true,
"cloudConfig": {
"upgradeNowURL": "",
"monetizationURL": "",
"requestExtensionURL": "",
"upgradeNowURL": "https://cloudmgt.clouddev.wso2.com/cloudmgt/site/pages/payment-plans.jag?cloud-type=device_cloud",
"monetizationURL": "https://cloudmgt.clouddev.wso2.com/cloudmgt/site/pages/monetization-dashboard.jag",
"requestExtensionURL": "https://cloudmgt.clouddev.wso2.com/cloudmgt/site/pages/contact-us.jag?cloud-type=device_cloud&amp;request-extension=true",
"publisherURL": "",
"storeURL": "",
"contactUsURL": "",
"contactUsURL": "https://cloudmgt.clouddev.wso2.com/cloudmgt/site/pages/contact-us.jag",
"apiCloudDocURL": "https://docs.wso2.com/display/APICloud/WSO2+API+Cloud+Documentation",
"appCloudDocURL": "https://docs.wso2.com/display/AppCloud/WSO2+App+Cloud+Documentation",
"deviceCloudDocURL": "https://docs.wso2.com/display/DeviceCloud/WSO2+Device+Cloud+Documentation",
"apiCloudWalkthroughURL": "https://api.clouddev.wso2.com/publisher?interactiveTutorial=true",
"profileURL": "https://cloudmgt.clouddev.wso2.com/cloudmgt/site/pages/user-profile.jag",
"changePasswordURL": "https://cloudmgt.clouddev.wso2.com/cloudmgt/site/pages/change-password.jag",
"logoutURL": "https://api.clouddev.wso2.com/publisher/site/pages/logout.jag",
"logoutURL": "https://devicemgt.cloud.wso2.com/devicemgt/logout",
"apiCloudURL": "",
"appCloudURL": "",
"deviceCloudURL": "",
"oraganizationURL": "",
"membersURL": ""
"oraganizationURL": "https://cloudmgt.cloud.wso2.com/cloudmgt/site/pages/organization.jag",
"membersURL": "https://cloudmgt.cloud.wso2.com/cloudmgt/site/pages/user.jag"
},
"httpsURL": "https://%iot.gateway.host%:%iot.gateway.https.port%",
"httpURL": "http://%iot.gateway.host%:%iot.gateway.http.port",

View File

@ -0,0 +1,48 @@
{{!-- Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
WSO2 Inc. licenses this file to you under the Apache License,
Version 2.0 (the "License"); you may not use this file except
in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
either express or implied. See the License for the
specific language governing permissions and limitations
under the License. --}}
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<link rel="stylesheet" href="https://error.cloud.wso2.com/style/style.css">
<link rel="stylesheet" href="https://error.cloud.wso2.com/style/font-mf.css">
<title>
{{defineZone "title"}}
</title>
</head>
<body>
<div class="sky">
<section>
<div class="error-400">
<img src="https://error.cloud.wso2.com/images/400-error.svg">
</div>
<div class="text-label">
<h1>{{#defineZone "messageTitle"}}Oops something went wrong{{/defineZone}}</h1>
<h2>{{defineZone "messageDescription"}}</h2>
<div style="clear: both"></div>
<div class="button-label">
<a href="https://cloudmgt.cloud.wso2.com/cloudmgt/site/pages/index.jag"><label class="label-back">Back to Cloud </label></a>
<a href="https://cloudmgt.cloud.wso2.com/cloudmgt/site/pages/contact-us.jag"><label class="label-report"> Report Issue </label></a>
</div>
</div>
</section>
<div class="clouds_one"></div>
<div class="clouds_two"></div>
<div class="clouds_three"></div>
</div>
</body>
</html>

View File

@ -48,7 +48,7 @@ var groupModule = {};
}
return serviceInvokers.XMLHttp.get(
endPoint, function (responsePayload) {
return responsePayload["responseText"];
return parse(responsePayload["responseText"]);
},
function (responsePayload) {
log.error(responsePayload["responseText"]);

View File

@ -463,7 +463,13 @@ var userModule = function () {
publicMethods.isAuthorized = function (permission) {
var carbon = require("carbon");
var carbonServer = application.get("carbonServer");
var carbonUser = session.get(constants.USER_SESSION_KEY);
var carbonUser;
try {
carbonUser = session.get(constants.USER_SESSION_KEY);
} catch (e) {
log.error("User object was not found in the session");
carbonUser = null;
}
var utility = require('/app/modules/utility.js').utility;
if (!carbonUser) {
log.error("User object was not found in the session");

View File

@ -40,7 +40,7 @@ var handlers = function () {
"as input - setupTokenPairByPasswordGrantType(x, y)");
} else {
privateMethods.setUpEncodedTenantBasedClientAppCredentials(username);
privateMethods.setUpEncodedTenantBasedWebSocketClientAppCredentials(username);
//privateMethods.setUpEncodedTenantBasedWebSocketClientAppCredentials(username);
var encodedClientAppCredentials = session.get(constants["ENCODED_TENANT_BASED_CLIENT_APP_CREDENTIALS"]);
if (!encodedClientAppCredentials) {
throw new Error("{/app/modules/oauth/token-handlers.js} Could not set up access token pair by " +
@ -84,7 +84,7 @@ var handlers = function () {
"as input - setupTokenPairBySamlGrantType(x, y)");
} else {
privateMethods.setUpEncodedTenantBasedClientAppCredentials(username);
privateMethods.setUpEncodedTenantBasedWebSocketClientAppCredentials(username);
//privateMethods.setUpEncodedTenantBasedWebSocketClientAppCredentials(username);
var encodedClientAppCredentials = session.get(constants["ENCODED_TENANT_BASED_CLIENT_APP_CREDENTIALS"]);
if (!encodedClientAppCredentials) {
throw new Error("{/app/modules/oauth/token-handlers.js} Could not set up access token pair " +
@ -129,7 +129,7 @@ var handlers = function () {
"as input - setupTokenPairBySamlGrantType(x, y)");
} else {
privateMethods.setUpEncodedTenantBasedClientAppCredentials(username);
privateMethods.setUpEncodedTenantBasedWebSocketClientAppCredentials(username);
//privateMethods.setUpEncodedTenantBasedWebSocketClientAppCredentials(username);
var encodedClientAppCredentials = session.get(constants["ENCODED_TENANT_BASED_CLIENT_APP_CREDENTIALS"]);
if (!encodedClientAppCredentials) {
throw new Error("{/app/modules/oauth/token-handlers.js} Could not set up access token pair " +
@ -224,44 +224,44 @@ var handlers = function () {
}
};
privateMethods["setUpEncodedTenantBasedWebSocketClientAppCredentials"] = function (username) {
if (!username) {
throw new Error("{/app/modules/oauth/token-handlers.js} Could not set up encoded tenant based " +
"client credentials to session context. No username of logged in user is found as " +
"input - setUpEncodedTenantBasedWebSocketClientAppCredentials(x)");
} else {
if (devicemgtProps["gatewayEnabled"]) {
var tenantBasedWebSocketClientAppCredentials
= tokenUtil.getTenantBasedWebSocketClientAppCredentials(username);
if (!tenantBasedWebSocketClientAppCredentials) {
throw new Error("{/app/modules/oauth/token-handlers.js} Could not set up encoded tenant " +
"based client credentials to session context as the server is unable " +
"to obtain such credentials - setUpEncodedTenantBasedWebSocketClientAppCredentials(x)");
} else {
var encodedTenantBasedWebSocketClientAppCredentials =
tokenUtil.encode(tenantBasedWebSocketClientAppCredentials["clientId"] + ":" +
tenantBasedWebSocketClientAppCredentials["clientSecret"]);
// setting up encoded tenant based client credentials to session context.
session.put(constants["ENCODED_TENANT_BASED_WEB_SOCKET_CLIENT_CREDENTIALS"],
encodedTenantBasedWebSocketClientAppCredentials);
}
} else {
var dynamicClientAppCredentials = tokenUtil.getDynamicClientAppCredentials();
if (!dynamicClientAppCredentials) {
throw new Error("{/app/modules/oauth/token-handlers.js} Could not set up encoded tenant based " +
"client credentials to session context as the server is unable to obtain " +
"dynamic client credentials - setUpEncodedTenantBasedWebSocketClientAppCredentials(x)");
}
var encodedTenantBasedWebSocketClientAppCredentials =
tokenUtil.encode(dynamicClientAppCredentials["clientId"] + ":" +
dynamicClientAppCredentials["clientSecret"]);
// setting up encoded tenant based client credentials to session context.
session.put(constants["ENCODED_TENANT_BASED_WEB_SOCKET_CLIENT_CREDENTIALS"],
encodedTenantBasedWebSocketClientAppCredentials);
}
// privateMethods["setUpEncodedTenantBasedWebSocketClientAppCredentials"] = function (username) {
// if (!username) {
// throw new Error("{/app/modules/oauth/token-handlers.js} Could not set up encoded tenant based " +
// "client credentials to session context. No username of logged in user is found as " +
// "input - setUpEncodedTenantBasedWebSocketClientAppCredentials(x)");
// } else {
// if (devicemgtProps["gatewayEnabled"]) {
// var tenantBasedWebSocketClientAppCredentials
// = tokenUtil.getTenantBasedWebSocketClientAppCredentials(username);
// if (!tenantBasedWebSocketClientAppCredentials) {
// throw new Error("{/app/modules/oauth/token-handlers.js} Could not set up encoded tenant " +
// "based client credentials to session context as the server is unable " +
// "to obtain such credentials - setUpEncodedTenantBasedWebSocketClientAppCredentials(x)");
// } else {
// var encodedTenantBasedWebSocketClientAppCredentials =
// tokenUtil.encode(tenantBasedWebSocketClientAppCredentials["clientId"] + ":" +
// tenantBasedWebSocketClientAppCredentials["clientSecret"]);
// // setting up encoded tenant based client credentials to session context.
// session.put(constants["ENCODED_TENANT_BASED_WEB_SOCKET_CLIENT_CREDENTIALS"],
// encodedTenantBasedWebSocketClientAppCredentials);
// }
// } else {
// var dynamicClientAppCredentials = tokenUtil.getDynamicClientAppCredentials();
// if (!dynamicClientAppCredentials) {
// throw new Error("{/app/modules/oauth/token-handlers.js} Could not set up encoded tenant based " +
// "client credentials to session context as the server is unable to obtain " +
// "dynamic client credentials - setUpEncodedTenantBasedWebSocketClientAppCredentials(x)");
// }
// var encodedTenantBasedWebSocketClientAppCredentials =
// tokenUtil.encode(dynamicClientAppCredentials["clientId"] + ":" +
// dynamicClientAppCredentials["clientSecret"]);
// // setting up encoded tenant based client credentials to session context.
// session.put(constants["ENCODED_TENANT_BASED_WEB_SOCKET_CLIENT_CREDENTIALS"],
// encodedTenantBasedWebSocketClientAppCredentials);
// }
}
};
// }
// };
return publicMethods;
}();
}();

View File

@ -35,18 +35,18 @@
<div class="tile-icon"><i class="fw fw-mobile"></i></div>
<div class="tile-stats">
<span id="device-count">{{deviceCount}}</span>
<span class="tile-stats-free">
<span class="tile-stats-free">
<!--suppress HtmlUnknownTarget -->
{{#if deviceCount}}
<a href="{{@app.context}}/devices">
{{#if deviceCount}}
<a href="{{@app.context}}/devices">
<span class="fw-stack">
<i class="fw fw-circle-outline fw-stack-2x"></i>
<i class="fw fw-view fw-stack-1x"></i>
</span>
View
</a>
{{/if}}
<!--suppress HtmlUnknownTarget -->
{{/if}}
<!--suppress HtmlUnknownTarget -->
<a href="{{@app.context}}/device/enroll">
<span class="fw-stack">
<i class="fw fw-circle-outline fw-stack-2x"></i>
@ -66,7 +66,7 @@
<div class="tile-icon"><i class="fw fw-group"></i></div>
<div class="tile-stats">
<span id="group-count">{{groupCount}}</span>
<span class="tile-stats-free">
<span class="tile-stats-free">
{{#if groupCount}}
<!--suppress HtmlUnknownTarget -->
<a href="{{@app.context}}/groups">
@ -77,14 +77,16 @@
View
</a>
{{/if}}
<!--suppress HtmlUnknownTarget -->
<a href="{{@app.context}}/group/add">
<!--suppress HtmlUnknownTarget -->
<a href="{{@app.context}}/group/add">
<span class="fw-stack">
<i class="fw fw-circle-outline fw-stack-2x"></i>
<i class="fw fw-add fw-stack-1x"></i>
</span>
Add
</a>
</span>
</div>
</div>
@ -97,7 +99,7 @@
<div class="tile-icon"><i class="fw fw-user"></i></div>
<div class="tile-stats">
<span id="user-count">{{userCount}}</span>
<span class="tile-stats-free">
<span class="tile-stats-free">
{{#if userCount}}
<!--suppress HtmlUnknownTarget -->
<a href="{{@app.context}}/users">
@ -108,14 +110,16 @@
View
</a>
{{/if}}
<!--suppress HtmlUnknownTarget -->
<a href="{{@app.context}}/user/add">
<!--suppress HtmlUnknownTarget -->
{{#unless isCloud}}
<a href="{{@app.context}}/user/add">
<span class="fw-stack">
<i class="fw fw-circle-outline fw-stack-2x"></i>
<i class="fw fw-add fw-stack-1x"></i>
</span>
Add
</a>
{{/unless}}
</span>
</div>
</div>
@ -128,7 +132,7 @@
<div class="tile-icon"><i class="fw fw-policy"></i></div>
<div class="tile-stats">
<span id="policy-count">{{policyCount}}</span>
<span class="tile-stats-free">
<span class="tile-stats-free">
{{#if policyCount}}
<!--suppress HtmlUnknownTarget -->
<a href="{{@app.context}}/policies">
@ -139,14 +143,16 @@
View
</a>
{{/if}}
<!--suppress HtmlUnknownTarget -->
<a href="{{@app.context}}/policy/add">
<!--suppress HtmlUnknownTarget -->
<a href="{{@app.context}}/policy/add">
<span class="fw-stack">
<i class="fw fw-circle-outline fw-stack-2x"></i>
<i class="fw fw-add fw-stack-1x"></i>
</span>
Add
</a>
</span>
</div>
</div>
@ -171,13 +177,15 @@
</a>
{{/if}}
<!--suppress HtmlUnknownTarget -->
<a href="{{@app.context}}/role/add">
{{#unless isCloud}}
<a href="{{@app.context}}/role/add">
<span class="fw-stack">
<i class="fw fw-circle-outline fw-stack-2x"></i>
<i class="fw fw-add fw-stack-1x"></i>
</span>
Add
</a>
{{/unless}}
</span>
</div>
</div>
@ -189,4 +197,4 @@
</h1>
{{/if}}
</div>
{{/zone}}
{{/zone}}

View File

@ -40,6 +40,7 @@ function onRequest() {
viewModel.userCount = userModule.getUsersCount();
viewModel.policyCount = policyModule.getPoliciesCount();
viewModel.roleCount = userModule.getRolesCount();
viewModel.isCloud = devicemgtProps.isCloud;
return viewModel;
}

View File

@ -152,6 +152,7 @@
</div>
</div>
</div>
<!-- /content/body -->
{{/zone}}
{{#zone "bottomJs"}}

View File

@ -57,7 +57,7 @@
Assign from My Devices
</a>
</li>
<li>
<!--<li>
<a href="{{@app.context}}/group/{{group.id}}/analytics" class="cu-btn">
<span class="icon fw-stack">
<i class="fw fw-statistics fw-stack-1x"></i>
@ -65,7 +65,7 @@
</span>
View Analytics
</a>
</li>
</li>-->
{{else}}
{{#if permissions.enroll}}
<li>
@ -91,7 +91,8 @@
<div id="device_overview">
<div class="media-left col-lg-2">
<div class="icon">
<img src="/devicemgt/public/cdmf.page.groups/images/group-icon.png" style="background-color: #11375b; height: 152px;">
<img src="/devicemgt/public/cdmf.page.groups/images/group-icon.png"
style="background-color: #11375b; height: 152px;">
</div>
</div>
<div class="media-body asset-desc add-padding-left-5x">
@ -139,7 +140,7 @@
{{unit "cdmf.unit.device.operation-mod"}}
{{#if deviceCount}}
<div id="loading-content" class="col-centered">
<i class="fw fw-settings fw-spin fw-2x"></i>
<i class="fw fw-wso2-logo fw-pulse fw-2x"></i>
Loading devices . . .
<br>
</div>
@ -214,11 +215,11 @@
</thead>
<tbody id="ast-container">
<br class="c-both" />
<br class="c-both"/>
</tbody>
</table>
</div>
<br class="c-both" />
<br class="c-both"/>
<div id="content-filter-types" style="display: none">
<div class="sort-title">Sort By</div>
<div class="sort-options">
@ -236,13 +237,13 @@
<i class="fw fw-devices fw-3x"></i>
</h3>
<h3 class="text-muted">
You don't have any device
You don't have any
{{#if group}}
assigned to this group
devices assigned to this group. Let's add a device!
{{else}}
enrolled
enrolled devices. Let's enroll a device!
{{/if}}
at the moment.
</h3>
<h3>
{{#if group}}
@ -256,7 +257,7 @@
</a>
{{else}}
{{#if permissions.enroll}}
<!--suppress HtmlUnknownTarget -->
<!--suppress HtmlUnknownTarget -->
<a href="{{@app.context}}/device/enroll" class="btn-operations btn-default">
<span class="fw-stack">
<i class="fw fw-circle-outline fw-stack-2x"></i>
@ -427,7 +428,7 @@
<div class="row">
<div class="col-lg-5 col-md-6 col-centered">
<h3>Exception at backend. Try Later.</h3>
<br />
<br/>
<div class="buttons">
<a href="#" id="device-400-link" class="btn-operations">
Ok
@ -443,7 +444,7 @@
<div class="row">
<div class="col-lg-5 col-md-6 col-centered">
<h3>Operation not permitted.</h3>
<br />
<br/>
<div class="buttons">
<a href="#" id="device-403-link" class="btn-operations">
Ok
@ -458,9 +459,10 @@
<div class="modal-content">
<div class="row">
<div class="col-lg-5 col-md-6 col-centered">
<h3>You don't have any groups to add this device. Please add group
first.</h3>
<br />
<h3>
You don't have any device group to add this device. Let's add a new
device group!</h3>
<br/>
<div class="buttons">
<a href="{{@app.context}}/group/add" class="btn-operations">
Add New Group
@ -480,7 +482,7 @@
<div class="row">
<div class="col-lg-5 col-md-6 col-centered">
<h3>Device does not exist.</h3>
<br />
<br/>
<div class="buttons">
<a href="#" id="remove-device-409-link" class="btn-operations">
Ok

View File

@ -315,7 +315,7 @@ function loadDevices(searchType, searchParam) {
{
targets: 6,
data: 'status',
class: 'text-right content-fill text-left-on-grid-view no-wrap',
class: 'text-right content-fill text-left-on-grid-view no-wrap tooltip-overflow-fix',
render: function (status, type, row, meta) {
var deviceType = row.deviceType;
var deviceIdentifier = row.deviceIdentifier;
@ -326,7 +326,7 @@ function loadDevices(searchType, searchParam) {
if (analyticsEnabled(row.deviceType)) {
html += '<a href="' + context + '/device/' + deviceType + '/analytics?deviceId=' +
deviceIdentifier + '&deviceName=' + row.name + '" ' + 'data-click-event="remove-form"' +
' class="btn padding-reduce-on-grid-view"><span class="fw-stack">' +
' class="btn padding-reduce-on-grid-view" data-placement="top" data-toggle="tooltip" data-original-title="Analytics"><span class="fw-stack">' +
'<i class="fw fw-circle-outline fw-stack-2x"></i><i class="fw fw-statistics fw-stack-1x"></i></span>' +
'<span class="hidden-xs hidden-on-grid-view">Analytics</span>';
}
@ -337,24 +337,24 @@ function loadDevices(searchType, searchParam) {
+
'data-deviceid="' + deviceIdentifier + '" data-devicetype="' + deviceType
+ '" data-devicename="' +
row.name + '"><span class="fw-stack"><i class="fw fw-circle-outline fw-stack-2x"></i>' +
row.name + '" data-placement="top" data-toggle="tooltip" data-original-title="Group"><span class="fw-stack"><i class="fw fw-circle-outline fw-stack-2x"></i>' +
'<i class="fw fw-group fw-stack-1x"></i></span>' +
'<span class="hidden-xs hidden-on-grid-view">Group</span></a>';
}
html +=
'<a href="#" data-click-event="remove-form" class="btn padding-reduce-on-grid-view edit-device-link" '
+ 'data-deviceid="' + deviceIdentifier + '" data-devicetype="' + deviceType
+ '" data-devicename="' + row.name + '">'
+ '<span class="fw-stack"><i class="fw fw-circle-outline fw-stack-2x"></i>'
+ '<i class="fw fw-edit fw-stack-1x"></i></span>'
+ '<span class="hidden-xs hidden-on-grid-view">Edit</span></a>';
// html +=
// '<a href="#" data-click-event="remove-form" class="btn padding-reduce-on-grid-view edit-device-link" '
// + 'data-deviceid="' + deviceIdentifier + '" data-devicetype="' + deviceType
// + '" data-devicename="' + row.name + '" data-placement="top" data-toggle="tooltip" data-original-title="Edit">'
// + '<span class="fw-stack"><i class="fw fw-circle-outline fw-stack-2x"></i>'
// + '<i class="fw fw-edit fw-stack-1x"></i></span>'
// + '<span class="hidden-xs hidden-on-grid-view">Edit</span></a>';
var groupOwner = $('#group_owner').text();
if (groupId && groupOwner != "wso2.system.user") {
html +=
'<a href="#" data-click-event="remove-form" class="btn padding-reduce-on-grid-view remove-device-link" '
+ 'data-deviceid="' + deviceIdentifier + '" data-devicetype="' + deviceType
+ '" data-devicename="' + row.name + '">'
+ '" data-devicename="' + row.name + '" data-placement="top" data-toggle="tooltip" data-original-title="Remove from group">'
+ '<span class="fw-stack"><i class="fw fw-circle-outline fw-stack-2x"></i>'
+ '<i class="fw fw-delete fw-stack-1x"></i></span>'
+ '<span class="hidden-xs hidden-on-grid-view">Remove from group</span>';
@ -362,7 +362,7 @@ function loadDevices(searchType, searchParam) {
html +=
'<a href="#" data-click-event="remove-form" class="btn padding-reduce-on-grid-view remove-device-link" '
+ 'data-deviceid="' + deviceIdentifier + '" data-devicetype="' + deviceType
+ '" data-devicename="' + row.name + '">'
+ '" data-devicename="' + row.name + '" data-placement="top" data-toggle="tooltip" data-original-title="Delete">'
+ '<span class="fw-stack"><i class="fw fw-circle-outline fw-stack-2x"></i>'
+ '<i class="fw fw-delete fw-stack-1x"></i></span>'
+ '<span class="hidden-xs hidden-on-grid-view">Delete</span>';
@ -460,11 +460,12 @@ function loadDevices(searchType, searchParam) {
$("#loading-content").remove();
attachDeviceEvents();
if($('.advance-search').length < 1){
// Temporary disable
/*if($('.advance-search').length < 1){
$(this).closest('.dataTables_wrapper').find('div[id$=_filter] input')
.after('<a href="'+context+'/devices/search"' +
' class="advance-search add-padding-3x">Advance Search</a>');
}
}*/
}, {
"placeholder": "Search By Device Name",
@ -919,4 +920,4 @@ function getSelectedDevices() {
});
return deviceList;
}
}

View File

@ -1,6 +0,0 @@
{
"version": "1.0.0",
"uri": "/error/404",
"layout": "uuf.layout.default",
"isAnonymous": true
}

View File

@ -17,22 +17,6 @@
}}
{{#zone "title"}}Error | {{@app.conf.appName}}{{/zone}}
{{#zone "breadcrumbs"}}
<li>
<a href="{{@app.context}}/">
<i class="icon fw fw-home"></i>
</a>
</li>
{{/zone}}
{{#zone "content"}}
<div class="message message-danger">
<h4><i class="icon fw fw-error"></i>An Error Occurred!</h4>
<div style="padding-left: 25px;">
<h5><b>HTTP Status : {{@page.params.status}}</b></h5>
<p style="white-space: pre-wrap;">{{@page.params.message}}</p>
</div>
</div>
{{#zone "messageDescription"}}
{{@page.params.status}} - {{@page.params.message}}
{{/zone}}

View File

@ -0,0 +1,5 @@
{
"version": "1.0.0",
"uri": "/errors/default",
"layout" : "cdmf.layout.error"
}

View File

@ -65,7 +65,7 @@
{{else}}
<div id="ast-container" class="ast-container list-view">
<div class="ctrl-info-panel col-centered text-center wr-login">
<h2>You don't have any device assigned to this group to view analytics.</h2>
<h2>You don't have any device assigned to this group to view analytics. Let's add a new device group!</h2>
<br/>
<p class="text-center">
<a href="{{@app.context}}/devices" class="wr-btn">

View File

@ -21,19 +21,26 @@
{{#zone "content"}}
<div class="container container-bg white-bg">
<div class="col-md-12 col-lg-6 col-centered wr-content wr-login col-centered sign-panel">
<div class="col-md-12 col-lg-6 col-centered wr-content wr-login col-centered sign-panel" id="group-create-form">
<p class="page-sub-title">Add New Group</p>
<p>Create new device group on IoT Server</p>
<p>Create new device group on
{{#if isCloud}}
Device Cloud
{{else}}
IoT Server
{{/if}}
.
</p>
<!-- validation -->
<span class="wr-validation-summary hidden center-block col-centered">
<span class="wr-validation-summary hidden center-block col-centered">
<strong class="label label-danger col-centered"></strong>
</span>
<hr/>
<div class="form-login-box">
<div class="form-login-box" >
<label class="wr-input-label">Group Name</label>
<div class="form-group wr-input-control">
@ -51,12 +58,34 @@
<div class="wr-input-control">
<button class="wr-btn" id="add-group-btn">
Add</button>
Add
</button>
<button class="wr-btn" onclick="window.location = '{{@app.context}}/groups';return false;">
Cancel</button>
Cancel
</button>
</div>
</div>
</div>
<div id="group-created-msg" class="container col-centered wr-content hidden">
<div class="wr-form">
<p class="page-sub-title">Group was created successfully.</p>
<br>Please click <b>"Add Another Group"</b>, if you wish to add another group or click
<b>"View Group List"</b> to complete the process and go back to the group list.
<hr/>
<button class="wr-btn" onclick="window.location.href='{{@app.context}}/groups'">View User List
</button>
<a href="{{@app.context}}/group/add" class="cu-btn-inner">
<span class="fw-stack">
<i class="fw fw-circle-outline fw-stack-2x"></i>
<i class="fw fw-add fw-stack-1x"></i>
</span>
Add Another Group
</a>
</div>
</div>
</div>
{{/zone}}
{{#zone "bottomJs"}}

View File

@ -25,6 +25,7 @@
function onRequest(context) {
var devicemgtProps = require("/app/modules/conf-reader/main.js")["conf"];
var page = {};
page["isCloud"] = devicemgtProps.isCloud;
page["groupNameJSRegEx"] = devicemgtProps.groupValidationConfig.groupNameJSRegEx;
page["groupNameRegExViolationErrorMsg"] = devicemgtProps.groupValidationConfig.groupNameRegExViolationErrorMsg;
page["groupNameHelpMsg"] = devicemgtProps.groupValidationConfig.groupNameHelpMsg;

View File

@ -45,13 +45,8 @@ $(function () {
var successCallback = function (jqXHR, status, resp) {
if (resp.status == 201) {
$('.wr-validation-summary strong').text("Group created. You will be redirected to groups");
$('.wr-validation-summary').removeClass("hidden");
$('.wr-validation-summary strong').removeClass("label-danger");
$('.wr-validation-summary strong').addClass("label-success");
setTimeout(function () {
window.location = "../groups";
}, 1500);
$("#group-create-form").addClass("hidden");
$("#group-created-msg").removeClass("hidden");
} else {
displayErrors(resp.status);
}

View File

@ -82,7 +82,7 @@
<h3 class="text-muted">
<i class="fw fw-group fw-3x"></i>
</h3>
<h3 class="text-muted">You don't have any group registered at the moment</h3>
<h3 class="text-muted">You don't have any device group. Let's add a new device group!</h3>
{{#if permissions.ADD_GROUP}}
<h3>
<!--suppress HtmlUnknownTarget -->
@ -103,7 +103,7 @@
<div class="modal-header">
<h3 class="pull-left modal-title">
<span>
<span class="fw-stack">
<span class="fw-stack add-margin-right-2x">
<i class="fw fw-circle-outline fw-stack-2x"></i>
<i class="fw fw-share fw-stack-1x"></i>
</span> Group Sharing
@ -145,7 +145,7 @@
<div class="modal-header">
<h3 class="pull-left modal-title">
<span>
<span class="fw-stack">
<span class="fw-stack add-margin-right-2x">
<i class="fw fw-circle-outline fw-stack-2x"></i>
<i class="fw fw-bookmark fw-stack-1x"></i>
</span> Group Sharing Role
@ -262,7 +262,7 @@
<div class="modal-header">
<h3 class="pull-left modal-title">
<span>
<span class="fw-stack">
<span class="fw-stack add-margin-right-2x">
<i class="fw fw-circle-outline fw-stack-2x"></i>
<i class="fw fw-edit fw-stack-1x"></i>
</span> Update Group

View File

@ -180,33 +180,33 @@ function loadGroups() {
{
targets: 4,
data: 'id',
class: 'text-right content-fill text-left-on-grid-view no-wrap',
class: 'text-right content-fill text-left-on-grid-view no-wrap tooltip-overflow-fix',
render: function (id, type, row, meta) {
var html = '';
if ($.hasPermission("VIEW_GROUP_DEVICES")) {
html += '<a href="group/' + row.groupId
/*html += '<a href="group/' + row.groupId
+ '/analytics" data-click-event="remove-form" class="btn padding-reduce-on-grid-view">' +
'<span class="fw-stack"><i class="fw fw-circle-outline fw-stack-2x"></i><i class="fw fw-statistics fw-stack-1x"></i></span>'
+
'<span class="hidden-xs hidden-on-grid-view">Analytics</span></a>';
'<span class="hidden-xs hidden-on-grid-view">Analytics</span></a>';*/
}
if (row.owner != "wso2.system.user") {
if ($.hasPermission("SHARE_GROUP")) {
html +=
'<a href="#" data-click-event="remove-form" class="btn padding-reduce-on-grid-view share-group-link" data-group-id="'
+ row.groupId + '" ' +
'data-group-owner="' + row.owner
+ '"><span class="fw-stack"><i class="fw fw-circle-outline fw-stack-2x"></i><i class="fw fw-share fw-stack-1x"></i></span>'
+
'<span class="hidden-xs hidden-on-grid-view">Share</span></a>';
}
// if ($.hasPermission("SHARE_GROUP")) {
// html +=
// '<a href="#" data-click-event="remove-form" class="btn padding-reduce-on-grid-view share-group-link" data-group-id="'
// + row.groupId + '" ' +
// 'data-group-owner="' + row.owner
// + '" data-placement="top" data-toggle="tooltip" data-original-title="Share"><span class="fw-stack"><i class="fw fw-circle-outline fw-stack-2x"></i><i class="fw fw-share fw-stack-1x"></i></span>'
// +
// '<span class="hidden-xs hidden-on-grid-view">Share</span></a>';
// }
if ($.hasPermission("UPDATE_GROUP")) {
html +=
'<a href="#" data-click-event="remove-form" class="btn padding-reduce-on-grid-view edit-group-link" data-group-name="'
+ row.name + '" ' +
'data-group-owner="' + row.owner + '" data-group-description="' + row.description
+ '" data-group-id="' + row.groupId
+ '"><span class="fw-stack"><i class="fw fw-circle-outline fw-stack-2x"></i>' +
+ '" data-placement="top" data-toggle="tooltip" data-original-title="Edit"><span class="fw-stack"><i class="fw fw-circle-outline fw-stack-2x"></i>' +
'<i class="fw fw-edit fw-stack-1x"></i></span><span class="hidden-xs hidden-on-grid-view">Edit</span></a>';
}
if ($.hasPermission("REMOVE_GROUP")) {
@ -214,7 +214,7 @@ function loadGroups() {
'<a href="#" data-click-event="remove-form" class="btn padding-reduce-on-grid-view remove-group-link" data-group-id="'
+ row.groupId + '" ' +
'data-group-owner="' + row.owner
+ '"><span class="fw-stack"><i class="fw fw-circle-outline fw-stack-2x"></i><i class="fw fw-delete fw-stack-1x"></i>'
+ '" data-placement="top" data-toggle="tooltip" data-original-title="Delete"><span class="fw-stack"><i class="fw fw-circle-outline fw-stack-2x"></i><i class="fw fw-delete fw-stack-1x"></i>'
+
'</span><span class="hidden-xs hidden-on-grid-view">Delete</span></a>';
}

View File

@ -91,7 +91,7 @@
<h3 class="text-muted">
<i class="fw fw-policy fw-3x"></i>
</h3>
<h3 class="text-muted">You do not have any device policy at the moment</h3>
<h3 class="text-muted">You don't have any device policies. Let's add a new policy!</h3>
{{#if permissions.ADD_ADMIN_POLICY}}
<h3>
<!--suppress HtmlUnknownTarget -->

View File

@ -142,8 +142,14 @@ function loadRoles() {
class: "text-right content-fill text-left-on-grid-view no-wrap",
data: null,
render: function (data, type, row, meta) {
return '' +
'<a onclick="javascript:loadRoleBasedActionURL(\'edit\', \'' + data.name + '\')" ' +
var isCloud = false;
if ($('#is-cloud').length > 0){
isCloud = true;
}
var innerhtml = '';
var editLink = '<a onclick="javascript:loadRoleBasedActionURL(\'edit\', \'' + data.name + '\')" ' +
'data-role="' + data.name + '" ' +
'data-click-event="edit-form" ' +
'class="btn padding-reduce-on-grid-view edit-role-link">' +
@ -156,8 +162,9 @@ function loadRoles() {
'</span>' +
'</span>' +
'<span class="hidden-xs hidden-on-grid-view">Edit</span>' +
'</a>' +
'<a onclick="javascript:loadRoleBasedActionURL(\'edit-permission\', \'' + data.name + '\')" ' +
'</a>';
var editPermissionLink = '<a onclick="javascript:loadRoleBasedActionURL(\'edit-permission\', \'' + data.name + '\')" ' +
'data-role="' + data.name + '" ' +
'data-click-event="edit-form" ' +
'class="btn padding-reduce-on-grid-view edit-permission-link">' +
@ -170,8 +177,9 @@ function loadRoles() {
'</span>' +
'</span>' +
'<span class="hidden-xs hidden-on-grid-view">Edit Permission</span>' +
'</a>' +
'<a data-role="' + data.name + '" ' +
'</a>';
var removeLink = '<a data-role="' + data.name + '" ' +
'data-click-event="remove-form" ' +
'class="btn padding-reduce-on-grid-view remove-role-link">' +
'<span class="fw-stack">' +
@ -180,6 +188,11 @@ function loadRoles() {
'</span>' +
'<span class="hidden-xs hidden-on-grid-view">Remove</span>' +
'</a>';
if (!isCloud) {
innerhtml = editLink + editPermissionLink + removeLink;
}
return innerhtml;
}
}
];

View File

@ -35,6 +35,7 @@
{{/zone}}
{{#zone "navbarActions"}}
{{#unless isCloud}}
<li>
<!--suppress HtmlUnknownTarget -->
<a href="{{@app.context}}/role/add" class="cu-btn">
@ -45,16 +46,22 @@
Add Role
</a>
</li>
{{/unless}}
{{/zone}}
{{#zone "content"}}
<div id="loading-content" class="col-centered">
{{#unless isCloud}}
{{#if removePermitted}}
<input type="hidden" id="can-remove" value="true" />
{{/if}}
{{#if editPermitted}}
<input type="hidden" id="can-edit" value="true" />
{{/if}}
{{/unless}}
{{#if isCloud}}
<input type="hidden" id="is-cloud" value="true" />
{{/if}}
<i class="fw fw-settings fw-spin fw-2x"></i>
Loading roles . . .
<br>

View File

@ -32,6 +32,7 @@ function onRequest(context) {
}
context["adminRole"] = deviceMgtProps["adminRole"];
context["isCloud"] = deviceMgtProps["isCloud"];
return context;
}

View File

@ -37,94 +37,99 @@
{{#zone "content"}}
{{#if canView}}
{{#zone "contentTitle"}}
<div class="row wr-device-board">
<div class="col-lg-12 wr-secondary-bar">
<label class="device-id device-select" data-username="{{user.username}}">
{{#if user.firstname}}
{{user.firstname}} {{user.lastname}}
{{else}}
{{user.username}}
{{/if}}
</label>
{{#zone "contentTitle"}}
<div class="row wr-device-board">
<div class="col-lg-12 wr-secondary-bar">
<label class="device-id device-select" data-username="{{user.username}}">
{{#if user.firstname}}
{{user.firstname}} {{user.lastname}}
{{else}}
{{user.username}}
{{/if}}
</label>
</div>
</div>
</div>
{{/zone}}
{{/zone}}
<div class="row no-gutter add-padding-5x add-margin-top-5x" style="border: 1px solid #e4e4e4;">
<div class="media">
<div class="media-left media-middle asset-image col-xs-2 col-sm-2 col-md-2 col-lg-2">
<div class="thumbnail icon" style="margin-bottom: 43px"><i class="square-element text fw fw-user"></i>
<div class="row no-gutter add-padding-5x add-margin-top-5x" style="border: 1px solid #e4e4e4;">
<div class="media">
<div class="media-left media-middle asset-image col-xs-2 col-sm-2 col-md-2 col-lg-2">
<div class="thumbnail icon" style="margin-bottom: 43px"><i
class="square-element text fw fw-user"></i>
</div>
<div class="media">
{{#unless isCloud}}
{{#if editPermitted}}
<button class="wr-btn"
onclick="location.href='{{@app.context}}/users/edit-user?username={{user.username}}';"
id="sortUpdateBtn"
style="width: 100%; vertical-align: bottom; background-color: #7fa030;"><span><i
class="fw fw-edit"></i> Edit</span></button>
{{/if}}
{{/unless}}
</div>
</div>
<div class="media">
{{#if editPermitted}}
<button class="wr-btn"
onclick="location.href='{{@app.context}}/users/edit-user?username={{user.username}}';"
id="sortUpdateBtn"
style="width: 100%; vertical-align: bottom; background-color: #7fa030;"><span><i
class="fw fw-edit"></i> Edit</span></button>
{{/if}}
<div class="media-body asset-desc add-padding-left-5x">
<div style="background: #11375B; color: #fff; padding: 10px; margin-bottom: 5px">Profile Overview
</div>
{{#defineZone "user-detail-properties"}}
<table class="table table-responsive table-striped" id="members">
<tbody>
<tr role="row" class="even">
<td class="sorting_1" style="padding:10px 15px; width: 7%;">Username</td>
<td style="padding:10px 15px;">{{user.username}}</td>
</tr>
<tr role="row" class="odd">
<td class="sorting_1" style="padding:10px 15px;">First Name</td>
<td style="padding:10px 15px;">{{user.firstname}}</td>
</tr>
<tr role="row" class="even">
<td class="sorting_1" style="padding:10px 15px;">Last Name</td>
<td style="padding:10px 15px;">{{user.lastname}}</td>
</tr>
<tr role="row" class="even">
<td class="sorting_1" style="padding:10px 15px;">Email</td>
<td style="padding:10px 15px;">{{user.emailAddress}}</td>
</tr>
<tr role="row" class="even">
<td class="sorting_1" style="padding:10px 15px;">Roles</td>
<td style="padding:10px 15px;">
{{#each userRoles}}
<option selected="selected">{{this}}</option>
{{/each}}
</td>
</tr>
</tbody>
</table>
{{/defineZone}}
</div>
</div>
<div class="media-body asset-desc add-padding-left-5x">
<div style="background: #11375B; color: #fff; padding: 10px; margin-bottom: 5px">Profile Overview</div>
{{#defineZone "user-detail-properties"}}
<table class="table table-responsive table-striped" id="members">
<tbody>
<tr role="row" class="even">
<td class="sorting_1" style="padding:10px 15px; width: 7%;">Username</td>
<td style="padding:10px 15px;">{{user.username}}</td>
</tr>
<tr role="row" class="odd">
<td class="sorting_1" style="padding:10px 15px;">First Name</td>
<td style="padding:10px 15px;">{{user.firstname}}</td>
</tr>
<tr role="row" class="even">
<td class="sorting_1" style="padding:10px 15px;">Last Name</td>
<td style="padding:10px 15px;">{{user.lastname}}</td>
</tr>
<tr role="row" class="even">
<td class="sorting_1" style="padding:10px 15px;">Email</td>
<td style="padding:10px 15px;">{{user.emailAddress}}</td>
</tr>
<tr role="row" class="even">
<td class="sorting_1" style="padding:10px 15px;">Roles</td>
<td style="padding:10px 15px;">
{{#each userRoles}}
<option selected="selected">{{this}}</option>
{{/each}}
</td>
</tr>
</tbody>
</table>
{{/defineZone}}
</div>
</div>
<div class="media">
<div class="media-left col-xs-12 col-sm-2 col-md-2 col-lg-2">
<ul class="list-group" role="tablist">
<li class="active"><a class="list-group-item" href="#enrolled_devices" role="tab"
data-toggle="tab" aria-controls="enrolled_devices">Enrolled Devices</a>
</li>
</ul>
</div>
{{#defineZone "user-enrolled-devices"}}
<div class="media-body add-padding-left-5x remove-padding-xs tab-content">
<div class="panel-group tab-content">
<div class="panel panel-default tab-pane active" id="enrolled_devices"
role="tabpanel" aria-labelledby="enrolled_devices">
<div class="panel-heading">Enrolled Devices by
{{#if user.firstname}}
{{user.firstname}} {{user.lastname}}
{{else}}
{{user.username}}
{{/if}}
</div>
<div class="panel-body">
<div id="enrolled_devices-container">
<div class="panel-body">
{{#each devices}}
<div class="wr-list-group wr-sortable policy-list">
<div class="media">
<div class="media-left col-xs-12 col-sm-2 col-md-2 col-lg-2">
<ul class="list-group" role="tablist">
<li class="active"><a class="list-group-item" href="#enrolled_devices" role="tab"
data-toggle="tab" aria-controls="enrolled_devices">Enrolled Devices</a>
</li>
</ul>
</div>
{{#defineZone "user-enrolled-devices"}}
<div class="media-body add-padding-left-5x remove-padding-xs tab-content">
<div class="panel-group tab-content">
<div class="panel panel-default tab-pane active" id="enrolled_devices"
role="tabpanel" aria-labelledby="enrolled_devices">
<div class="panel-heading">Enrolled Devices by
{{#if user.firstname}}
{{user.firstname}} {{user.lastname}}
{{else}}
{{user.username}}
{{/if}}
</div>
<div class="panel-body">
<div id="enrolled_devices-container">
<div class="panel-body">
{{#each devices}}
<div class="wr-list-group wr-sortable policy-list">
<span class="list-group-item" id="{{id}}">
<div class="row">
<div class="col-lg-3 clearfix">
@ -155,19 +160,19 @@
</div>
</div>
</span>
</div>
{{/each}}
</div>
{{/each}}
</div>
<br class="c-both"/>
</div>
<br class="c-both"/>
</div>
</div>
</div>
</div>
</div>
{{/defineZone}}
{{/defineZone}}
</div>
</div>
</div>
{{else}}
{{else}}
<h1 class="page-sub-title">
Permission Denied
</h1>

View File

@ -20,6 +20,7 @@ function onRequest(context) {
var userModule = require("/app/modules/business-controllers/user.js")["userModule"];
var username = request.getParameter("username");
var user = userModule.getUser(username)["content"];
var deviceMgtProps = require("/app/modules/conf-reader/main.js")["conf"];
var userName = request.getParameter("username");
@ -45,5 +46,8 @@ function onRequest(context) {
if (userModule.isAuthorized("/permission/admin/device-mgt/users/view")) {
canView = true;
}
return {"user": user, "userRoles": userRoles, "devices": devices, "canView": canView};
var isCloud = deviceMgtProps.isCloud;
return {"user": user, "userRoles": userRoles, "devices": devices, "canView": canView, "isCloud" : isCloud};
}

View File

@ -337,31 +337,31 @@ function loadUsers() {
}
},
{
class: "text-right content-fill text-left-on-grid-view no-wrap",
class: "text-right content-fill text-left-on-grid-view no-wrap tooltip-overflow-fix",
data: null,
render: function (data, type, row, meta) {
var editbtn = '<a data-toggle="tooltip" data-placement="bottom" title="Edit User"href="' + context +
var editbtn = '<a data-toggle="tooltip" data-placement="top" title="Edit User"href="' + context +
'/user/edit?username=' + encodeURIComponent(data.filter) + '" data-username="' + data.filter + '" ' +
'data-click-event="edit-form" ' +
'class="btn padding-reduce-on-grid-view edit-user-link"> ' +
'class="btn padding-reduce-on-grid-view edit-user-link" data-placement="top" data-toggle="tooltip" data-original-title="Edit"> ' +
'<span class="fw-stack"> ' +
'<i class="fw fw-circle-outline fw-stack-2x"></i>' +
'<i class="fw fw-edit fw-stack-1x"></i>' +
'</span><span class="hidden-xs hidden-on-grid-view">Edit</span></a>';
var resetPasswordbtn = '<a data-toggle="tooltip" data-placement="bottom" title="Reset Password" href="#" data-username="' + data.filter + '" data-userid="' + data.filter + '" ' +
var resetPasswordbtn = '<a data-toggle="tooltip" data-placement="top" title="Reset Password" href="#" data-username="' + data.filter + '" data-userid="' + data.filter + '" ' +
'data-click-event="edit-form" ' +
'onclick="javascript:resetPassword(\'' + data.filter + '\')" ' +
'class="btn padding-reduce-on-grid-view remove-user-link">' +
'class="btn padding-reduce-on-grid-view remove-user-link" data-placement="top" data-toggle="tooltip" data-original-title="Reset Password">' +
'<span class="fw-stack">' +
'<i class="fw fw-circle-outline fw-stack-2x"></i>' +
'<i class="fw fw-key fw-stack-1x"></i>' +
'</span><span class="hidden-xs hidden-on-grid-view">Reset Password</span></a>';
var removebtn = '<a data-toggle="tooltip" data-placement="bottom" title="Remove User" href="#" data-username="' + data.filter + '" data-userid="' + data.filter + '" ' +
var removebtn = '<a data-toggle="tooltip" data-placement="top" title="Remove User" href="#" data-username="' + data.filter + '" data-userid="' + data.filter + '" ' +
'data-click-event="remove-form" ' +
'onclick="javascript:removeUser(\'' + data.filter + '\')" ' +
'class="btn padding-reduce-on-grid-view remove-user-link">' +
'class="btn padding-reduce-on-grid-view remove-user-link" data-placement="top" data-toggle="tooltip" data-original-title="Remove">' +
'<span class="fw-stack">' +
'<i class="fw fw-circle-outline fw-stack-2x"></i>' +
'<i class="fw fw-delete fw-stack-1x"></i>' +

View File

@ -35,6 +35,7 @@
{{/zone}}
{{#zone "navbarActions"}}
{{#unless isCloud}}
<li>
<!--suppress HtmlUnknownTarget -->
<a href="{{@app.context}}/user/add">
@ -45,18 +46,21 @@
Add User
</a>
</li>
{{/unless}}
{{/zone}}
{{#zone "content"}}
<input type="hidden" id="user" value="{{user.username}}">
<!-- content -->
<div id="loading-content" class="col-centered">
{{#if canManage}}
<input type="hidden" id="can-remove" value="true"/>
<input type="hidden" id="can-edit" value="true"/>
<input type="hidden" id="can-invite" value="true"/>
<input type="hidden" id="can-reset-password" value="true"/>
{{/if}}
{{#unless isCloud}}
{{#if canManage}}
<input type="hidden" id="can-remove" value="true"/>
<input type="hidden" id="can-edit" value="true"/>
<input type="hidden" id="can-invite" value="true"/>
<input type="hidden" id="can-reset-password" value="true"/>
{{/if}}
{{/unless}}
{{#if canView}}
<input type="hidden" id="can-view" value="true"/>
{{/if}}
@ -108,14 +112,16 @@
Enter new password
<br><br>
<div>
<input type="password" autocomplete="off" class="form-control modal-input operationDataKeys new-password"
<input type="password" autocomplete="off"
class="form-control modal-input operationDataKeys new-password"
data-key="message"/>
</div>
<br>
Retype new password
<br><br>
<div>
<input type="password" autocomplete="off" class="form-control modal-input operationDataKeys confirmed-password"
<input type="password" autocomplete="off"
class="form-control modal-input operationDataKeys confirmed-password"
data-key="message"/>
</div>
<br>

View File

@ -33,6 +33,7 @@ function onRequest(context) {
page["currentUser"] = userModule.getCarbonUser().username;
page["adminUser"] = deviceMgtProps["adminUser"].split("@")[0];
page["isCloud"] = deviceMgtProps["isCloud"];
if (userModule.isAuthorized("/permission/admin/device-mgt/users/manage")) {
page.canManage = true;

View File

@ -103,6 +103,14 @@ $.fn.datatables_extended_serverside_paging = function (settings, url, dataFilter
fnCreatedRow: fnCreatedRow,
"fnDrawCallback": fnDrawCallback,
initComplete: function () {
//loading tooltips
if (typeof $.fn.tooltip == 'function') {
$('[data-toggle="tooltip"]').tooltip();
} else {
console.warn('Warning : Dependency missing - Bootstrap Tooltip Library');
}
this.api().columns().every(function () {
var column = this;

View File

@ -6,7 +6,7 @@
* Opens a modal popup with input to enter multiple email addresses to send invites
*/
function toggleEmailInvite(){
modalDialog.header('<h4 class="pull-left modal-title"><span class="fw-stack add-margin-right-1x">' +
modalDialog.header('<h4 class="pull-left modal-title"><span class="fw-stack add-margin-right-2x">' +
'<i class="fw fw-user fw-stack-2x"></i>' +
'<span class="fw-stack fw-move-right fw-move-bottom">' +
'<i class="fw fw-circle-outline fw-stack-2x"></i>' +

View File

@ -19,7 +19,7 @@
<div id="qr-code-modal" data-enrollment-url="{{@unit.params.enrollmentURL}}" class="hidden">
<div class="modal-header">
<h4 class="pull-left modal-title">
<span class="fw-stack">
<span class="fw-stack add-margin-right-2x">
<i class="fw fw-mobile fw-stack-2x"></i>
<span class="fw-stack fw-move-right fw-move-bottom">
<i class="fw fw-circle-outline fw-stack-2x"></i>

View File

@ -22,87 +22,87 @@
<span class="icon fw-stack fw-lg">
<i class="fw fw-organization fw-stack-1x" title=" {{@user.domain}}"></i>
</span>
<span class="hidden-xs">
<span class="hidden-xs username">
{{@user.domain}}
</span>
</a>
</li>
<li class="visible-inline-block">
<!--<li class="visible-inline-block">-->
<a href="#" target="_blank" class="dropdown" data-toggle="dropdown" title="Account">
<!--<a href="#" target="_blank" class="dropdown" data-toggle="dropdown" title="Account">-->
<span class="icon fw-stack fw-lg" style="color: red">
<i class="fw fw-resource fw-stack-1x" title="Account"></i>
</span>
<span class="hidden-xs" style="color: red">
Trial 14 days to upgrade
</span>
<!--<span class="icon fw-stack fw-lg" style="color: red">-->
<!--<i class="fw fw-resource fw-stack-1x" title="Account"></i>-->
<!--</span>-->
<!--<span class="hidden-xs" style="color: red">-->
<!--Trial 14 days to upgrade-->
<!--</span>-->
<span class="caret"></span>
</a>
<!--<span class="caret"></span>-->
<!--</a>-->
<ul class="dropdown-menu dropdown-menu-right float-remove-xs position-static-xs text-center-xs remove-margin-xs slideInDown"
role="menu">
<!--<ul class="dropdown-menu dropdown-menu-right float-remove-xs position-static-xs text-center-xs remove-margin-xs slideInDown"-->
<!--role="menu">-->
<li>
<a title="Upgrade Now"
href="{{upgradeNowURL}}"
target="_self">
<i class="fw fw-export" title="Upgrade Now"></i> Upgrade Now
</a>
</li>
<!--<li>-->
<!--<a title="Upgrade Now"-->
<!--href="{{upgradeNowURL}}"-->
<!--target="_self">-->
<!--<i class="fw fw-export" title="Upgrade Now"></i> Upgrade Now-->
<!--</a>-->
<!--</li>-->
<li>
<a title="Monetization"
href="{{monetizationURL}}"
target="_self">
<i class="fa fa-money fa-lg" title="Monetization"></i> Monetization
</a>
</li>
<!--<li>-->
<!--<a title="Monetization"-->
<!--href="{{monetizationURL}}"-->
<!--target="_self">-->
<!--<i class="fa fa-money fa-lg" title="Monetization"></i> Monetization-->
<!--</a>-->
<!--</li>-->
<li>
<a title="Request Extension"
href="{{requestExtensionURL}}"
target="_blank">
<i class="fw fw-mail" title="Request Extension"></i> Request Extension
</a>
</li>
<!--<li>-->
<!--<a title="Request Extension"-->
<!--href="{{requestExtensionURL}}"-->
<!--target="_blank">-->
<!--<i class="fw fw-mail" title="Request Extension"></i> Request Extension-->
<!--</a>-->
<!--</li>-->
</ul>
</li>
<!--</ul>-->
<!--</li>-->
<li class="visible-inline-block">
<!--<li class="visible-inline-block">-->
<a href="#" target="null" class="dropdown" data-toggle="dropdown" title="App Management">
<span class="icon fw-stack fw-lg">
<i class="fw fw-settings fw-stack-1x" title="App Management"></i>
</span>
<span class="hidden-xs">
App Management
</span>
<span class="caret"></span>
</a>
<!--<a href="#" target="null" class="dropdown" data-toggle="dropdown" title="App Management">-->
<!--<span class="icon fw-stack fw-lg">-->
<!--<i class="fw fw-settings fw-stack-1x" title="App Management"></i>-->
<!--</span>-->
<!--<span class="hidden-xs">-->
<!--App Management-->
<!--</span>-->
<!--<span class="caret"></span>-->
<!--</a>-->
<ul class="dropdown-menu dropdown-menu-right float-remove-xs position-static-xs text-center-xs remove-margin-xs slideInDown"
role="menu">
<li class="visible-inline-block">
<a title="Mobile App Publisher" href="{{publisherURL}}"
target="_self">
<i class="fw fw-user" title="Mobilr App Publisher"></i> App Publisher
</a>
</li>
<!--<ul class="dropdown-menu dropdown-menu-right float-remove-xs position-static-xs text-center-xs remove-margin-xs slideInDown"-->
<!--role="menu">-->
<!--<li class="visible-inline-block">-->
<!--<a title="Mobile App Publisher" href="{{publisherURL}}"-->
<!--target="_self">-->
<!--<i class="fw fw-user" title="Mobilr App Publisher"></i> App Publisher-->
<!--</a>-->
<!--</li>-->
<li class="visible-inline-block">
<a title="App Store " href="{{storeURL}}"
target="_self">
<i class="fw fw-store" title="App Store"></i> App Store
</a>
</li>
<!--<li class="visible-inline-block">-->
<!--<a title="App Store " href="{{storeURL}}"-->
<!--target="_self">-->
<!--<i class="fw fw-store" title="App Store"></i> App Store-->
<!--</a>-->
<!--</li>-->
</ul>
</li>
<!--</ul>-->
<!--</li>-->
<li class="visible-inline-block">
<a href="{{contactUsURL}}" target="_self"
@ -175,12 +175,8 @@
<i class="fw fw-circle-outline fw-stack-2x" title="User"></i>
<i class="fw fw-user fw-stack-1x" title="User"></i>
</span>
<span class="hidden-xs">
{{#if isSuperTenant }}
<span class="hidden-xs username">
{{@user.username}}</span><span class="caret"></span>
{{else}}
{{@user.username}}@{{@user.domain}}</span><span class="caret"></span>
{{/if}}
</a>
<ul class="dropdown-menu dropdown-menu-right float-remove-xs position-static-xs text-center-xs remove-margin-xs slideInDown"
role="menu">
@ -229,17 +225,17 @@
<div id="popover-content" class="hide">
<div class="cloud-apps">
<a href="{{apiCloudURL}}https://api.cloud.wso2.com/publisher" target="_self" class="cloud-block add-padding-top-3x">
<a href="{{apiCloudURL}}" target="_self" class="cloud-block add-padding-top-3x">
<i class="fw fw-api fw-3x"></i>
<div class="cloud-name">API Cloud</div>
</a>
<a href="{{appCloudURL}}https://apps.cloud.wso2.com/appmgt" target="_self" class="cloud-block add-padding-top-3x">
<a href="{{appCloudURL}}" target="_self" class="cloud-block add-padding-top-3x">
<i class="fw fw-application fw-3x"></i>
<div class="cloud-name">App Cloud</div>
</a>
<a href="{{deviceCloudURL}}https://devicemgt.cloud.wso2.com/devicemgt" target="_self" class="cloud-block add-padding-top-3x">
<a href="{{deviceCloudURL}}" target="_self" class="cloud-block add-padding-top-3x">
<i class="fw fw-mobile fw-3x"></i>
<div class="cloud-name">Device Cloud</div>
</a>
@ -249,12 +245,12 @@
<div class="cloud-actions">
<h3>Manage your cloud</h3>
<a href="{{oraganizationURL}}https://cloudmgt.cloud.wso2.com/cloudmgt/site/pages/organization.jag" target="_self" class="cloud-block-invert add-padding-top-3x">
<a href="{{oraganizationURL}}" target="_self" class="cloud-block-invert add-padding-top-3x">
<i class="fw fw-organization fw-3x"></i>
<div class="cloud-name">Organization</div>
</a>
<a href="{{membersURL}}https://cloudmgt.cloud.wso2.com/cloudmgt/site/pages/user.jag" target="_self" class="cloud-block-invert add-padding-top-3x">
<a href="{{membersURL}}" target="_self" class="cloud-block-invert add-padding-top-3x">
<i class="fa fa-users fa-3x"></i>
<div class="cloud-name">Members</div>
</a>

View File

@ -18,6 +18,7 @@
function onRequest(context) {
var constants = require("/app/modules/constants.js");
var mdmProps = require("/app/modules/conf-reader/main.js")["conf"];
var user = context.user;
var isSuperTenant = false;
if (user.tenantId == -1234){
@ -26,5 +27,19 @@ function onRequest(context) {
var viewModal = {};
viewModal.isSuperTenant = isSuperTenant;
viewModal.USER_SESSION_KEY = session.get(constants["USER_SESSION_KEY"]);
viewModal.isCloud = mdmProps.isCloud;
viewModal.contactUsURL = mdmProps.cloudConfig.contactUsURL;
viewModal.apiCloudDocURL = mdmProps.cloudConfig.apiCloudDocURL;
viewModal.appCloudDocURL = mdmProps.cloudConfig.appCloudDocURL;
viewModal.deviceCloudDocURL = mdmProps.cloudConfig.deviceCloudDocURL;
viewModal.apiCloudWalkthroughURL = mdmProps.cloudConfig.apiCloudWalkthroughURL;
viewModal.profileURL = mdmProps.cloudConfig.profileURL;
viewModal.changePasswordURL = mdmProps.cloudConfig.changePasswordURL;
viewModal.logoutURL = mdmProps.cloudConfig.logoutURL;
viewModal.apiCloudURL = mdmProps.cloudConfig.apiCloudURL;
viewModal.appCloudURL = mdmProps.cloudConfig.appCloudURL;
viewModal.deviceCloudURL = mdmProps.cloudConfig.deviceCloudURL;
viewModal.oraganizationURL = mdmProps.cloudConfig.oraganizationURL;
viewModal.membersURL = mdmProps.cloudConfig.membersURL;
return viewModal;
}

View File

@ -42,7 +42,7 @@
<div class="modal-header">
<h4 class="pull-left modal-title">
<span class="fw-stack">
<i class="fw fw-user fw-stack-2x"></i>
<i class="fw fw-user fw-stack-2x user-icon-black"></i>
<span class="fw-stack fw-move-right fw-move-bottom">
<i class="fw fw-circle-outline fw-stack-2x"></i>
<i class="fw fw-circle fw-stack-2x fw-stroke text-info"></i>

View File

@ -18,8 +18,8 @@
{{#if isCloud}}
{{#zone "productName"}}WSO2 Cloud{{/zone}}
{{#zone "productNameResponsive"}}WSO2 Cloud{{/zone}}
{{#zone "productNameResponsive"}} Cloud{{/zone}}
{{else}}
{{#zone "productName"}}WSO2 IoT Server{{/zone}}
{{#zone "productNameResponsive"}}WSO2 IoT Server{{/zone}}
{{#zone "productNameResponsive"}} IoT Server{{/zone}}
{{/if}}

View File

@ -30,6 +30,8 @@
</a>
</li>
{{/if}}
{{#unless isCloud}}
{{#if permissions.VIEW_DASHBOARD}}
<li>
<a href="javascript:statisticLoad('/portal/t/{{currentUser.domain}}/dashboards/device-statistics-dashboard/')">
@ -57,6 +59,9 @@
</div>
</li>
{{/if}}
{{/unless}}
{{#if permissions.LIST_GROUPS}}
<li>
<a href="{{@app.context}}/groups">
@ -81,6 +86,8 @@
{{#if permissions.LIST_POLICIES}}
<li><a href="{{@app.context}}/policies"><i class="fw fw-policy"></i>Policy Management</a></li>
{{/if}}
{{#unless isCloud}}
{{#if permissions.TENANT_CONFIGURATION}}
<li><a><i class="fw fw-settings"></i>Configuration Management</a>
<ul>
@ -92,6 +99,10 @@
</ul>
</li>
{{/if}}
{{/unless}}
{{/zone}}
{{#zone "navbarCollapsableRightItems"}}

View File

@ -52,6 +52,7 @@ function onRequest(context) {
context["isAuthorizedForNotifications"] = isAuthorizedForNotifications;
context["currentUser"] = currentUser;
context["appContext"] = mdmProps["appContext"];
context["isCloud"] = mdmProps["isCloud"];
return context;
}

View File

@ -16,12 +16,10 @@
* under the License.
*/
.wr-input-control .helper {
font-weight: 100;
}
.wr-input-control .cus-col-25 {
float: left;
width: 25%;
@ -53,6 +51,12 @@
/*padding-left:20px;*/
/*}*/
.user-icon-black {
color: black !important;
}
/**/
/* wizard */
.wr-wizard {
@ -99,6 +103,9 @@
}
@media only screen and (min-width: 768px) {
header .username {
max-width: calc(100% - 100px);
}
body > .page-content-wrapper > .container,
body > .page-content-wrapper > .container-fluid {
margin: 1% 1% 1%;
@ -110,6 +117,15 @@ header .brand h1 {
text-transform: none !important;
}
header .username {
display: inline-block;
max-width: 180px;
white-space: nowrap;
overflow: hidden !important;
text-overflow: ellipsis;
vertical-align: middle;
}
.visible-inline-block {
display: inline-block !important;
}
@ -121,18 +137,22 @@ header .brand h1 {
max-width: 32em;
background-color: #006690
}
.cloud-menu .popover-title,.navbar-header .popover-title {
.cloud-menu .popover-title, .navbar-header .popover-title {
background-color: #006690;
font-size: 16px;
border-bottom: none;
font-weight: 400;
}
.cloud-menu .popover.bottom>.arrow{
margin-left:-2px;
.cloud-menu .popover.bottom > .arrow {
margin-left: -2px;
}
.cloud-menu .popover.bottom>.arrow:after,.navbar-header .popover.bottom>.arrow:after{
.cloud-menu .popover.bottom > .arrow:after, .navbar-header .popover.bottom > .arrow:after {
border-bottom-color: #006690;
}
.cloud-block {
float: left;
width: 8.2em;
@ -142,11 +162,13 @@ header .brand h1 {
text-align: center;
vertical-align: middle;
}
.cloud-name {
font-size:14px;
font-size: 14px;
margin-top: .5em;
font-weight: 400;
}
.cloud-menu-popover {
position: relative;
float: right;
@ -158,42 +180,50 @@ header .brand h1 {
color: #fff;
cursor: pointer;
}
#cloud-menu-popover-xs {
color: #fff;
line-height:24px;
line-height: 24px;
border: none;
margin-right: 15px!important;
margin-right: 15px !important;
}
.navbar-toggle{
border:none;
.navbar-toggle {
border: none;
border-radius: 0px;
}
.navbar-header .popover {
border-radius: 0px;
width: 21em;
max-width:32em;
max-width: 32em;
background-color: #006690;
}
.navbar-header .popover .popover-content{
padding:0px;
.navbar-header .popover .popover-content {
padding: 0px;
}
.cloud-menu .popover-content {
padding: 0px;
}
.cloud-actions {
background-color: #005578;
float: left;
position: absolute;
width: 100%;
left: 0px;
overflow:hidden;
overflow: hidden;
}
.cloud-actions h3 {
font-size: 16px;
font-weight: 400;
padding-left: 14px;
margin-top: 10px;
}
.cloud-block-invert {
color: #fff;
float: left;
@ -210,21 +240,25 @@ header .brand h1 {
background-color: #fff;
cursor: pointer;
}
.cloud-actions a:hover {
color: #d7d5d5;
background-color: #3d3d3d;
text-decoration: none
}
.cloud-apps a {
text-decoration: none;
color: #006690 !important;
cursor: pointer
}
.cloud-apps a:hover {
text-decoration: none;
color: #006690;
background-color: #c5c5c5;
}
.cloud-apps .cloud-actions a {
color: #fff
}

View File

@ -2028,6 +2028,11 @@ input[type=number].form-control {
.thumbnail.icon img {
width: 100%;
padding: 10px;
}
.table .icon-only{
cursor: pointer;
}
/* ========================================================================
@ -6549,6 +6554,27 @@ select > option:hover {
color : #C7C7C7;
}
/**
*
* Temporary navigation color fix for IoT cloud release
*
*/
header.header-default {
background: #181e22 !important;
height: 50px;
}
.navbar-collapse {
background: #37474F;
}
.dropdown-menu > li {
width: 100%;
}
/** End **/
/**
*
* Temporary responsive fix for table listing action button width issue
@ -6580,3 +6606,7 @@ select > option:hover {
}
/** End **/
.tooltip-overflow-fix{
overflow: visible !important;
}

View File

@ -0,0 +1,30 @@
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<link rel="stylesheet" href="https://error.cloud.wso2.com/style/style.css">
<link rel="stylesheet" href="https://error.cloud.wso2.com/style/font-mf.css">
</head>
<body>
<div class="sky">
<section>
<div class="error-400">
<img src="https://error.cloud.wso2.com/images/400-error.svg">
</div>
<div class="text-label">
<h1>Oops something went wrong </h1>
<h2>400 - Bad request</h2>
<div style="clear: both"></div>
<div class="button-label">
<a href="https://cloudmgt.cloud.wso2.com/cloudmgt/site/pages/index.jag"><label class="label-back">Back to Cloud </label></a>
<a href="https://cloudmgt.cloud.wso2.com/cloudmgt/site/pages/contact-us.jag"><label class="label-report"> Report Issue </label></a>
</div>
</div>
</section>
<div class="clouds_one"></div>
<div class="clouds_two"></div>
<div class="clouds_three"></div>
</div>
</body>
</html>

View File

@ -0,0 +1,30 @@
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<link rel="stylesheet" href="https://error.cloud.wso2.com/style/style.css">
<link rel="stylesheet" href="https://error.cloud.wso2.com/style/font-mf.css">
</head>
<body>
<div class="sky">
<section>
<div class="error-400">
<img src="https://error.cloud.wso2.com/images/400-error.svg">
</div>
<div class="text-label">
<h1>Oops something went wrong </h1>
<h2>401 - Unauthorized</h2>
<div style="clear: both"></div>
<div class="button-label">
<a href="https://cloudmgt.cloud.wso2.com/cloudmgt/site/pages/index.jag"><label class="label-back">Back to Cloud </label></a>
<a href="https://cloudmgt.cloud.wso2.com/cloudmgt/site/pages/contact-us.jag"><label class="label-report"> Report Issue </label></a>
</div>
</div>
</section>
<div class="clouds_one"></div>
<div class="clouds_two"></div>
<div class="clouds_three"></div>
</div>
</body>
</html>

View File

@ -0,0 +1,30 @@
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<link rel="stylesheet" href="https://error.cloud.wso2.com/style/style.css">
<link rel="stylesheet" href="https://error.cloud.wso2.com/style/font-mf.css">
</head>
<body>
<div class="sky">
<section>
<div class="error-400">
<img src="https://error.cloud.wso2.com/images/400-error.svg">
</div>
<div class="text-label">
<h1>Oops something went wrong </h1>
<h2>403 - Forbidden</h2>
<div style="clear: both"></div>
<div class="button-label">
<a href="https://cloudmgt.cloud.wso2.com/cloudmgt/site/pages/index.jag"><label class="label-back">Back to Cloud </label></a>
<a href="https://cloudmgt.cloud.wso2.com/cloudmgt/site/pages/contact-us.jag"><label class="label-report"> Report Issue </label></a>
</div>
</div>
</section>
<div class="clouds_one"></div>
<div class="clouds_two"></div>
<div class="clouds_three"></div>
</div>
</body>
</html>

View File

@ -0,0 +1,30 @@
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<link rel="stylesheet" href="https://error.cloud.wso2.com/style/style.css">
<link rel="stylesheet" href="https://error.cloud.wso2.com/style/font-mf.css">
</head>
<body>
<div class="sky">
<section>
<div class="error-400">
<img src="https://error.cloud.wso2.com/images/400-error.svg">
</div>
<div class="text-label">
<h1>Oops something went wrong </h1>
<h2>404 - Page Not Found</h2>
<div style="clear: both"></div>
<div class="button-label">
<a href="https://cloudmgt.cloud.wso2.com/cloudmgt/site/pages/index.jag"><label class="label-back">Back to Cloud </label></a>
<a href="https://cloudmgt.cloud.wso2.com/cloudmgt/site/pages/contact-us.jag"><label class="label-report"> Report Issue </label></a>
</div>
</div>
</section>
<div class="clouds_one"></div>
<div class="clouds_two"></div>
<div class="clouds_three"></div>
</div>
</body>
</html>

View File

@ -0,0 +1,30 @@
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<link rel="stylesheet" href="https://error.cloud.wso2.com/style/style.css">
<link rel="stylesheet" href="https://error.cloud.wso2.com/style/font-mf.css">
</head>
<body>
<div class="sky">
<section>
<div class="error-400">
<img src="https://error.cloud.wso2.com/images/400-error.svg">
</div>
<div class="text-label">
<h1>Oops something went wrong </h1>
<h2>405 - Method Not Allowed</h2>
<div style="clear: both"></div>
<div class="button-label">
<a href="https://cloudmgt.cloud.wso2.com/cloudmgt/site/pages/index.jag"><label class="label-back">Back to Cloud </label></a>
<a href="https://cloudmgt.cloud.wso2.com/cloudmgt/site/pages/contact-us.jag"><label class="label-report"> Report Issue </label></a>
</div>
</div>
</section>
<div class="clouds_one"></div>
<div class="clouds_two"></div>
<div class="clouds_three"></div>
</div>
</body>
</html>

View File

@ -0,0 +1,30 @@
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<link rel="stylesheet" href="https://error.cloud.wso2.com/style/style.css">
<link rel="stylesheet" href="https://error.cloud.wso2.com/style/font-mf.css">
</head>
<body>
<div class="sky">
<section>
<div class="error-400">
<img src="https://error.cloud.wso2.com/images/400-error.svg">
</div>
<div class="text-label">
<h1>Oops something went wrong </h1>
<h2>500 - Internal Server Error</h2>
<div style="clear: both"></div>
<div class="button-label">
<a href="https://cloudmgt.cloud.wso2.com/cloudmgt/site/pages/index.jag"><label class="label-back">Back to Cloud </label></a>
<a href="https://cloudmgt.cloud.wso2.com/cloudmgt/site/pages/contact-us.jag"><label class="label-report"> Report Issue </label></a>
</div>
</div>
</section>
<div class="clouds_one"></div>
<div class="clouds_two"></div>
<div class="clouds_three"></div>
</div>
</body>
</html>

View File

@ -17,7 +17,7 @@
}}
{{#zone "navbars"}}
<nav id="_uuf-navbar" class="navbar navbar-default affix" data-spy="affix" data-offset-top="50"
<nav id="_uuf-navbar" class="navbar navbar-default" data-spy="affix" data-offset-top="50"
data-offset-bottom="40">
<div class="container-fluid">
<div class="navbar-header">

View File

@ -23,17 +23,16 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.context.PrivilegedCarbonContext;
import org.wso2.carbon.device.mgt.common.Device;
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
import org.wso2.carbon.device.mgt.common.EnrolmentInfo;
import org.wso2.carbon.device.mgt.common.policy.mgt.PolicyMonitoringManager;
import org.wso2.carbon.device.mgt.common.policy.mgt.monitor.PolicyComplianceException;
import org.wso2.carbon.device.mgt.core.internal.DeviceManagementDataHolder;
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderServiceImpl;
import org.wso2.carbon.ntask.core.Task;
import org.wso2.carbon.device.mgt.common.policy.mgt.monitor.PolicyComplianceException;
import org.wso2.carbon.policy.mgt.core.internal.PolicyManagementDataHolder;
import org.wso2.carbon.policy.mgt.core.mgt.MonitoringManager;
import org.wso2.carbon.user.api.UserStoreException;
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderServiceImpl;
import java.util.ArrayList;
import java.util.List;
@ -63,14 +62,14 @@ public class MonitoringTask implements Task {
}
try {
// Tenant tenants[] = PolicyManagementDataHolder.getInstance().
// getRealmService().getTenantManager().getAllTenants();
PolicyManagementDataHolder.getInstance().
getRealmService().getTenantManager().getAllTenants();
DeviceManagementProviderService deviceManagementService = new DeviceManagementProviderServiceImpl();
List<Integer> tenants = deviceManagementService.getDeviceEnrolledTenants();
for (Integer tenant : tenants) {
String tenantDomain = DeviceManagementDataHolder.getInstance().
String tenantDomain = PolicyManagementDataHolder.getInstance().
getRealmService().getTenantManager().getDomain(tenant);
try {
PrivilegedCarbonContext.startTenantFlow();