mirror of
https://repository.entgra.net/community/device-mgt-core.git
synced 2025-10-06 02:01:45 +00:00
Merge branch 'master' of https://github.com/wso2/carbon-device-mgt
This commit is contained in:
commit
df49788219
@ -36,11 +36,14 @@ import org.wso2.carbon.apimgt.webapp.publisher.config.PermissionManagementExcept
|
|||||||
|
|
||||||
import javax.servlet.ServletContext;
|
import javax.servlet.ServletContext;
|
||||||
import javax.ws.rs.*;
|
import javax.ws.rs.*;
|
||||||
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.lang.annotation.Annotation;
|
import java.lang.annotation.Annotation;
|
||||||
import java.lang.reflect.InvocationHandler;
|
import java.lang.reflect.InvocationHandler;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.lang.reflect.Proxy;
|
import java.lang.reflect.Proxy;
|
||||||
|
import java.net.MalformedURLException;
|
||||||
|
import java.net.URI;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.security.AccessController;
|
import java.security.AccessController;
|
||||||
import java.security.PrivilegedAction;
|
import java.security.PrivilegedAction;
|
||||||
@ -85,16 +88,13 @@ public class AnnotationProcessor {
|
|||||||
* @throws IOException
|
* @throws IOException
|
||||||
*/
|
*/
|
||||||
public Set<String> scanStandardContext(String className) throws IOException {
|
public Set<String> scanStandardContext(String className) throws IOException {
|
||||||
AnnotationDB db = new AnnotationDB();
|
ExtendedAnnotationDB db = new ExtendedAnnotationDB();
|
||||||
db.addIgnoredPackages(PACKAGE_ORG_APACHE);
|
db.addIgnoredPackages(PACKAGE_ORG_APACHE);
|
||||||
db.addIgnoredPackages(PACKAGE_ORG_CODEHAUS);
|
db.addIgnoredPackages(PACKAGE_ORG_CODEHAUS);
|
||||||
db.addIgnoredPackages(PACKAGE_ORG_SPRINGFRAMEWORK);
|
db.addIgnoredPackages(PACKAGE_ORG_SPRINGFRAMEWORK);
|
||||||
|
|
||||||
URL[] libPath = WarUrlFinder.findWebInfLibClasspaths(servletContext);
|
URL classPath = findWebInfClassesPath(servletContext);
|
||||||
URL classPath = WarUrlFinder.findWebInfClassesPath(servletContext);
|
db.scanArchives(classPath);
|
||||||
URL[] urls = (URL[]) ArrayUtils.add(libPath, libPath.length, classPath);
|
|
||||||
|
|
||||||
db.scanArchives(urls);
|
|
||||||
|
|
||||||
//Returns a list of classes with given Annotation
|
//Returns a list of classes with given Annotation
|
||||||
return db.getAnnotationIndex().get(className);
|
return db.getAnnotationIndex().get(className);
|
||||||
@ -387,4 +387,28 @@ public class AnnotationProcessor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find the URL pointing to "/WEB-INF/classes" This method may not work in conjunction with IteratorFactory
|
||||||
|
* if your servlet container does not extract the /WEB-INF/classes into a real file-based directory
|
||||||
|
*
|
||||||
|
* @param servletContext
|
||||||
|
* @return null if cannot determin /WEB-INF/classes
|
||||||
|
*/
|
||||||
|
public static URL findWebInfClassesPath(ServletContext servletContext)
|
||||||
|
{
|
||||||
|
String path = servletContext.getRealPath("/WEB-INF/classes");
|
||||||
|
if (path == null) return null;
|
||||||
|
File fp = new File(path);
|
||||||
|
if (fp.exists() == false) return null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
URI uri = fp.toURI();
|
||||||
|
return uri.toURL();
|
||||||
|
}
|
||||||
|
catch (MalformedURLException e)
|
||||||
|
{
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,92 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed 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.
|
||||||
|
*/
|
||||||
|
package org.wso2.carbon.apimgt.webapp.publisher.lifecycle.util;
|
||||||
|
|
||||||
|
import org.scannotation.AnnotationDB;
|
||||||
|
import org.scannotation.archiveiterator.Filter;
|
||||||
|
import org.scannotation.archiveiterator.StreamIterator;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.net.URL;
|
||||||
|
|
||||||
|
public class ExtendedAnnotationDB extends AnnotationDB {
|
||||||
|
|
||||||
|
public ExtendedAnnotationDB() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void scanArchives(URL... urls) throws IOException {
|
||||||
|
URL[] arr$ = urls;
|
||||||
|
int len$ = urls.length;
|
||||||
|
|
||||||
|
for(int i$ = 0; i$ < len$; ++i$) {
|
||||||
|
URL url = arr$[i$];
|
||||||
|
Filter filter = new Filter() {
|
||||||
|
public boolean accepts(String filename) {
|
||||||
|
if(filename.endsWith(".class")) {
|
||||||
|
if(filename.startsWith("/") || filename.startsWith("\\")) {
|
||||||
|
filename = filename.substring(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!ExtendedAnnotationDB.this.ignoreScan(filename.replace('/', '.'))) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
StreamIterator it = ExtendedIteratorFactory.create(url, filter);
|
||||||
|
|
||||||
|
InputStream stream;
|
||||||
|
while((stream = it.next()) != null) {
|
||||||
|
this.scanClass(stream);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean ignoreScan(String intf) {
|
||||||
|
String[] arr$;
|
||||||
|
int len$;
|
||||||
|
int i$;
|
||||||
|
String ignored;
|
||||||
|
if(this.scanPackages != null) {
|
||||||
|
arr$ = this.scanPackages;
|
||||||
|
len$ = arr$.length;
|
||||||
|
|
||||||
|
for(i$ = 0; i$ < len$; ++i$) {
|
||||||
|
ignored = arr$[i$];
|
||||||
|
if(intf.startsWith(ignored + ".")) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
arr$ = this.ignoredPackages;
|
||||||
|
len$ = arr$.length;
|
||||||
|
|
||||||
|
for(i$ = 0; i$ < len$; ++i$) {
|
||||||
|
ignored = arr$[i$];
|
||||||
|
if(intf.startsWith(ignored + ".")) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed 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.
|
||||||
|
*/
|
||||||
|
package org.wso2.carbon.apimgt.webapp.publisher.lifecycle.util;
|
||||||
|
|
||||||
|
import org.scannotation.archiveiterator.*;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.URL;
|
||||||
|
|
||||||
|
public class ExtendedFileProtocolIteratorFactory implements DirectoryIteratorFactory {
|
||||||
|
|
||||||
|
private static final String ENCODING_SCHEME = "UTF-8";
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public StreamIterator create(URL url, Filter filter) throws IOException {
|
||||||
|
File f = new File(java.net.URLDecoder.decode(url.getPath(), ENCODING_SCHEME));
|
||||||
|
return f.isDirectory()?new FileIterator(f, filter):new JarIterator(url.openStream(), filter);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,54 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed 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.
|
||||||
|
*/
|
||||||
|
package org.wso2.carbon.apimgt.webapp.publisher.lifecycle.util;
|
||||||
|
|
||||||
|
import org.scannotation.archiveiterator.DirectoryIteratorFactory;
|
||||||
|
import org.scannotation.archiveiterator.Filter;
|
||||||
|
import org.scannotation.archiveiterator.JarIterator;
|
||||||
|
import org.scannotation.archiveiterator.StreamIterator;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
|
public class ExtendedIteratorFactory {
|
||||||
|
|
||||||
|
private static final ConcurrentHashMap<String, DirectoryIteratorFactory> registry = new ConcurrentHashMap();
|
||||||
|
|
||||||
|
public static StreamIterator create(URL url, Filter filter) throws IOException {
|
||||||
|
String urlString = url.toString();
|
||||||
|
if(urlString.endsWith("!/")) {
|
||||||
|
urlString = urlString.substring(4);
|
||||||
|
urlString = urlString.substring(0, urlString.length() - 2);
|
||||||
|
url = new URL(urlString);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!urlString.endsWith("/")) {
|
||||||
|
return new JarIterator(url.openStream(), filter);
|
||||||
|
} else {
|
||||||
|
DirectoryIteratorFactory factory = registry.get(url.getProtocol());
|
||||||
|
if(factory == null) {
|
||||||
|
throw new IOException("Unable to scan directory of protocol: " + url.getProtocol());
|
||||||
|
} else {
|
||||||
|
return factory.create(url, filter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static {
|
||||||
|
registry.put("file", new ExtendedFileProtocolIteratorFactory());
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -99,7 +99,7 @@ public class CommandOperationDAOImpl extends GenericOperationDAOImpl {
|
|||||||
|
|
||||||
if (rs.next()) {
|
if (rs.next()) {
|
||||||
commandOperation = new CommandOperation();
|
commandOperation = new CommandOperation();
|
||||||
commandOperation.setEnabled(rs.getInt("ENABLED") != 0);
|
commandOperation.setEnabled(rs.getBoolean("ENABLED"));
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
throw new OperationManagementDAOException("SQL Error occurred while retrieving the command operation " +
|
throw new OperationManagementDAOException("SQL Error occurred while retrieving the command operation " +
|
||||||
|
|||||||
@ -22,22 +22,19 @@ var log = new Log("api/data-tables-invoker-api.jag");
|
|||||||
var uri = request.getRequestURI();
|
var uri = request.getRequestURI();
|
||||||
var uriMatcher = new URIMatcher(String(uri));
|
var uriMatcher = new URIMatcher(String(uri));
|
||||||
|
|
||||||
var devicemgtProps = require('/app/conf/devicemgt-props.js').config();
|
var devicemgtProps = require("/app/conf/reader/main.js")["conf"];
|
||||||
var serviceInvokers = require("/app/modules/backend-service-invoker.js")["backendServiceInvoker"];
|
var serviceInvokers = require("/app/modules/backend-service-invoker.js")["backendServiceInvoker"];
|
||||||
|
|
||||||
if (uriMatcher.match("/{context}/api/data-tables/invoker")) {
|
|
||||||
var url = request.getParameter("url");
|
|
||||||
var targetURL;
|
|
||||||
var payload = request.getContent();
|
|
||||||
|
|
||||||
function appendQueryParam (url, queryParam , value) {
|
function appendQueryParam (url, queryParam , value) {
|
||||||
if (url.indexOf("?") > 0) {
|
if (url.indexOf("?") > 0) {
|
||||||
return url + "&" + queryParam + "=" + value;
|
return url + "&" + queryParam + "=" + value;
|
||||||
}
|
}
|
||||||
return url + "?" + queryParam + "=" + value;
|
return url + "?" + queryParam + "=" + value;
|
||||||
}
|
}
|
||||||
targetURL = devicemgtProps["httpsURL"] + request.getParameter("url");
|
|
||||||
|
|
||||||
|
if (uriMatcher.match("/{context}/api/data-tables/invoker")) {
|
||||||
|
var url = request.getParameter("url");
|
||||||
|
var targetURL = devicemgtProps["httpsURL"] + request.getParameter("url");
|
||||||
var allParams = request.getAllParameters();
|
var allParams = request.getAllParameters();
|
||||||
|
|
||||||
for (var key in allParams) {
|
for (var key in allParams) {
|
||||||
|
|||||||
@ -24,7 +24,7 @@ var log = new Log("api/device-api.jag");
|
|||||||
var constants = require("/app/modules/constants.js");
|
var constants = require("/app/modules/constants.js");
|
||||||
var deviceModule = require("/app/modules/device.js").deviceModule;
|
var deviceModule = require("/app/modules/device.js").deviceModule;
|
||||||
var utility = require("/app/modules/utility.js").utility;
|
var utility = require("/app/modules/utility.js").utility;
|
||||||
var devicemgtProps = require('/app/conf/devicemgt-props.js').config();
|
var devicemgtProps = require("/app/conf/reader/main.js")["conf"];
|
||||||
var userModule = require("/app/modules/user.js").userModule;
|
var userModule = require("/app/modules/user.js").userModule;
|
||||||
var serviceInvokers = require("/app/modules/backend-service-invoker.js").backendServiceInvoker;
|
var serviceInvokers = require("/app/modules/backend-service-invoker.js").backendServiceInvoker;
|
||||||
|
|
||||||
|
|||||||
@ -23,7 +23,7 @@ var uriMatcher = new URIMatcher(String(uri));
|
|||||||
var log = new Log("api/device-api.jag");
|
var log = new Log("api/device-api.jag");
|
||||||
var constants = require("/app/modules/constants.js");
|
var constants = require("/app/modules/constants.js");
|
||||||
var utility = require("/app/modules/utility.js").utility;
|
var utility = require("/app/modules/utility.js").utility;
|
||||||
var devicemgtProps = require('/app/conf/devicemgt-props.js').config();
|
var devicemgtProps = require("/app/conf/reader/main.js")["conf"];
|
||||||
var serviceInvokers = require("/app/modules/backend-service-invoker.js").backendServiceInvoker;
|
var serviceInvokers = require("/app/modules/backend-service-invoker.js").backendServiceInvoker;
|
||||||
|
|
||||||
var user = session.get(constants.USER_SESSION_KEY);
|
var user = session.get(constants.USER_SESSION_KEY);
|
||||||
|
|||||||
@ -23,7 +23,7 @@ var uri = request.getRequestURI();
|
|||||||
var uriMatcher = new URIMatcher(String(uri));
|
var uriMatcher = new URIMatcher(String(uri));
|
||||||
|
|
||||||
var constants = require("/app/modules/constants.js");
|
var constants = require("/app/modules/constants.js");
|
||||||
var devicemgtProps = require('/app/conf/devicemgt-props.js').config();
|
var devicemgtProps = require("/app/conf/reader/main.js")["conf"];
|
||||||
var serviceInvokers = require("/app/modules/backend-service-invoker.js")["backendServiceInvoker"];
|
var serviceInvokers = require("/app/modules/backend-service-invoker.js")["backendServiceInvoker"];
|
||||||
|
|
||||||
if (uriMatcher.match("/{context}/api/invoker/execute/")) {
|
if (uriMatcher.match("/{context}/api/invoker/execute/")) {
|
||||||
|
|||||||
@ -23,7 +23,7 @@ var uriMatcher = new URIMatcher(String(uri));
|
|||||||
var log = new Log("api/operation-api.jag");
|
var log = new Log("api/operation-api.jag");
|
||||||
|
|
||||||
var serviceInvokers = require("/app/modules/backend-service-invoker.js")["backendServiceInvoker"];
|
var serviceInvokers = require("/app/modules/backend-service-invoker.js")["backendServiceInvoker"];
|
||||||
var devicemgtProps = require('/app/conf/devicemgt-props.js').config();
|
var devicemgtProps = require("/app/conf/reader/main.js")["conf"];
|
||||||
|
|
||||||
if (uriMatcher.match("/{context}/api/operation/paginate")) {
|
if (uriMatcher.match("/{context}/api/operation/paginate")) {
|
||||||
var deviceType = request.getParameter("deviceType");
|
var deviceType = request.getParameter("deviceType");
|
||||||
|
|||||||
@ -23,7 +23,7 @@ var uriMatcher = new URIMatcher(String(uri));
|
|||||||
var log = new Log("api/user-api.jag");
|
var log = new Log("api/user-api.jag");
|
||||||
|
|
||||||
var constants = require("/app/modules/constants.js");
|
var constants = require("/app/modules/constants.js");
|
||||||
var devicemgtProps = require('/app/conf/devicemgt-props.js').config();
|
var devicemgtProps = require("/app/conf/reader/main.js")["conf"];
|
||||||
var userModule = require("/app/modules/user.js").userModule;
|
var userModule = require("/app/modules/user.js").userModule;
|
||||||
var deviceModule = require("/app/modules/device.js").deviceModule;
|
var deviceModule = require("/app/modules/device.js").deviceModule;
|
||||||
var utility = require("/app/modules/utility.js").utility;
|
var utility = require("/app/modules/utility.js").utility;
|
||||||
|
|||||||
@ -1,40 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2016, 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
var config = function () {
|
|
||||||
var conf = application.get("PINCH_CONFIG");
|
|
||||||
if (!conf) {
|
|
||||||
var pinch = require('/app/modules/pinch.min.js').pinch;
|
|
||||||
var server = require('carbon').server;
|
|
||||||
var config = require('/app/conf/config.json');
|
|
||||||
pinch(config, /^/, function (path, key, value) {
|
|
||||||
if ((typeof value === 'string') && value.indexOf('%https.ip%') > -1) {
|
|
||||||
return value.replace('%https.ip%', server.address("https"));
|
|
||||||
} else if ((typeof value === 'string') && value.indexOf('%http.ip%') > -1) {
|
|
||||||
return value.replace('%http.ip%', server.address("http"));
|
|
||||||
} else if ((typeof value === 'string') && value.indexOf('%date-year%') > -1) {
|
|
||||||
var year = new Date().getFullYear();
|
|
||||||
return value.replace("%date-year%", year);
|
|
||||||
}
|
|
||||||
return value;
|
|
||||||
});
|
|
||||||
application.put("PINCH_CONFIG", config);
|
|
||||||
conf = config;
|
|
||||||
}
|
|
||||||
return conf;
|
|
||||||
};
|
|
||||||
@ -0,0 +1,41 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016, 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var conf = function () {
|
||||||
|
var conf = application.get("UI_CONF");
|
||||||
|
if (!conf) {
|
||||||
|
conf = require("/app/conf/config.json");
|
||||||
|
var pinch = require("/app/conf/reader/pinch.min.js")["pinch"];
|
||||||
|
var server = require("carbon")["server"];
|
||||||
|
pinch(conf, /^/,
|
||||||
|
function (path, key, value) {
|
||||||
|
if ((typeof value === "string") && value.indexOf("%https.ip%") > -1) {
|
||||||
|
return value.replace("%https.ip%", server.address("https"));
|
||||||
|
} else if ((typeof value === "string") && value.indexOf("%http.ip%") > -1) {
|
||||||
|
return value.replace("%http.ip%", server.address("http"));
|
||||||
|
} else if ((typeof value === "string") && value.indexOf("%date-year%") > -1) {
|
||||||
|
var year = new Date().getFullYear();
|
||||||
|
return value.replace("%date-year%", year);
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
application.put("UI_CONF", conf);
|
||||||
|
}
|
||||||
|
return conf;
|
||||||
|
}();
|
||||||
@ -1,17 +1,34 @@
|
|||||||
|
{{!-- 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>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
<title>{{#defineZone "title"}}WSO2 Template{{/defineZone}}</title>
|
|
||||||
{{defineZone "favicon"}}
|
{{defineZone "favicon"}}
|
||||||
|
<title>
|
||||||
|
{{defineZone "title"}}
|
||||||
|
</title>
|
||||||
|
{{defineZone "topLibCss"}}
|
||||||
{{defineZone "topCss"}}
|
{{defineZone "topCss"}}
|
||||||
{{defineZone "topJs"}}
|
{{defineZone "topJs"}}
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<!--modal-->
|
<!--modal-->
|
||||||
<div class="wr-modalpopup">
|
<div class="wr-modalpopup">
|
||||||
<div class="modalpopup-container">
|
<div class="modalpopup-container">
|
||||||
@ -22,25 +39,21 @@
|
|||||||
</span>
|
</span>
|
||||||
GO BACK
|
GO BACK
|
||||||
</div>
|
</div>
|
||||||
<div class="modalpopup-content"><!-- dynamic content --></div>
|
<div class="modalpopup-content">
|
||||||
|
<!-- dynamic content -->
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="modalpopup-bg"></div>
|
<div class="modalpopup-bg"></div>
|
||||||
</div>
|
</div>
|
||||||
<!--modal-->
|
<!--modal-->
|
||||||
|
|
||||||
<!-- header -->
|
|
||||||
{{defineZone "header"}}
|
{{defineZone "header"}}
|
||||||
<!-- /header -->
|
|
||||||
|
|
||||||
<!-- navbars -->
|
|
||||||
<div class="navbar-wrapper">
|
<div class="navbar-wrapper">
|
||||||
{{defineZone "navbars"}}
|
{{defineZone "navbars"}}
|
||||||
</div>
|
</div>
|
||||||
<!-- /navbars -->
|
|
||||||
|
|
||||||
<!-- sidepanes -->
|
|
||||||
{{defineZone "sidePanes"}}
|
{{defineZone "sidePanes"}}
|
||||||
<!-- /sidepanes -->
|
|
||||||
|
|
||||||
<!-- page-content-wrapper -->
|
<!-- page-content-wrapper -->
|
||||||
<div class="page-content-wrapper">
|
<div class="page-content-wrapper">
|
||||||
@ -51,14 +64,13 @@
|
|||||||
</div>
|
</div>
|
||||||
<!-- /page-content-wrapper -->
|
<!-- /page-content-wrapper -->
|
||||||
|
|
||||||
<!-- footer -->
|
|
||||||
<footer class="footer">
|
<footer class="footer">
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
{{defineZone "footer"}}
|
{{defineZone "footer"}}
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
<!-- /footer -->
|
|
||||||
|
|
||||||
|
{{defineZone "bottomLibJs"}}
|
||||||
{{defineZone "bottomJs"}}
|
{{defineZone "bottomJs"}}
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
*
|
*
|
||||||
* WSO2 Inc. licenses this file to you under the Apache License,
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
@ -10,46 +10,53 @@
|
|||||||
*
|
*
|
||||||
* Unless required by applicable law or agreed to in writing,
|
* Unless required by applicable law or agreed to in writing,
|
||||||
* software distributed under the License is distributed on an
|
* software distributed under the License is distributed on an
|
||||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
|
||||||
* KIND, either express or implied. See the License for the
|
* either express or implied. See the License for the
|
||||||
* specific language governing permissions and limitations
|
* specific language governing permissions and limitations
|
||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var apiWrapperUtil = function () {
|
var apiWrapperUtil = function () {
|
||||||
var module = {};
|
// var log = new Log("/app/modules/api-wrapper-util.js");
|
||||||
var tokenUtil = require("/app/modules/util.js").util;
|
|
||||||
var constants = require("/app/modules/constants.js");
|
|
||||||
var devicemgtProps = require('/app/conf/devicemgt-props.js').config();
|
|
||||||
var log = new Log("/app/modules/api-wrapper-util.js");
|
|
||||||
|
|
||||||
module.refreshToken = function () {
|
var tokenUtil = require("/app/modules/util.js")["util"];
|
||||||
var tokenPair = session.get(constants.ACCESS_TOKEN_PAIR_IDENTIFIER);
|
var constants = require("/app/modules/constants.js");
|
||||||
var clientData = session.get(constants.ENCODED_CLIENT_KEYS_IDENTIFIER);
|
var devicemgtProps = require("/app/conf/reader/main.js")["conf"];
|
||||||
tokenPair = tokenUtil.refreshToken(tokenPair, clientData);
|
|
||||||
session.put(constants.ACCESS_TOKEN_PAIR_IDENTIFIER, tokenPair);
|
var publicMethods = {};
|
||||||
|
|
||||||
|
publicMethods.refreshToken = function () {
|
||||||
|
var accessTokenPair = session.get(constants["ACCESS_TOKEN_PAIR_IDENTIFIER"]);
|
||||||
|
// accessTokenPair includes current access token as well as current refresh token
|
||||||
|
var encodedClientCredentials = session.get(constants["ENCODED_CLIENT_KEYS_IDENTIFIER"]);
|
||||||
|
accessTokenPair = tokenUtil.refreshToken(accessTokenPair, encodedClientCredentials);
|
||||||
|
session.put(constants["ACCESS_TOKEN_PAIR_IDENTIFIER"], accessTokenPair);
|
||||||
};
|
};
|
||||||
module.setupAccessTokenPair = function (type, properties) {
|
|
||||||
var tokenPair;
|
publicMethods.setupAccessTokenPair = function (type, properties) {
|
||||||
var clientData = tokenUtil.getDyanmicCredentials(properties);
|
var dynamicClientCredentials = tokenUtil.getDyanmicCredentials(properties);
|
||||||
var jwtToken = tokenUtil.getTokenWithJWTGrantType(clientData);
|
var jwtToken = tokenUtil.getTokenWithJWTGrantType(dynamicClientCredentials);
|
||||||
clientData = tokenUtil.getTenantBasedAppCredentials(properties.username, jwtToken);
|
var tenantBasedClientCredentials = tokenUtil.getTenantBasedAppCredentials(properties["username"], jwtToken);
|
||||||
var encodedClientKeys = tokenUtil.encode(clientData.clientId + ":" + clientData.clientSecret);
|
var encodedTenantBasedClientCredentials = tokenUtil.
|
||||||
session.put(constants.ENCODED_CLIENT_KEYS_IDENTIFIER, encodedClientKeys);
|
encode(tenantBasedClientCredentials["clientId"] + ":" + tenantBasedClientCredentials["clientSecret"]);
|
||||||
if (type == constants.GRANT_TYPE_PASSWORD) {
|
|
||||||
var scopes = devicemgtProps.scopes;
|
session.put(constants["ENCODED_CLIENT_KEYS_IDENTIFIER"], encodedTenantBasedClientCredentials);
|
||||||
var scope = "";
|
|
||||||
scopes.forEach(function(entry) {
|
var accessTokenPair;
|
||||||
scope += entry + " ";
|
// accessTokenPair will include current access token as well as current refresh token
|
||||||
});
|
if (type == constants["GRANT_TYPE_PASSWORD"]) {
|
||||||
tokenPair =
|
var arrayOfScopes = devicemgtProps["scopes"];
|
||||||
tokenUtil.getTokenWithPasswordGrantType(properties.username, encodeURIComponent(properties.password),
|
var stringOfScopes = "";
|
||||||
encodedClientKeys, scope);
|
arrayOfScopes.forEach(function (entry) { stringOfScopes += entry + " "; });
|
||||||
} else if (type == constants.GRANT_TYPE_SAML) {
|
accessTokenPair = tokenUtil.getTokenWithPasswordGrantType(properties["username"],
|
||||||
tokenPair = tokenUtil.
|
encodeURIComponent(properties["password"]), encodedTenantBasedClientCredentials, stringOfScopes);
|
||||||
getTokenWithSAMLGrantType(properties.samlToken, encodedClientKeys, "PRODUCTION");
|
} else if (type == constants["GRANT_TYPE_SAML"]) {
|
||||||
|
accessTokenPair = tokenUtil.getTokenWithSAMLGrantType(properties["samlToken"],
|
||||||
|
encodedTenantBasedClientCredentials, "PRODUCTION");
|
||||||
}
|
}
|
||||||
session.put(constants.ACCESS_TOKEN_PAIR_IDENTIFIER, tokenPair);
|
|
||||||
|
session.put(constants["ACCESS_TOKEN_PAIR_IDENTIFIER"], accessTokenPair);
|
||||||
};
|
};
|
||||||
return module;
|
|
||||||
|
return publicMethods;
|
||||||
}();
|
}();
|
||||||
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
*
|
*
|
||||||
* WSO2 Inc. licenses this file to you under the Apache License,
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
@ -10,34 +10,38 @@
|
|||||||
*
|
*
|
||||||
* Unless required by applicable law or agreed to in writing,
|
* Unless required by applicable law or agreed to in writing,
|
||||||
* software distributed under the License is distributed on an
|
* software distributed under the License is distributed on an
|
||||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
|
||||||
* KIND, either express or implied. See the License for the
|
* either express or implied. See the License for the
|
||||||
* specific language governing permissions and limitations
|
* specific language governing permissions and limitations
|
||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This backendServiceInvoker contains the wrappers for back end jaggary calls.
|
* This backendServiceInvoker contains the wrappers for back end jaggery calls.
|
||||||
*/
|
*/
|
||||||
var backendServiceInvoker = function () {
|
var backendServiceInvoker = function () {
|
||||||
var log = new Log("/app/modules/backend-service-invoker.js");
|
var log = new Log("/app/modules/backend-service-invoker.js");
|
||||||
|
|
||||||
var publicXMLHTTPInvokers = {};
|
var publicXMLHTTPInvokers = {};
|
||||||
|
var publicHTTPClientInvokers = {};
|
||||||
|
|
||||||
var privateMethods = {};
|
var privateMethods = {};
|
||||||
var publicWSInvokers = {};
|
var publicWSInvokers = {};
|
||||||
var publicHTTPClientInvokers = {};
|
|
||||||
var IS_OAUTH_ENABLED = true;
|
|
||||||
var TOKEN_EXPIRED = "Access token expired";
|
var TOKEN_EXPIRED = "Access token expired";
|
||||||
var TOKEN_INVALID = "Invalid input. Access token validation failed";
|
var TOKEN_INVALID = "Invalid input. Access token validation failed";
|
||||||
|
|
||||||
|
var devicemgtProps = require("/app/conf/reader/main.js")["conf"];
|
||||||
var constants = require("/app/modules/constants.js");
|
var constants = require("/app/modules/constants.js");
|
||||||
var tokenUtil = require("/app/modules/api-wrapper-util.js").apiWrapperUtil;
|
var userModule = require("/app/modules/user.js")["userModule"];
|
||||||
var devicemgtProps = require('/app/conf/devicemgt-props.js').config();
|
var tokenUtil = require("/app/modules/api-wrapper-util.js")["apiWrapperUtil"];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This methoad reads the token pair from the session and return the access token.
|
* This method reads the token pair from the session and return the access token.
|
||||||
* If the token pair s not set in the session this will send a redirect to the login page.
|
* If the token pair s not set in the session this will send a redirect to the login page.
|
||||||
*/
|
*/
|
||||||
privateMethods.getAccessToken = function () {
|
privateMethods.getAccessToken = function () {
|
||||||
var tokenPair = session.get(constants.ACCESS_TOKEN_PAIR_IDENTIFIER);
|
var tokenPair = session.get(constants["ACCESS_TOKEN_PAIR_IDENTIFIER"]);
|
||||||
if (tokenPair) {
|
if (tokenPair) {
|
||||||
return tokenPair.accessToken;
|
return tokenPair.accessToken;
|
||||||
} else {
|
} else {
|
||||||
@ -46,152 +50,119 @@ var backendServiceInvoker = function () {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method add Oauth authentication header to outgoing XMLHTTP Requests if Oauth authentication is enabled.
|
* ---------------------------------------------------------------------------
|
||||||
* @param method HTTP request type.
|
* Start of XML-HTTP-REQUEST based Interceptor implementations
|
||||||
* @param url target url.
|
* ---------------------------------------------------------------------------
|
||||||
* @param payload payload/data which need to be send.
|
*/
|
||||||
* @param successCallback a function to be called if the respond if successful.
|
|
||||||
* @param errorCallback a function to be called if en error is reserved.
|
/**
|
||||||
|
* This method add Oauth authentication header to outgoing XML-HTTP Requests if Oauth authentication is enabled.
|
||||||
|
* @param httpMethod HTTP request type.
|
||||||
|
* @param requestPayload payload/data if exists which is needed to be send.
|
||||||
|
* @param endpoint Backend REST API url.
|
||||||
|
* @param responseCallback a function to be called with response retrieved.
|
||||||
* @param count a counter which hold the number of recursive execution
|
* @param count a counter which hold the number of recursive execution
|
||||||
*/
|
*/
|
||||||
privateMethods.execute = function (method, url, successCallback, errorCallback, payload, count, contentType, acceptType) {
|
privateMethods.execute = function (httpMethod, requestPayload, endpoint, responseCallback, count) {
|
||||||
var xmlHttpRequest = new XMLHttpRequest();
|
var xmlHttpRequest = new XMLHttpRequest();
|
||||||
xmlHttpRequest.open(method, url);
|
|
||||||
if(!contentType){
|
xmlHttpRequest.open(httpMethod, endpoint);
|
||||||
contentType = constants.APPLICATION_JSON;
|
xmlHttpRequest.setRequestHeader(constants["CONTENT_TYPE_IDENTIFIER"], constants["APPLICATION_JSON"]);
|
||||||
}
|
xmlHttpRequest.setRequestHeader(constants["ACCEPT_IDENTIFIER"], constants["APPLICATION_JSON"]);
|
||||||
if(!acceptType){
|
|
||||||
acceptType = constants.APPLICATION_JSON;
|
if (devicemgtProps["isOAuthEnabled"]) {
|
||||||
}
|
|
||||||
xmlHttpRequest.setRequestHeader(constants.CONTENT_TYPE_IDENTIFIER, contentType);
|
|
||||||
xmlHttpRequest.setRequestHeader(constants.ACCEPT_IDENTIFIER, acceptType);
|
|
||||||
xmlHttpRequest.setRequestHeader(constants.REFERER, String(privateMethods.getClientDomain()));
|
|
||||||
if (IS_OAUTH_ENABLED) {
|
|
||||||
var accessToken = privateMethods.getAccessToken();
|
var accessToken = privateMethods.getAccessToken();
|
||||||
if (!accessToken) {
|
if (!accessToken) {
|
||||||
response.sendRedirect(devicemgtProps["httpsURL"] + "/devicemgt/login");
|
userModule.logout(function () {
|
||||||
|
response.sendRedirect(devicemgtProps["appContext"] + "login");
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
xmlHttpRequest.setRequestHeader(constants.AUTHORIZATION_HEADER, constants.BEARER_PREFIX + accessToken);
|
xmlHttpRequest.
|
||||||
|
setRequestHeader(constants["AUTHORIZATION_HEADER"], constants["BEARER_PREFIX"] + accessToken);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (payload) {
|
|
||||||
xmlHttpRequest.send(payload);
|
if (requestPayload) {
|
||||||
|
xmlHttpRequest.send(requestPayload);
|
||||||
} else {
|
} else {
|
||||||
xmlHttpRequest.send();
|
xmlHttpRequest.send();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((xmlHttpRequest.status >= 200 && xmlHttpRequest.status < 300) || xmlHttpRequest.status == 302) {
|
log.debug("Service Invoker-URL: " + endpoint);
|
||||||
if (xmlHttpRequest.responseText != null) {
|
log.debug("Service Invoker-Method: " + httpMethod);
|
||||||
return successCallback(parse(xmlHttpRequest.responseText));
|
|
||||||
} else {
|
log.info("Request : " + httpMethod + " " + endpoint);
|
||||||
return successCallback({"status": xmlHttpRequest.status, "messageFromServer": "Operation Completed"});
|
log.info("Request payload if any : " + stringify(requestPayload));
|
||||||
}
|
log.info("Response status : " + xmlHttpRequest.status);
|
||||||
} else if (xmlHttpRequest.status == 401 && (xmlHttpRequest.responseText == TOKEN_EXPIRED ||
|
log.info("Response payload if any : " + xmlHttpRequest.responseText);
|
||||||
|
//log.info("Response headers : " + xmlHttpRequest.getAllResponseHeaders());
|
||||||
|
|
||||||
|
if (xmlHttpRequest.status == 401 && (xmlHttpRequest.responseText == TOKEN_EXPIRED ||
|
||||||
xmlHttpRequest.responseText == TOKEN_INVALID ) && count < 5) {
|
xmlHttpRequest.responseText == TOKEN_INVALID ) && count < 5) {
|
||||||
tokenUtil.refreshToken();
|
tokenUtil.refreshToken();
|
||||||
return privateMethods.execute(method, url, successCallback, errorCallback, payload, (count + 1));
|
return privateMethods.execute(httpMethod, requestPayload, endpoint, responseCallback, ++count);
|
||||||
} else if (xmlHttpRequest.status == 500) {
|
|
||||||
return errorCallback(xmlHttpRequest);
|
|
||||||
} else {
|
} else {
|
||||||
return errorCallback(xmlHttpRequest);
|
return responseCallback(xmlHttpRequest);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method add Oauth authentication header to outgoing XMLHTTP Requests if Oauth authentication is enabled.
|
* This method add Oauth authentication header to outgoing XML-HTTP Requests if Oauth authentication is enabled.
|
||||||
* @param method HTTP request type.
|
* @param httpMethod HTTP request type.
|
||||||
* @param url target url.
|
* @param requestPayload payload/data if exists which is needed to be send.
|
||||||
* @param payload payload/data which need to be send.
|
* @param endpoint Backend REST API url.
|
||||||
* @param successCallback a function to be called if the respond if successful.
|
* @param responseCallback a function to be called with response retrieved.
|
||||||
* @param errorCallback a function to be called if en error is reserved.
|
|
||||||
*/
|
*/
|
||||||
privateMethods.initiateXMLHTTPRequest = function (method, url, successCallback, errorCallback, payload, contentType, acceptType) {
|
privateMethods.initiateXMLHTTPRequest = function (httpMethod, requestPayload, endpoint, responseCallback) {
|
||||||
if (privateMethods.getAccessToken()) {
|
return privateMethods.execute(httpMethod, requestPayload, endpoint, responseCallback, 0);
|
||||||
return privateMethods.execute(method, url, successCallback, errorCallback, payload, 0, contentType, acceptType);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method add Oauth authentication header to outgoing HTTPClient Requests if Oauth authentication is enabled.
|
* This method invokes return initiateXMLHttpRequest for get calls
|
||||||
* @param method HTTP request type.
|
* @param endpoint Backend REST API url.
|
||||||
* @param url target url.
|
* @param responseCallback a function to be called with response retrieved.
|
||||||
* @param payload payload/data which need to be send.
|
|
||||||
* @param successCallback a function to be called if the respond if successful.
|
|
||||||
* @param errorCallback a function to be called if en error is reserved.
|
|
||||||
*/
|
*/
|
||||||
privateMethods.initiateHTTPClientRequest = function (method, url, successCallback, errorCallback, payload, contentType, acceptType) {
|
publicXMLHTTPInvokers.get = function (endpoint, responseCallback) {
|
||||||
var HttpClient = Packages.org.apache.commons.httpclient.HttpClient;
|
var requestPayload = null;
|
||||||
var httpMethodObject;
|
return privateMethods.initiateXMLHTTPRequest(constants["HTTP_GET"], requestPayload, endpoint, responseCallback);
|
||||||
switch (method) {
|
|
||||||
case constants.HTTP_POST:
|
|
||||||
var PostMethod = Packages.org.apache.commons.httpclient.methods.PostMethod;
|
|
||||||
httpMethodObject = new PostMethod(url);
|
|
||||||
break;
|
|
||||||
case constants.HTTP_PUT:
|
|
||||||
var PutMethod = Packages.org.apache.commons.httpclient.methods.PutMethod;
|
|
||||||
httpMethodObject = new PutMethod(url);
|
|
||||||
break;
|
|
||||||
case constants.HTTP_GET:
|
|
||||||
var GetMethod = Packages.org.apache.commons.httpclient.methods.GetMethod;
|
|
||||||
httpMethodObject = new GetMethod(url);
|
|
||||||
break;
|
|
||||||
case constants.HTTP_DELETE:
|
|
||||||
var DeleteMethod = Packages.org.apache.commons.httpclient.methods.DeleteMethod;
|
|
||||||
httpMethodObject = new DeleteMethod(url);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
throw new IllegalArgumentException("Invalid HTTP request type: " + method);
|
|
||||||
}
|
|
||||||
var Header = Packages.org.apache.commons.httpclient.Header;
|
|
||||||
var header = new Header();
|
|
||||||
header.setName(constants.CONTENT_TYPE_IDENTIFIER);
|
|
||||||
header.setValue(contentType);
|
|
||||||
httpMethodObject.addRequestHeader(header);
|
|
||||||
header = new Header();
|
|
||||||
header.setName(constants.ACCEPT_IDENTIFIER);
|
|
||||||
header.setValue(acceptType);
|
|
||||||
httpMethodObject.addRequestHeader(header);
|
|
||||||
header = new Header();
|
|
||||||
header.setName(constants.REFERER);
|
|
||||||
header.setValue(String(privateMethods.getClientDomain()));
|
|
||||||
httpMethodObject.addRequestHeader(header);
|
|
||||||
if (IS_OAUTH_ENABLED) {
|
|
||||||
var accessToken = privateMethods.getAccessToken();
|
|
||||||
if (accessToken) {
|
|
||||||
header = new Header();
|
|
||||||
header.setName(constants.AUTHORIZATION_HEADER);
|
|
||||||
header.setValue(constants.BEARER_PREFIX + accessToken);
|
|
||||||
httpMethodObject.addRequestHeader(header);
|
|
||||||
} else {
|
|
||||||
response.sendRedirect(devicemgtProps["httpsURL"] + "/devicemgt/login");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
if (payload) {
|
|
||||||
var stringRequestEntity = new StringRequestEntity(stringify(payload));
|
|
||||||
httpMethodObject.setRequestEntity(stringRequestEntity);
|
|
||||||
}
|
|
||||||
var client = new HttpClient();
|
|
||||||
try {
|
|
||||||
client.executeMethod(httpMethodObject);
|
|
||||||
var status = httpMethodObject.getStatusCode();
|
|
||||||
if (status == 200) {
|
|
||||||
var responseContentDispositionHeader = httpMethodObject.getResponseHeader(constants.CONTENT_DISPOSITION_IDENTIFIER);
|
|
||||||
if (responseContentDispositionHeader) {
|
|
||||||
return successCallback(httpMethodObject.getResponseBodyAsStream(), httpMethodObject.getResponseHeaders());
|
|
||||||
} else {
|
|
||||||
return successCallback(httpMethodObject.getResponseBody());
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return errorCallback(httpMethodObject.getResponseBody());
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
return errorCallback(response);
|
|
||||||
} finally {
|
|
||||||
httpMethodObject.releaseConnection();
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method invokes return initiateXMLHttpRequest for post calls
|
||||||
|
* @param endpoint Backend REST API url.
|
||||||
|
* @param requestPayload payload/data if exists which is needed to be send.
|
||||||
|
* @param responseCallback a function to be called with response retrieved.
|
||||||
|
*/
|
||||||
|
publicXMLHTTPInvokers.post = function (endpoint, requestPayload, responseCallback) {
|
||||||
|
return privateMethods.initiateXMLHTTPRequest(constants["HTTP_POST"], requestPayload, endpoint, responseCallback);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method invokes return initiateXMLHttpRequest for put calls
|
||||||
|
* @param endpoint Backend REST API url.
|
||||||
|
* @param requestPayload payload/data if exists which is needed to be send.
|
||||||
|
* @param responseCallback a function to be called with response retrieved.
|
||||||
|
*/
|
||||||
|
publicXMLHTTPInvokers.put = function (endpoint, requestPayload, responseCallback) {
|
||||||
|
return privateMethods.initiateXMLHTTPRequest(constants["HTTP_PUT"], requestPayload, endpoint, responseCallback);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method invokes return initiateXMLHttpRequest for delete calls
|
||||||
|
* @param endpoint Backend REST API url.
|
||||||
|
* @param responseCallback a function to be called with response retrieved.
|
||||||
|
*/
|
||||||
|
publicXMLHTTPInvokers.delete = function (endpoint, responseCallback) {
|
||||||
|
var requestPayload = null;
|
||||||
|
return privateMethods.initiateXMLHTTPRequest(constants["HTTP_DELETE"], requestPayload, endpoint, responseCallback);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ---------------------------------------------------------------------------
|
||||||
|
* Start of WS-REQUEST based Interceptor implementations
|
||||||
|
* ---------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method add Oauth authentication header to outgoing WS Requests if Oauth authentication is enabled.
|
* This method add Oauth authentication header to outgoing WS Requests if Oauth authentication is enabled.
|
||||||
* @param action
|
* @param action
|
||||||
@ -202,32 +173,26 @@ var backendServiceInvoker = function () {
|
|||||||
* @param soapVersion soapVersion which need to used.
|
* @param soapVersion soapVersion which need to used.
|
||||||
*/
|
*/
|
||||||
privateMethods.initiateWSRequest = function (action, endpoint, successCallback, errorCallback, soapVersion, payload) {
|
privateMethods.initiateWSRequest = function (action, endpoint, successCallback, errorCallback, soapVersion, payload) {
|
||||||
var ws = require('ws');
|
var ws = require("ws");
|
||||||
var wsRequest = new ws.WSRequest();
|
var wsRequest = new ws.WSRequest();
|
||||||
var options = [];
|
var options = [];
|
||||||
if (IS_OAUTH_ENABLED) {
|
if (devicemgtProps["isOAuthEnabled"]) {
|
||||||
var accessToken = privateMethods.getAccessToken();
|
var accessToken = privateMethods.getAccessToken();
|
||||||
if (accessToken) {
|
if (accessToken) {
|
||||||
var authenticationHeaderName = String(constants.AUTHORIZATION_HEADER);
|
var authenticationHeaderName = String(constants["AUTHORIZATION_HEADER"]);
|
||||||
var authenticationHeaderValue = String(constants.BEARER_PREFIX + accessToken);
|
var authenticationHeaderValue = String(constants["BEARER_PREFIX"] + accessToken);
|
||||||
var headers = [];
|
var headers = [];
|
||||||
var oAuthAuthenticationData = {};
|
var oAuthAuthenticationData = {};
|
||||||
oAuthAuthenticationData.name = authenticationHeaderName;
|
oAuthAuthenticationData.name = authenticationHeaderName;
|
||||||
oAuthAuthenticationData.value = authenticationHeaderValue;
|
oAuthAuthenticationData.value = authenticationHeaderValue;
|
||||||
headers.push(oAuthAuthenticationData);
|
headers.push(oAuthAuthenticationData);
|
||||||
|
|
||||||
var referrerData = {};
|
|
||||||
referrerData.name = constants.REFERER;
|
|
||||||
referrerData.value = String(privateMethods.getClientDomain());
|
|
||||||
headers.push(referrerData);
|
|
||||||
|
|
||||||
options.HTTPHeaders = headers;
|
options.HTTPHeaders = headers;
|
||||||
} else {
|
} else {
|
||||||
response.sendRedirect(devicemgtProps["httpsURL"] + "/devicemgt/login");
|
response.sendRedirect(devicemgtProps["appContext"] + "login");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
options.useSOAP = soapVersion;
|
options.useSOAP = soapVersion;
|
||||||
options.useWSA = constants.WEB_SERVICE_ADDRESSING_VERSION;
|
options.useWSA = constants["WEB_SERVICE_ADDRESSING_VERSION"];
|
||||||
options.action = action;
|
options.action = action;
|
||||||
var wsResponse;
|
var wsResponse;
|
||||||
try {
|
try {
|
||||||
@ -244,60 +209,94 @@ var backendServiceInvoker = function () {
|
|||||||
return successCallback(wsResponse);
|
return successCallback(wsResponse);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* This method invokes return initiateXMLHttpRequest for get calls
|
|
||||||
* @param url target url.
|
|
||||||
* @param successCallback a function to be called if the respond if successful.
|
|
||||||
* @param errorCallback a function to be called if en error is reserved.
|
|
||||||
*/
|
|
||||||
publicXMLHTTPInvokers.get = function (url, successCallback, errorCallback, contentType, acceptType) {
|
|
||||||
return privateMethods.initiateXMLHTTPRequest(constants.HTTP_GET, url, successCallback, errorCallback, contentType, acceptType);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method invokes return initiateXMLHttpRequest for post calls
|
|
||||||
* @param url target url.
|
|
||||||
* @param payload payload/data which need to be send.
|
|
||||||
* @param successCallback a function to be called if the respond if successful.
|
|
||||||
* @param errorCallback a function to be called if en error is reserved.
|
|
||||||
*/
|
|
||||||
publicXMLHTTPInvokers.post = function (url, payload, successCallback, errorCallback, contentType, acceptType) {
|
|
||||||
return privateMethods.initiateXMLHTTPRequest(constants.HTTP_POST, url, successCallback, errorCallback, payload, contentType, acceptType);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method invokes return initiateXMLHttpRequest for put calls
|
|
||||||
* @param url target url.
|
|
||||||
* @param payload payload/data which need to be send.
|
|
||||||
* @param successCallback a function to be called if the respond if successful.
|
|
||||||
* @param errorCallback a function to be called if en error is reserved.
|
|
||||||
*/
|
|
||||||
publicXMLHTTPInvokers.put = function (url, payload, successCallback, errorCallback, contentType, acceptType) {
|
|
||||||
return privateMethods.initiateXMLHTTPRequest(constants.HTTP_PUT, url, successCallback, errorCallback, payload, contentType, acceptType);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method invokes return initiateXMLHttpRequest for delete calls
|
|
||||||
* @param url target url.
|
|
||||||
* @param successCallback a function to be called if the respond if successful.
|
|
||||||
* @param errorCallback a function to be called if en error is reserved.
|
|
||||||
*/
|
|
||||||
publicXMLHTTPInvokers.delete = function (url, successCallback, errorCallback, contentType, acceptType) {
|
|
||||||
return privateMethods.initiateXMLHTTPRequest(constants.HTTP_DELETE, url, successCallback, errorCallback, contentType, acceptType);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method invokes return initiateWSRequest for soap calls
|
* This method invokes return initiateWSRequest for soap calls
|
||||||
|
* @param action describes particular soap action.
|
||||||
|
* @param requestPayload SOAP request payload which is needed to be send.
|
||||||
* @param endpoint service end point to be triggered.
|
* @param endpoint service end point to be triggered.
|
||||||
* @param payload soap payload which need to be send.
|
|
||||||
* @param successCallback a function to be called if the respond if successful.
|
* @param successCallback a function to be called if the respond if successful.
|
||||||
* @param errorCallback a function to be called if en error is reserved.
|
* @param errorCallback a function to be called if en error is reserved.
|
||||||
* @param soapVersion soapVersion which need to used.
|
* @param soapVersion soapVersion which need to used.
|
||||||
*/
|
*/
|
||||||
publicWSInvokers.soapRequest = function (action, endpoint, payload, successCallback, errorCallback, soapVersion) {
|
publicWSInvokers.soapRequest = function (action, requestPayload, endpoint, successCallback, errorCallback, soapVersion) {
|
||||||
return privateMethods.initiateWSRequest(action, endpoint, successCallback, errorCallback, soapVersion, payload);
|
return privateMethods.initiateWSRequest(action, endpoint, successCallback, errorCallback, soapVersion, requestPayload);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ---------------------------------------------------------------------------
|
||||||
|
* Start of HTTP-CLIENT-REQUEST based Interceptor implementations
|
||||||
|
* ---------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method add Oauth authentication header to outgoing HTTPClient Requests if Oauth authentication is enabled.
|
||||||
|
* @param method HTTP request type.
|
||||||
|
* @param url target url.
|
||||||
|
* @param payload payload/data which need to be send.
|
||||||
|
* @param successCallback a function to be called if the respond if successful.
|
||||||
|
* @param errorCallback a function to be called if en error is reserved.
|
||||||
|
*/
|
||||||
|
privateMethods.initiateHTTPClientRequest = function (method, url, successCallback, errorCallback, payload) {
|
||||||
|
var HttpClient = Packages.org.apache.commons.httpclient.HttpClient;
|
||||||
|
var httpMethodObject;
|
||||||
|
switch (method) {
|
||||||
|
case constants["HTTP_GET"]:
|
||||||
|
var GetMethod = Packages.org.apache.commons.httpclient.methods.GetMethod;
|
||||||
|
httpMethodObject = new GetMethod(url);
|
||||||
|
break;
|
||||||
|
case constants["HTTP_POST"]:
|
||||||
|
var PostMethod = Packages.org.apache.commons.httpclient.methods.PostMethod;
|
||||||
|
httpMethodObject = new PostMethod(url);
|
||||||
|
break;
|
||||||
|
case constants["HTTP_PUT"]:
|
||||||
|
var PutMethod = Packages.org.apache.commons.httpclient.methods.PutMethod;
|
||||||
|
httpMethodObject = new PutMethod(url);
|
||||||
|
break;
|
||||||
|
case constants["HTTP_DELETE"]:
|
||||||
|
var DeleteMethod = Packages.org.apache.commons.httpclient.methods.DeleteMethod;
|
||||||
|
httpMethodObject = new DeleteMethod(url);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new IllegalArgumentException("Invalid HTTP request method: " + method);
|
||||||
|
}
|
||||||
|
var Header = Packages.org.apache.commons.httpclient.Header;
|
||||||
|
var header = new Header();
|
||||||
|
header.setName(constants["CONTENT_TYPE_IDENTIFIER"]);
|
||||||
|
header.setValue(constants["APPLICATION_JSON"]);
|
||||||
|
httpMethodObject.addRequestHeader(header);
|
||||||
|
header = new Header();
|
||||||
|
header.setName(constants["ACCEPT_IDENTIFIER"]);
|
||||||
|
header.setValue(constants["APPLICATION_JSON"]);
|
||||||
|
httpMethodObject.addRequestHeader(header);
|
||||||
|
|
||||||
|
if (devicemgtProps["isOAuthEnabled"]) {
|
||||||
|
var accessToken = privateMethods.getAccessToken();
|
||||||
|
if (accessToken) {
|
||||||
|
header = new Header();
|
||||||
|
header.setName(constants["AUTHORIZATION_HEADER"]);
|
||||||
|
header.setValue(constants["BEARER_PREFIX"] + accessToken);
|
||||||
|
httpMethodObject.addRequestHeader(header);
|
||||||
|
} else {
|
||||||
|
response.sendRedirect(devicemgtProps["appContext"] + "login");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var stringRequestEntity = new StringRequestEntity(stringify(payload));
|
||||||
|
httpMethodObject.setRequestEntity(stringRequestEntity);
|
||||||
|
var client = new HttpClient();
|
||||||
|
try {
|
||||||
|
client.executeMethod(httpMethodObject);
|
||||||
|
var status = httpMethodObject.getStatusCode();
|
||||||
|
if (status == 200) {
|
||||||
|
return successCallback(httpMethodObject.getResponseBody());
|
||||||
|
} else {
|
||||||
|
return errorCallback(httpMethodObject.getResponseBody());
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
return errorCallback(response);
|
||||||
|
} finally {
|
||||||
|
method.releaseConnection();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method invokes return initiateHTTPClientRequest for get calls
|
* This method invokes return initiateHTTPClientRequest for get calls
|
||||||
@ -305,8 +304,10 @@ var backendServiceInvoker = function () {
|
|||||||
* @param successCallback a function to be called if the respond if successful.
|
* @param successCallback a function to be called if the respond if successful.
|
||||||
* @param errorCallback a function to be called if en error is reserved.
|
* @param errorCallback a function to be called if en error is reserved.
|
||||||
*/
|
*/
|
||||||
publicHTTPClientInvokers.get = function (url, successCallback, errorCallback, contentType, acceptType) {
|
publicHTTPClientInvokers.get = function (url, successCallback, errorCallback) {
|
||||||
return privateMethods.initiateHTTPClientRequest(constants.HTTP_GET, url, successCallback, errorCallback, null, contentType, acceptType);
|
var requestPayload = null;
|
||||||
|
return privateMethods.
|
||||||
|
initiateHTTPClientRequest(constants["HTTP_GET"], url, successCallback, errorCallback, requestPayload);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -316,9 +317,9 @@ var backendServiceInvoker = function () {
|
|||||||
* @param successCallback a function to be called if the respond if successful.
|
* @param successCallback a function to be called if the respond if successful.
|
||||||
* @param errorCallback a function to be called if en error is reserved.
|
* @param errorCallback a function to be called if en error is reserved.
|
||||||
*/
|
*/
|
||||||
publicHTTPClientInvokers.post = function (url, payload, successCallback, errorCallback, contentType, acceptType) {
|
publicHTTPClientInvokers.post = function (url, payload, successCallback, errorCallback) {
|
||||||
return privateMethods.
|
return privateMethods.
|
||||||
initiateHTTPClientRequest(constants.HTTP_POST, url, successCallback, errorCallback, payload, contentType, acceptType);
|
initiateHTTPClientRequest(constants["HTTP_POST"], url, successCallback, errorCallback, payload);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -328,8 +329,9 @@ var backendServiceInvoker = function () {
|
|||||||
* @param successCallback a function to be called if the respond if successful.
|
* @param successCallback a function to be called if the respond if successful.
|
||||||
* @param errorCallback a function to be called if en error is reserved.
|
* @param errorCallback a function to be called if en error is reserved.
|
||||||
*/
|
*/
|
||||||
publicHTTPClientInvokers.put = function (url, payload, successCallback, errorCallback, contentType, acceptType) {
|
publicHTTPClientInvokers.put = function (url, payload, successCallback, errorCallback) {
|
||||||
return privateMethods.initiateHTTPClientRequest(constants.HTTP_PUT, url, successCallback, errorCallback, payload, contentType, acceptType);
|
return privateMethods.
|
||||||
|
initiateHTTPClientRequest(constants["HTTP_PUT"], url, successCallback, errorCallback, payload);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -338,23 +340,16 @@ var backendServiceInvoker = function () {
|
|||||||
* @param successCallback a function to be called if the respond if successful.
|
* @param successCallback a function to be called if the respond if successful.
|
||||||
* @param errorCallback a function to be called if en error is reserved.
|
* @param errorCallback a function to be called if en error is reserved.
|
||||||
*/
|
*/
|
||||||
publicHTTPClientInvokers.delete = function (url, successCallback, errorCallback, contentType, acceptType) {
|
publicHTTPClientInvokers.delete = function (url, successCallback, errorCallback) {
|
||||||
return privateMethods.initiateHTTPClientRequest(constants.HTTP_DELETE, url, successCallback, errorCallback, contentType, acceptType);
|
var requestPayload = null;
|
||||||
|
return privateMethods.
|
||||||
|
initiateHTTPClientRequest(constants["HTTP_DELETE"], url, successCallback, errorCallback, requestPayload);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
var publicMethods = {};
|
||||||
* This method fetch the current logged user from the session and returns
|
publicMethods.XMLHttp = publicXMLHTTPInvokers;
|
||||||
* the tenant domain name of the user
|
publicMethods.WS = publicWSInvokers;
|
||||||
* @returns {tenantDomain}
|
publicMethods.HttpClient = publicHTTPClientInvokers;
|
||||||
*/
|
|
||||||
privateMethods.getClientDomain = function () {
|
|
||||||
var user = session.get(constants.USER_SESSION_KEY);
|
|
||||||
return user.domain;
|
|
||||||
}
|
|
||||||
|
|
||||||
var publicInvokers = {};
|
return publicMethods;
|
||||||
publicInvokers.XMLHttp = publicXMLHTTPInvokers;
|
|
||||||
publicInvokers.WS = publicWSInvokers;
|
|
||||||
publicInvokers.HttpClient = publicHTTPClientInvokers;
|
|
||||||
return publicInvokers;
|
|
||||||
}();
|
}();
|
||||||
@ -22,7 +22,7 @@ deviceModule = function () {
|
|||||||
|
|
||||||
var utility = require('/app/modules/utility.js').utility;
|
var utility = require('/app/modules/utility.js').utility;
|
||||||
var constants = require('/app/modules/constants.js');
|
var constants = require('/app/modules/constants.js');
|
||||||
var devicemgtProps = require('/app/conf/devicemgt-props.js').config();
|
var devicemgtProps = require("/app/conf/reader/main.js")["conf"];
|
||||||
var serviceInvokers = require("/app/modules/backend-service-invoker.js").backendServiceInvoker;
|
var serviceInvokers = require("/app/modules/backend-service-invoker.js").backendServiceInvoker;
|
||||||
|
|
||||||
var ArrayList = Packages.java.util.ArrayList;
|
var ArrayList = Packages.java.util.ArrayList;
|
||||||
|
|||||||
@ -22,7 +22,7 @@ var groupModule = {};
|
|||||||
|
|
||||||
var userModule = require("/app/modules/user.js").userModule;
|
var userModule = require("/app/modules/user.js").userModule;
|
||||||
var constants = require('/app/modules/constants.js');
|
var constants = require('/app/modules/constants.js');
|
||||||
var devicemgtProps = require('/app/conf/devicemgt-props.js').config();
|
var devicemgtProps = require("/app/conf/reader/main.js")["conf"];
|
||||||
var utility = require("/app/modules/utility.js").utility;
|
var utility = require("/app/modules/utility.js").utility;
|
||||||
var serviceInvokers = require("/app/modules/backend-service-invoker.js").backendServiceInvoker;
|
var serviceInvokers = require("/app/modules/backend-service-invoker.js").backendServiceInvoker;
|
||||||
|
|
||||||
|
|||||||
@ -17,7 +17,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
var carbonModule = require("carbon");
|
var carbonModule = require("carbon");
|
||||||
var devicemgtProps = require("/app/conf/devicemgt-props.js").config();
|
var devicemgtProps = require("/app/conf/reader/main.js")["conf"];
|
||||||
var carbonServer = new carbonModule.server.Server({
|
var carbonServer = new carbonModule.server.Server({
|
||||||
tenanted: true,
|
tenanted: true,
|
||||||
url: devicemgtProps["httpsURL"] + "/admin"
|
url: devicemgtProps["httpsURL"] + "/admin"
|
||||||
@ -31,4 +31,4 @@ var permissions = {
|
|||||||
'/permission/admin/device-mgt/user': ['ui.execute'],
|
'/permission/admin/device-mgt/user': ['ui.execute'],
|
||||||
'/permission/admin/manage/api/subscribe': ['ui.execute']
|
'/permission/admin/manage/api/subscribe': ['ui.execute']
|
||||||
};
|
};
|
||||||
userModule.addRole("internal/devicemgt-user", ["admin"], permissions);
|
//userModule.addRole("internal/devicemgt-user", ["admin"], permissions);
|
||||||
|
|||||||
@ -16,79 +16,83 @@
|
|||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
@Deprecated - new
|
||||||
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This invokerRequestWrapper contains the wrappers for invoker util requests.
|
* This invokerRequestWrapper contains the wrappers for invoker util requests.
|
||||||
*/
|
*/
|
||||||
var invokerRequestWrapper = function () {
|
//var invokerRequestWrapper = function () {
|
||||||
|
//
|
||||||
var constants = require("/modules/constants.js");
|
// var constants = require("/modules/constants.js");
|
||||||
var serviceInvokers = require("/modules/backend-service-invoker.js").backendServiceInvoker;
|
// var serviceInvokers = require("/modules/backend-service-invoker.js").backendServiceInvoker;
|
||||||
|
//
|
||||||
var publicWrappers = [];
|
// var publicWrappers = [];
|
||||||
|
//
|
||||||
publicWrappers.initiate = function (method, url, payload) {
|
// publicWrappers.initiate = function (method, url, payload) {
|
||||||
switch (method) {
|
// switch (method) {
|
||||||
case constants.HTTP_GET:
|
// case constants.HTTP_GET:
|
||||||
var response = serviceInvokers.XMLHttp.get(url, function (responsePayload) {
|
// var response = serviceInvokers.XMLHttp.get(url, function (responsePayload) {
|
||||||
var response = {};
|
// var response = {};
|
||||||
response.content = responsePayload["responseContent"];
|
// response.content = responsePayload["responseContent"];
|
||||||
response.status = "success";
|
// response.status = "success";
|
||||||
return response;
|
// return response;
|
||||||
},
|
// },
|
||||||
function (responsePayload) {
|
// function (responsePayload) {
|
||||||
var response = {};
|
// var response = {};
|
||||||
response.content = responsePayload;
|
// response.content = responsePayload;
|
||||||
response.status = "error";
|
// response.status = "error";
|
||||||
return response;
|
// return response;
|
||||||
});
|
// });
|
||||||
return response;
|
// return response;
|
||||||
break;
|
// break;
|
||||||
case constants.HTTP_POST:
|
// case constants.HTTP_POST:
|
||||||
var response = serviceInvokers.XMLHttp.post(url, payload, function (responsePayload) {
|
// var response = serviceInvokers.XMLHttp.post(url, payload, function (responsePayload) {
|
||||||
var response = {};
|
// var response = {};
|
||||||
response.content = responsePayload["responseContent"];
|
// response.content = responsePayload["responseContent"];
|
||||||
response.status = "success";
|
// response.status = "success";
|
||||||
return response;
|
// return response;
|
||||||
},
|
// },
|
||||||
function (responsePayload) {
|
// function (responsePayload) {
|
||||||
var response = {};
|
// var response = {};
|
||||||
response.content = responsePayload;
|
// response.content = responsePayload;
|
||||||
response.status = "error";
|
// response.status = "error";
|
||||||
return response;
|
// return response;
|
||||||
});
|
// });
|
||||||
return response;
|
// return response;
|
||||||
break;
|
// break;
|
||||||
case constants.HTTP_PUT:
|
// case constants.HTTP_PUT:
|
||||||
var response = serviceInvokers.XMLHttp.put(url, payload, function (responsePayload) {
|
// var response = serviceInvokers.XMLHttp.put(url, payload, function (responsePayload) {
|
||||||
var response = {};
|
// var response = {};
|
||||||
response.content = responsePayload["responseContent"];
|
// response.content = responsePayload["responseContent"];
|
||||||
response.status = "success";
|
// response.status = "success";
|
||||||
return response;
|
// return response;
|
||||||
},
|
// },
|
||||||
function (responsePayload) {
|
// function (responsePayload) {
|
||||||
var response = {};
|
// var response = {};
|
||||||
response.content = responsePayload;
|
// response.content = responsePayload;
|
||||||
response.status = "error";
|
// response.status = "error";
|
||||||
return response;
|
// return response;
|
||||||
});
|
// });
|
||||||
return response;
|
// return response;
|
||||||
break;
|
// break;
|
||||||
case constants.HTTP_DELETE:
|
// case constants.HTTP_DELETE:
|
||||||
var response = serviceInvokers.XMLHttp.delete(url, function (responsePayload) {
|
// var response = serviceInvokers.XMLHttp.delete(url, function (responsePayload) {
|
||||||
var response = {};
|
// var response = {};
|
||||||
response.content = responsePayload["responseContent"];
|
// response.content = responsePayload["responseContent"];
|
||||||
response.status = "success";
|
// response.status = "success";
|
||||||
return response;
|
// return response;
|
||||||
},
|
// },
|
||||||
function (responsePayload) {
|
// function (responsePayload) {
|
||||||
var response = {};
|
// var response = {};
|
||||||
response.content = responsePayload;
|
// response.content = responsePayload;
|
||||||
response.status = "error";
|
// response.status = "error";
|
||||||
return response;
|
// return response;
|
||||||
});
|
// });
|
||||||
return response;
|
// return response;
|
||||||
break;
|
// break;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
}();
|
//}();
|
||||||
|
|||||||
@ -33,7 +33,7 @@ var onFail;
|
|||||||
properties = {username: context.input.username, password: context.input.password};
|
properties = {username: context.input.username, password: context.input.password};
|
||||||
apiWrapperUtil.setupAccessTokenPair(constants.GRANT_TYPE_PASSWORD, properties);
|
apiWrapperUtil.setupAccessTokenPair(constants.GRANT_TYPE_PASSWORD, properties);
|
||||||
}
|
}
|
||||||
var devicemgtProps = require('/app/conf/devicemgt-props.js').config();
|
var devicemgtProps = require("/app/conf/reader/main.js")["conf"];
|
||||||
var carbonServer = require("carbon").server;
|
var carbonServer = require("carbon").server;
|
||||||
(new carbonServer.Server({url: devicemgtProps["adminService"]}))
|
(new carbonServer.Server({url: devicemgtProps["adminService"]}))
|
||||||
.login(context.input.username, context.input.password);
|
.login(context.input.username, context.input.password);
|
||||||
|
|||||||
@ -20,7 +20,7 @@ var operationModule = function () {
|
|||||||
var log = new Log("/app/modules/operation.js");
|
var log = new Log("/app/modules/operation.js");
|
||||||
var utility = require('/app/modules/utility.js').utility;
|
var utility = require('/app/modules/utility.js').utility;
|
||||||
var constants = require('/app/modules/constants.js');
|
var constants = require('/app/modules/constants.js');
|
||||||
var devicemgtProps = require('/app/conf/devicemgt-props.js').config();
|
var devicemgtProps = require("/app/conf/reader/main.js")["conf"];
|
||||||
var serviceInvokers = require("/app/modules/backend-service-invoker.js").backendServiceInvoker;
|
var serviceInvokers = require("/app/modules/backend-service-invoker.js").backendServiceInvoker;
|
||||||
|
|
||||||
var publicMethods = {};
|
var publicMethods = {};
|
||||||
|
|||||||
@ -25,7 +25,7 @@ policyModule = function () {
|
|||||||
|
|
||||||
var constants = require('/app/modules/constants.js');
|
var constants = require('/app/modules/constants.js');
|
||||||
var utility = require("/app/modules/utility.js")["utility"];
|
var utility = require("/app/modules/utility.js")["utility"];
|
||||||
var devicemgtProps = require('/app/conf/devicemgt-props.js').config();
|
var devicemgtProps = require("/app/conf/reader/main.js")["conf"];
|
||||||
var serviceInvokers = require("/app/modules/backend-service-invoker.js").backendServiceInvoker;
|
var serviceInvokers = require("/app/modules/backend-service-invoker.js").backendServiceInvoker;
|
||||||
|
|
||||||
var publicMethods = {};
|
var publicMethods = {};
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
*
|
*
|
||||||
* WSO2 Inc. licenses this file to you under the Apache License,
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
@ -10,47 +10,42 @@
|
|||||||
*
|
*
|
||||||
* Unless required by applicable law or agreed to in writing,
|
* Unless required by applicable law or agreed to in writing,
|
||||||
* software distributed under the License is distributed on an
|
* software distributed under the License is distributed on an
|
||||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
|
||||||
* KIND, either express or implied. See the License for the
|
* either express or implied. See the License for the
|
||||||
* specific language governing permissions and limitations
|
* specific language governing permissions and limitations
|
||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This module contains user and roles related functionality
|
* This module contains user and roles related functionality.
|
||||||
*/
|
*/
|
||||||
var userModule = function () {
|
var userModule = function () {
|
||||||
var log = new Log("/app/modules/user.js");
|
var log = new Log("/app/modules/user.js");
|
||||||
|
|
||||||
var constants = require("/app/modules/constants.js");
|
var constants = require("/app/modules/constants.js");
|
||||||
var utility = require("/app/modules/utility.js")["utility"];
|
var utility = require("/app/modules/utility.js")["utility"];
|
||||||
var devicemgtProps = require('/app/conf/devicemgt-props.js').config();
|
var devicemgtProps = require("/app/conf/reader/main.js")["conf"];
|
||||||
var serviceInvokers = require("/app/modules/backend-service-invoker.js").backendServiceInvoker;
|
var serviceInvokers = require("/app/modules/backend-service-invoker.js")["backendServiceInvoker"];
|
||||||
|
|
||||||
/* Initializing user manager */
|
/* Initializing user manager */
|
||||||
var carbon = require('carbon');
|
var carbon = require("carbon");
|
||||||
var tenantId = carbon.server.tenantId();
|
var url = carbon.server.address("https") + "/admin/services";
|
||||||
var url = carbon.server.address('https') + "/admin/services";
|
|
||||||
var server = new carbon.server.Server(url);
|
var server = new carbon.server.Server(url);
|
||||||
var userManager = new carbon.user.UserManager(server, tenantId);
|
|
||||||
|
|
||||||
var deviceManagementService = utility.getDeviceManagementService();
|
|
||||||
var EmailMessageProperties = Packages.org.wso2.carbon.device.mgt.common.EmailMessageProperties;
|
|
||||||
|
|
||||||
var publicMethods = {};
|
var publicMethods = {};
|
||||||
var privateMethods = {};
|
var privateMethods = {};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the carbon user object from the session. If not found - it will throw a user not found error.
|
* Get the carbon user object from the session. If not found - it will throw a user not found error.
|
||||||
* @returns {carbon user object}
|
* @returns {object} carbon user object
|
||||||
*/
|
*/
|
||||||
privateMethods.getCarbonUser = function () {
|
privateMethods.getCarbonUser = function () {
|
||||||
var carbon = require('carbon');
|
var carbon = require("carbon");
|
||||||
var carbonUser = session.get(constants.USER_SESSION_KEY);
|
var carbonUser = session.get(constants["USER_SESSION_KEY"]);
|
||||||
var utility = require('/app/modules/utility.js').utility;
|
var utility = require("/modules/utility.js")["utility"];
|
||||||
if (!carbonUser) {
|
if (!carbonUser) {
|
||||||
log.error("User object was not found in the session");
|
log.error("User object was not found in the session");
|
||||||
throw constants.ERRORS.USER_NOT_FOUND;
|
throw constants["ERRORS"]["USER_NOT_FOUND"];
|
||||||
}
|
}
|
||||||
return carbonUser;
|
return carbonUser;
|
||||||
};
|
};
|
||||||
@ -59,83 +54,25 @@ var userModule = function () {
|
|||||||
* Only GET method is implemented for now since there are no other type of methods used this method.
|
* Only GET method is implemented for now since there are no other type of methods used this method.
|
||||||
* @param url - URL to call the backend without the host
|
* @param url - URL to call the backend without the host
|
||||||
* @param method - HTTP Method (GET, POST)
|
* @param method - HTTP Method (GET, POST)
|
||||||
* @returns {
|
* @returns An object with 'status': 'success'|'error', 'content': {}
|
||||||
* 'status': 'success'|'error',
|
|
||||||
* 'content': {}
|
|
||||||
* }
|
|
||||||
*/
|
*/
|
||||||
privateMethods.callBackend = function (url, method) {
|
privateMethods.callBackend = function (url, method) {
|
||||||
if (constants.HTTP_GET == method) {
|
if (constants["HTTP_GET"] == method) {
|
||||||
var response = serviceInvokers.XMLHttp.get(url, function (responsePayload) {
|
return serviceInvokers.XMLHttp.get(url,
|
||||||
|
function (backendResponse) {
|
||||||
var response = {};
|
var response = {};
|
||||||
response.content = responsePayload["responseContent"];
|
response.content = backendResponse.responseText;
|
||||||
if (responsePayload["responseContent"] == null && responsePayload != null) {
|
if (backendResponse.status == 200) {
|
||||||
response.content = responsePayload;
|
|
||||||
}
|
|
||||||
response.status = "success";
|
response.status = "success";
|
||||||
return response;
|
} else if (backendResponse.status == 400 || backendResponse.status == 401 ||
|
||||||
},
|
backendResponse.status == 404 || backendResponse.status == 500) {
|
||||||
function (responsePayload) {
|
|
||||||
var response = {};
|
|
||||||
response.content = responsePayload;
|
|
||||||
response.status = "error";
|
response.status = "error";
|
||||||
|
}
|
||||||
return response;
|
return response;
|
||||||
});
|
}
|
||||||
return response;
|
);
|
||||||
} else {
|
} else {
|
||||||
log.error("Programming error : This method only support HTTP GET requests.");
|
log.error("Runtime error : This method only support HTTP GET requests.");
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
@Deprecated
|
|
||||||
*/
|
|
||||||
/**
|
|
||||||
* Add user to mdm-user-store.
|
|
||||||
*
|
|
||||||
* @param username Username of the user
|
|
||||||
* @param firstname First name of the user
|
|
||||||
* @param lastname Last name of the user
|
|
||||||
* @param emailAddress Email address of the user
|
|
||||||
* @param userRoles Roles assigned to the user
|
|
||||||
*
|
|
||||||
* @returns {number} HTTP Status code 201 if succeeded, 409 if user already exists
|
|
||||||
*/
|
|
||||||
publicMethods.addUser = function (username, firstname, lastname, emailAddress, userRoles) {
|
|
||||||
var statusCode, carbon = require('carbon');
|
|
||||||
var carbonUser = session.get(constants.USER_SESSION_KEY);
|
|
||||||
var utility = require('/app/modules/utility.js').utility;
|
|
||||||
if (!carbonUser) {
|
|
||||||
log.error("User object was not found in the session");
|
|
||||||
throw constants.ERRORS.USER_NOT_FOUND;
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
utility.startTenantFlow(carbonUser);
|
|
||||||
var tenantId = carbon.server.tenantId();
|
|
||||||
var userManager = new carbon.user.UserManager(server, tenantId);
|
|
||||||
if (userManager.userExists(username)) {
|
|
||||||
if (log.isDebugEnabled()) {
|
|
||||||
log.debug("A user with name '" + username + "' already exists.");
|
|
||||||
}
|
|
||||||
// http status code 409 refers to - conflict.
|
|
||||||
statusCode = 409;
|
|
||||||
} else {
|
|
||||||
var initialUserPassword = privateMethods.generateInitialUserPassword();
|
|
||||||
var defaultUserClaims = privateMethods.buildDefaultUserClaims(firstname, lastname, emailAddress);
|
|
||||||
|
|
||||||
userManager.addUser(username, initialUserPassword, userRoles, defaultUserClaims, "default");
|
|
||||||
privateMethods.inviteUserToEnroll(username, initialUserPassword);
|
|
||||||
if (log.isDebugEnabled()) {
|
|
||||||
log.debug("A new user with name '" + username + "' was created.");
|
|
||||||
}
|
|
||||||
// http status code 201 refers to - created.
|
|
||||||
statusCode = 201;
|
|
||||||
}
|
|
||||||
return statusCode;
|
|
||||||
} catch (e) {
|
|
||||||
throw e;
|
|
||||||
} finally {
|
|
||||||
utility.endTenantFlow();
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -179,197 +116,6 @@ var userModule = function () {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
|
||||||
@Deprecated
|
|
||||||
*/
|
|
||||||
/**
|
|
||||||
* Remove an existing user from mdm-user-store.
|
|
||||||
*
|
|
||||||
* @param username Username of the user
|
|
||||||
* @returns {number} HTTP Status code 200 if succeeded, 409 if the user does not exist
|
|
||||||
*/
|
|
||||||
publicMethods.removeUser = function (username) {
|
|
||||||
var statusCode, carbon = require('carbon');
|
|
||||||
var carbonUser = session.get(constants.USER_SESSION_KEY);
|
|
||||||
var utility = require('/app/modules/utility.js').utility;
|
|
||||||
if (!carbonUser) {
|
|
||||||
log.error("User object was not found in the session");
|
|
||||||
throw constants.ERRORS.USER_NOT_FOUND;
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
utility.startTenantFlow(carbonUser);
|
|
||||||
var tenantId = carbon.server.tenantId();
|
|
||||||
var userManager = new carbon.user.UserManager(server, tenantId);
|
|
||||||
if (userManager.userExists(username)) {
|
|
||||||
userManager.removeUser(username);
|
|
||||||
if (log.isDebugEnabled()) {
|
|
||||||
log.debug("An existing user with name '" + username + "' was removed.");
|
|
||||||
}
|
|
||||||
// http status code 200 refers to - success.
|
|
||||||
statusCode = 200;
|
|
||||||
} else {
|
|
||||||
if (log.isDebugEnabled()) {
|
|
||||||
log.debug("A user with name '" + username + "' does not exist to remove.");
|
|
||||||
}
|
|
||||||
// http status code 409 refers to - conflict.
|
|
||||||
statusCode = 409;
|
|
||||||
}
|
|
||||||
return statusCode;
|
|
||||||
} catch (e) {
|
|
||||||
throw e;
|
|
||||||
} finally {
|
|
||||||
utility.endTenantFlow();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
@Deprecated
|
|
||||||
*/
|
|
||||||
/**
|
|
||||||
* Private method to be used by addUser() to
|
|
||||||
* generate an initial user password for a user.
|
|
||||||
* This will be the password used by a user for his initial login to the system.
|
|
||||||
*
|
|
||||||
* @returns {string} Initial User Password
|
|
||||||
*/
|
|
||||||
privateMethods.generateInitialUserPassword = function () {
|
|
||||||
var passwordLength = 6;
|
|
||||||
//defining the pool of characters to be used for initial password generation
|
|
||||||
var lowerCaseCharset = "abcdefghijklmnopqrstuvwxyz";
|
|
||||||
var upperCaseCharset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
|
||||||
var numericCharset = "0123456789";
|
|
||||||
|
|
||||||
var totalCharset = lowerCaseCharset + upperCaseCharset + numericCharset;
|
|
||||||
var totalCharsetLength = totalCharset.length;
|
|
||||||
|
|
||||||
var initialUserPassword = "";
|
|
||||||
for (var i = 0; i < passwordLength; ++i) {
|
|
||||||
initialUserPassword += totalCharset.charAt(Math.floor(Math.random() * totalCharsetLength));
|
|
||||||
}
|
|
||||||
if (log.isDebugEnabled()) {
|
|
||||||
log.debug("Initial password created for new user : " + initialUserPassword);
|
|
||||||
}
|
|
||||||
return String(initialUserPassword);
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
@Deprecated
|
|
||||||
*/
|
|
||||||
/**
|
|
||||||
* Build default user claims.
|
|
||||||
*
|
|
||||||
* @param firstname First name of the user
|
|
||||||
* @param lastname Last name of the user
|
|
||||||
* @param emailAddress Email address of the user
|
|
||||||
*
|
|
||||||
* @returns {Object} Default user claims to be provided
|
|
||||||
*/
|
|
||||||
privateMethods.buildDefaultUserClaims = function (firstname, lastname, emailAddress) {
|
|
||||||
var defaultUserClaims = {
|
|
||||||
"http://wso2.org/claims/givenname": firstname,
|
|
||||||
"http://wso2.org/claims/lastname": lastname,
|
|
||||||
"http://wso2.org/claims/emailaddress": emailAddress
|
|
||||||
};
|
|
||||||
if (log.isDebugEnabled()) {
|
|
||||||
log.debug("ClaimMap created for new user : " + stringify(defaultUserClaims));
|
|
||||||
}
|
|
||||||
return defaultUserClaims;
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
@Deprecated
|
|
||||||
*/
|
|
||||||
/**
|
|
||||||
* Send an initial invitation email to a user with username/password attached
|
|
||||||
* for the very-first enrollment with WSO2 MDM.
|
|
||||||
*
|
|
||||||
* @param username Username of the user
|
|
||||||
* @param password Password of the user
|
|
||||||
*/
|
|
||||||
privateMethods.inviteUserToEnroll = function (username, password) {
|
|
||||||
var carbon = require('carbon');
|
|
||||||
var enrollmentURL = devicemgtProps.generalConfig.host + devicemgtProps.webAgentContext + "download-agent";
|
|
||||||
var carbonUser = session.get(constants.USER_SESSION_KEY);
|
|
||||||
var utility = require('/app/modules/utility.js').utility;
|
|
||||||
if (!carbonUser) {
|
|
||||||
log.error("User object was not found in the session");
|
|
||||||
throw constants.ERRORS.USER_NOT_FOUND;
|
|
||||||
}
|
|
||||||
//var user = userManagementService.getUser(username, carbonUser.tenantId);
|
|
||||||
try {
|
|
||||||
utility.startTenantFlow(carbonUser);
|
|
||||||
var tenantId = carbon.server.tenantId();
|
|
||||||
var userManager = new carbon.user.UserManager(server, tenantId);
|
|
||||||
var emailTo = [];
|
|
||||||
var user = userManager.getUser(username);
|
|
||||||
emailTo[0] = privateMethods.getEmail(username, userManager);
|
|
||||||
var emailMessageProperties = new EmailMessageProperties();
|
|
||||||
emailMessageProperties.setMailTo(emailTo);
|
|
||||||
emailMessageProperties.setFirstName(privateMethods.getFirstName(username, userManager));
|
|
||||||
emailMessageProperties.setUserName(username);
|
|
||||||
emailMessageProperties.setPassword(password);
|
|
||||||
emailMessageProperties.setEnrolmentUrl(enrollmentURL);
|
|
||||||
deviceManagementService.sendRegistrationEmail(emailMessageProperties);
|
|
||||||
} catch (e) {
|
|
||||||
throw e;
|
|
||||||
} finally {
|
|
||||||
utility.endTenantFlow();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
@Deprecated
|
|
||||||
*/
|
|
||||||
privateMethods.getEmail = function (username, userManager) {
|
|
||||||
return userManager.getClaim(username, "http://wso2.org/claims/emailaddress", null)
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
@Deprecated
|
|
||||||
*/
|
|
||||||
privateMethods.getFirstName = function (username, userManager) {
|
|
||||||
return userManager.getClaim(username, "http://wso2.org/claims/givenname", null)
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
@Deprecated
|
|
||||||
*/
|
|
||||||
privateMethods.getLastName = function (username, userManager) {
|
|
||||||
return userManager.getClaim(username, "http://wso2.org/claims/lastname", null)
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
@Deprecated
|
|
||||||
*/
|
|
||||||
publicMethods.inviteUser = function (username) {
|
|
||||||
var carbonUser = session.get(constants.USER_SESSION_KEY);
|
|
||||||
var utility = require('/app/modules/utility.js').utility;
|
|
||||||
if (!carbonUser) {
|
|
||||||
log.error("User object was not found in the session");
|
|
||||||
throw constants.ERRORS.USER_NOT_FOUND;
|
|
||||||
}
|
|
||||||
var enrollmentURL = devicemgtProps.generalConfig.host + devicemgtProps.webAgentContext + "download-agent";
|
|
||||||
|
|
||||||
try {
|
|
||||||
utility.startTenantFlow(carbonUser);
|
|
||||||
var tenantId = carbon.server.tenantId();
|
|
||||||
var userManager = new carbon.user.UserManager(server, tenantId);
|
|
||||||
var user = userManager.getUser(username);
|
|
||||||
var emailProperties = new EmailMessageProperties();
|
|
||||||
var emailTo = [];
|
|
||||||
emailTo[0] = privateMethods.getEmail(username, userManager);
|
|
||||||
emailProperties.setMailTo(emailTo);
|
|
||||||
//emailProperties.setFirstName(user.getFirstName());
|
|
||||||
emailProperties.setFirstName(privateMethods.getFirstName(username, userManager));
|
|
||||||
emailProperties.setEnrolmentUrl(enrollmentURL);
|
|
||||||
deviceManagementService.sendEnrolmentInvitation(emailProperties);
|
|
||||||
} catch (e) {
|
|
||||||
throw e;
|
|
||||||
} finally {
|
|
||||||
utility.endTenantFlow();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@Updated
|
@Updated
|
||||||
*/
|
*/
|
||||||
@ -382,9 +128,12 @@ var userModule = function () {
|
|||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
utility.startTenantFlow(carbonUser);
|
utility.startTenantFlow(carbonUser);
|
||||||
var url = devicemgtProps["httpsURL"] + constants.ADMIN_SERVICE_CONTEXT + "/users";
|
var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] + "/users?offset=0&limit=100";
|
||||||
return privateMethods.callBackend(url, constants.HTTP_GET);
|
var response = privateMethods.callBackend(url, constants["HTTP_GET"]);
|
||||||
|
if (response.status == "success") {
|
||||||
|
response.content = parse(response.content).users;
|
||||||
|
}
|
||||||
|
return response;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
throw e;
|
throw e;
|
||||||
} finally {
|
} finally {
|
||||||
@ -395,22 +144,16 @@ var userModule = function () {
|
|||||||
/**
|
/**
|
||||||
* Return a User object from the backend by calling the JAX-RS
|
* Return a User object from the backend by calling the JAX-RS
|
||||||
* @param username
|
* @param username
|
||||||
* @returns {
|
* @returns {object} a response object with status and content on success.
|
||||||
* 'status': 'success'|'error',
|
|
||||||
* 'content': {
|
|
||||||
"username": "abc",
|
|
||||||
"firstname": "abc",
|
|
||||||
"lastname": "efj",
|
|
||||||
"emailAddress": "abc@abc.com"
|
|
||||||
}
|
|
||||||
* }
|
|
||||||
*/
|
*/
|
||||||
publicMethods.getUser = function (username) {
|
publicMethods.getUser = function (username) {
|
||||||
var carbonUser = privateMethods.getCarbonUser();
|
var carbonUser = privateMethods.getCarbonUser();
|
||||||
try {
|
try {
|
||||||
utility.startTenantFlow(carbonUser);
|
utility.startTenantFlow(carbonUser);
|
||||||
var url = devicemgtProps["httpsURL"] + constants.ADMIN_SERVICE_CONTEXT + "/users/view?username=" + username;
|
var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] + "/users/" +
|
||||||
var response = privateMethods.callBackend(url, constants.HTTP_GET);
|
encodeURIComponent(username);
|
||||||
|
var response = privateMethods.callBackend(url, constants["HTTP_GET"]);
|
||||||
|
response["content"] = parse(response.content);
|
||||||
response["userDomain"] = carbonUser.domain;
|
response["userDomain"] = carbonUser.domain;
|
||||||
return response;
|
return response;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
@ -419,18 +162,19 @@ var userModule = function () {
|
|||||||
utility.endTenantFlow();
|
utility.endTenantFlow();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO: comment
|
* Returns a set of roles assigned to a particular user
|
||||||
* @param username
|
* @param username
|
||||||
* @returns {*}
|
* @returns {object} a response object with status and content on success.
|
||||||
*/
|
*/
|
||||||
publicMethods.getRolesByUsername = function (username) {
|
publicMethods.getRolesByUsername = function (username) {
|
||||||
var carbonUser = privateMethods.getCarbonUser();
|
var carbonUser = privateMethods.getCarbonUser();
|
||||||
try {
|
try {
|
||||||
utility.startTenantFlow(carbonUser);
|
utility.startTenantFlow(carbonUser);
|
||||||
var url = devicemgtProps["httpsURL"] + constants.ADMIN_SERVICE_CONTEXT + "/users/roles?username=" + username;
|
var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] + "/users/" +
|
||||||
var response = privateMethods.callBackend(url, constants.HTTP_GET);
|
encodeURIComponent(username) + "/roles";
|
||||||
return response;
|
return privateMethods.callBackend(url, constants["HTTP_GET"]);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
throw e;
|
throw e;
|
||||||
} finally {
|
} finally {
|
||||||
@ -450,8 +194,8 @@ var userModule = function () {
|
|||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
utility.startTenantFlow(carbonUser);
|
utility.startTenantFlow(carbonUser);
|
||||||
var url = devicemgtProps["httpsURL"] + constants.ADMIN_SERVICE_CONTEXT + "/users/users-by-username";
|
var url = devicemgtProps["httpsURL"] + "/mdm-admin/users/users-by-username";
|
||||||
return privateMethods.callBackend(url, constants.HTTP_GET)
|
return privateMethods.callBackend(url, constants["HTTP_GET"]);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
throw e;
|
throw e;
|
||||||
} finally {
|
} finally {
|
||||||
@ -467,15 +211,19 @@ var userModule = function () {
|
|||||||
*/
|
*/
|
||||||
publicMethods.getRoles = function () {
|
publicMethods.getRoles = function () {
|
||||||
var carbonUser = session.get(constants["USER_SESSION_KEY"]);
|
var carbonUser = session.get(constants["USER_SESSION_KEY"]);
|
||||||
var utility = require('/app/modules/utility.js')["utility"];
|
var utility = require("/app/modules/utility.js")["utility"];
|
||||||
if (!carbonUser) {
|
if (!carbonUser) {
|
||||||
log.error("User object was not found in the session");
|
log.error("User object was not found in the session");
|
||||||
throw constants["ERRORS"]["USER_NOT_FOUND"];
|
throw constants["ERRORS"]["USER_NOT_FOUND"];
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
utility.startTenantFlow(carbonUser);
|
utility.startTenantFlow(carbonUser);
|
||||||
var url = devicemgtProps["httpsURL"] + constants.ADMIN_SERVICE_CONTEXT + "/roles";
|
var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] + "/roles";
|
||||||
return privateMethods.callBackend(url, constants.HTTP_GET);
|
var response = privateMethods.callBackend(url, constants["HTTP_GET"]);
|
||||||
|
if (response.status == "success") {
|
||||||
|
response.content = parse(response.content).roles;
|
||||||
|
}
|
||||||
|
return response;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
throw e;
|
throw e;
|
||||||
} finally {
|
} finally {
|
||||||
@ -488,18 +236,24 @@ var userModule = function () {
|
|||||||
*/
|
*/
|
||||||
/**
|
/**
|
||||||
* Get User Roles from user store (Internal roles not included).
|
* Get User Roles from user store (Internal roles not included).
|
||||||
|
* @returns {object} a response object with status and content on success.
|
||||||
*/
|
*/
|
||||||
publicMethods.getRolesByUserStore = function (userStore) {
|
publicMethods.getRolesByUserStore = function () {
|
||||||
|
var ROLE_LIMIT = devicemgtProps["pageSize"];
|
||||||
var carbonUser = session.get(constants["USER_SESSION_KEY"]);
|
var carbonUser = session.get(constants["USER_SESSION_KEY"]);
|
||||||
var utility = require('/app/modules/utility.js')["utility"];
|
var utility = require("/app/modules/utility.js")["utility"];
|
||||||
if (!carbonUser) {
|
if (!carbonUser) {
|
||||||
log.error("User object was not found in the session");
|
log.error("User object was not found in the session");
|
||||||
throw constants["ERRORS"]["USER_NOT_FOUND"];
|
throw constants["ERRORS"]["USER_NOT_FOUND"];
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
utility.startTenantFlow(carbonUser);
|
utility.startTenantFlow(carbonUser);
|
||||||
var url = devicemgtProps["httpsURL"] + constants.ADMIN_SERVICE_CONTEXT + "/roles/" + encodeURIComponent(userStore);
|
var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] + "/roles?limit=" + ROLE_LIMIT;
|
||||||
return privateMethods.callBackend(url, constants.HTTP_GET);
|
var response = privateMethods.callBackend(url, constants["HTTP_GET"]);
|
||||||
|
if (response.status == "success") {
|
||||||
|
response.content = parse(response.content).roles;
|
||||||
|
}
|
||||||
|
return response;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
throw e;
|
throw e;
|
||||||
} finally {
|
} finally {
|
||||||
@ -510,40 +264,45 @@ var userModule = function () {
|
|||||||
/**
|
/**
|
||||||
* Get Platforms.
|
* Get Platforms.
|
||||||
*/
|
*/
|
||||||
|
//TODO Move this piece of logic out of user.js to somewhere else appropriate.
|
||||||
publicMethods.getPlatforms = function () {
|
publicMethods.getPlatforms = function () {
|
||||||
var carbonUser = session.get(constants["USER_SESSION_KEY"]);
|
var carbonUser = session.get(constants["USER_SESSION_KEY"]);
|
||||||
var utility = require('/app/modules/utility.js')["utility"];
|
var utility = require("/app/modules/utility.js")["utility"];
|
||||||
if (!carbonUser) {
|
if (!carbonUser) {
|
||||||
log.error("User object was not found in the session");
|
log.error("User object was not found in the session");
|
||||||
throw constants["ERRORS"]["USER_NOT_FOUND"];
|
throw constants["ERRORS"]["USER_NOT_FOUND"];
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
utility.startTenantFlow(carbonUser);
|
utility.startTenantFlow(carbonUser);
|
||||||
var url = devicemgtProps["httpsURL"] + constants.ADMIN_SERVICE_CONTEXT + "/devices/types";
|
var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] + "/admin/device-types";
|
||||||
return privateMethods.callBackend(url, constants.HTTP_GET);
|
var response = privateMethods.callBackend(url, constants["HTTP_GET"]);
|
||||||
|
if (response.status == "success") {
|
||||||
|
response.content = parse(response.content);
|
||||||
|
}
|
||||||
|
return response;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
throw e;
|
throw e;
|
||||||
} finally {
|
} finally {
|
||||||
utility.endTenantFlow();
|
utility.endTenantFlow();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
/*
|
|
||||||
@Updated
|
|
||||||
*/
|
|
||||||
/**
|
/**
|
||||||
* Get role
|
* Get role
|
||||||
*/
|
*/
|
||||||
publicMethods.getRole = function (roleName) {
|
publicMethods.getRole = function (roleName) {
|
||||||
var carbonUser = session.get(constants["USER_SESSION_KEY"]);
|
var carbonUser = session.get(constants["USER_SESSION_KEY"]);
|
||||||
var utility = require('/app/modules/utility.js')["utility"];
|
var utility = require("/app/modules/utility.js")["utility"];
|
||||||
if (!carbonUser) {
|
if (!carbonUser) {
|
||||||
log.error("User object was not found in the session");
|
log.error("User object was not found in the session");
|
||||||
throw constants["ERRORS"]["USER_NOT_FOUND"];
|
throw constants["ERRORS"]["USER_NOT_FOUND"];
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
utility.startTenantFlow(carbonUser);
|
utility.startTenantFlow(carbonUser);
|
||||||
var url = devicemgtProps["httpsURL"] + constants.ADMIN_SERVICE_CONTEXT + "/roles/role?rolename=" + encodeURIComponent(roleName);
|
var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] +
|
||||||
var response = privateMethods.callBackend(url, constants.HTTP_GET);
|
"/roles/" + encodeURIComponent(roleName);
|
||||||
|
var response = privateMethods.callBackend(url, constants["HTTP_GET"]);
|
||||||
|
response.content = parse(response.content);
|
||||||
return response;
|
return response;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
throw e;
|
throw e;
|
||||||
@ -687,30 +446,6 @@ var userModule = function () {
|
|||||||
return permissions;
|
return permissions;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* Add new role with permissions.
|
|
||||||
*
|
|
||||||
* @param roleName Name of the role
|
|
||||||
* @param users List of users to assign the role
|
|
||||||
* @param permissions List of permissions
|
|
||||||
*/
|
|
||||||
publicMethods.addRole = function (roleName, users, permissions) {
|
|
||||||
var carbon = require('carbon');
|
|
||||||
var tenantId = carbon.server.tenantId();
|
|
||||||
var url = carbon.server.address('https') + "/admin/services";
|
|
||||||
var server = new carbon.server.Server(url);
|
|
||||||
var userManager = new carbon.user.UserManager(server, tenantId);
|
|
||||||
try {
|
|
||||||
if (!userManager.roleExists(roleName)) {
|
|
||||||
userManager.addRole(roleName, users, permissions);
|
|
||||||
} else {
|
|
||||||
log.info("Role exist with name: " + roleName);
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
publicMethods.addPermissions = function (permissionList, path, init) {
|
publicMethods.addPermissions = function (permissionList, path, init) {
|
||||||
var registry, carbon = require("carbon");
|
var registry, carbon = require("carbon");
|
||||||
var carbonServer = application.get("carbonServer");
|
var carbonServer = application.get("carbonServer");
|
||||||
@ -776,24 +511,29 @@ var userModule = function () {
|
|||||||
* retrieve secondary user stores.
|
* retrieve secondary user stores.
|
||||||
* This needs Authentication since the method access admin services.
|
* This needs Authentication since the method access admin services.
|
||||||
*
|
*
|
||||||
* @returns {string array} Array of secondary user stores.
|
* @returns Array of secondary user stores.
|
||||||
*/
|
*/
|
||||||
publicMethods.getSecondaryUserStores = function () {
|
publicMethods.getSecondaryUserStores = function () {
|
||||||
var returnVal = [];
|
var returnVal = [];
|
||||||
var endpoint = devicemgtProps.adminService + constants.USER_STORE_CONFIG_ADMIN_SERVICE_END_POINT;
|
var endpoint = devicemgtProps["adminService"] + constants["USER_STORE_CONFIG_ADMIN_SERVICE_END_POINT"];
|
||||||
var wsPayload = "<xsd:getSecondaryRealmConfigurations xmlns:xsd='http://org.apache.axis2/xsd'/>";
|
var wsPayload = "<xsd:getSecondaryRealmConfigurations xmlns:xsd='http://org.apache.axis2/xsd'/>";
|
||||||
serviceInvokers.WS.soapRequest(
|
serviceInvokers.WS.soapRequest(
|
||||||
"urn:getSecondaryRealmConfigurations", endpoint, wsPayload, function (wsResponse) {
|
"urn:getSecondaryRealmConfigurations",
|
||||||
|
wsPayload,
|
||||||
|
endpoint,
|
||||||
|
function (wsResponse) {
|
||||||
var domainIDs = stringify(wsResponse.*::['return']. *::domainId.text());
|
var domainIDs = stringify(wsResponse.*::['return']. *::domainId.text());
|
||||||
if (domainIDs != "\"\"") {
|
if (domainIDs != "\"\"") {
|
||||||
var regExpForSearch = new RegExp(constants.USER_STORES_NOISY_CHAR, "g");
|
var regExpForSearch = new RegExp(constants["USER_STORES_NOISY_CHAR"], "g");
|
||||||
domainIDs = domainIDs.replace(regExpForSearch, "");
|
domainIDs = domainIDs.replace(regExpForSearch, "");
|
||||||
returnVal = domainIDs.split(constants.USER_STORES_SPLITTING_CHAR);
|
returnVal = domainIDs.split(constants["USER_STORES_SPLITTING_CHAR"]);
|
||||||
}
|
}
|
||||||
}, function (e) {
|
}, function (e) {
|
||||||
log.error("Error retrieving secondary user stores", e);
|
log.error("Error retrieving secondary user stores", e);
|
||||||
}, constants.SOAP_VERSION);
|
},
|
||||||
|
constants["SOAP_VERSION"]);
|
||||||
return returnVal;
|
return returnVal;
|
||||||
};
|
};
|
||||||
|
|
||||||
return publicMethods;
|
return publicMethods;
|
||||||
}();
|
}();
|
||||||
|
|||||||
@ -21,15 +21,16 @@ var util = function () {
|
|||||||
var module = {};
|
var module = {};
|
||||||
var Base64 = Packages.org.apache.commons.codec.binary.Base64;
|
var Base64 = Packages.org.apache.commons.codec.binary.Base64;
|
||||||
var String = Packages.java.lang.String;
|
var String = Packages.java.lang.String;
|
||||||
var devicemgtProps = require('/app/conf/devicemgt-props.js').config();
|
var devicemgtProps = require("/app/conf/reader/main.js")["conf"];
|
||||||
var carbon = require('carbon');
|
var carbon = require('carbon');
|
||||||
var constants = require("/app/modules/constants.js");
|
var constants = require("/app/modules/constants.js");
|
||||||
var adminUser = devicemgtProps["adminUser"];
|
var adminUser = devicemgtProps["adminUser"];
|
||||||
|
var clientName = devicemgtProps["clientName"];
|
||||||
|
|
||||||
module.getDyanmicCredentials = function (owner) {
|
module.getDyanmicCredentials = function (owner) {
|
||||||
var payload = {
|
var payload = {
|
||||||
"callbackUrl": devicemgtProps.callBackUrl,
|
"callbackUrl": devicemgtProps.callBackUrl,
|
||||||
"clientName": "devicemgt",
|
"clientName": clientName,
|
||||||
"tokenScope": "admin",
|
"tokenScope": "admin",
|
||||||
"owner": adminUser,
|
"owner": adminUser,
|
||||||
"applicationType": "webapp",
|
"applicationType": "webapp",
|
||||||
@ -79,7 +80,7 @@ var util = function () {
|
|||||||
*/
|
*/
|
||||||
module.getTokenWithPasswordGrantType = function (username, password, encodedClientKeys, scope) {
|
module.getTokenWithPasswordGrantType = function (username, password, encodedClientKeys, scope) {
|
||||||
var xhr = new XMLHttpRequest();
|
var xhr = new XMLHttpRequest();
|
||||||
var tokenEndpoint = devicemgtProps.idPServer + "/token";
|
var tokenEndpoint = devicemgtProps.idPServer;
|
||||||
xhr.open("POST", tokenEndpoint, false);
|
xhr.open("POST", tokenEndpoint, false);
|
||||||
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
|
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
|
||||||
xhr.setRequestHeader("Authorization", "Basic " + encodedClientKeys);
|
xhr.setRequestHeader("Authorization", "Basic " + encodedClientKeys);
|
||||||
@ -119,7 +120,7 @@ var util = function () {
|
|||||||
encodedExtractedAssertion = this.encode(extractedAssertion);
|
encodedExtractedAssertion = this.encode(extractedAssertion);
|
||||||
|
|
||||||
var xhr = new XMLHttpRequest();
|
var xhr = new XMLHttpRequest();
|
||||||
var tokenEndpoint = devicemgtProps.idPServer + "/token";
|
var tokenEndpoint = devicemgtProps.idPServer;
|
||||||
xhr.open("POST", tokenEndpoint, false);
|
xhr.open("POST", tokenEndpoint, false);
|
||||||
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
|
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
|
||||||
xhr.setRequestHeader("Authorization", "Basic " + clientKeys);
|
xhr.setRequestHeader("Authorization", "Basic " + clientKeys);
|
||||||
@ -140,7 +141,7 @@ var util = function () {
|
|||||||
|
|
||||||
module.refreshToken = function (tokenPair, clientData, scope) {
|
module.refreshToken = function (tokenPair, clientData, scope) {
|
||||||
var xhr = new XMLHttpRequest();
|
var xhr = new XMLHttpRequest();
|
||||||
var tokenEndpoint = devicemgtProps.idPServer + "/token";
|
var tokenEndpoint = devicemgtProps.idPServer;
|
||||||
xhr.open("POST", tokenEndpoint, false);
|
xhr.open("POST", tokenEndpoint, false);
|
||||||
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
|
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
|
||||||
xhr.setRequestHeader("Authorization", "Basic " + clientData);
|
xhr.setRequestHeader("Authorization", "Basic " + clientData);
|
||||||
|
|||||||
@ -20,7 +20,7 @@ var utility;
|
|||||||
utility = function () {
|
utility = function () {
|
||||||
|
|
||||||
var constants = require('/app/modules/constants.js');
|
var constants = require('/app/modules/constants.js');
|
||||||
var devicemgtProps = require('/app/conf/devicemgt-props.js').config();
|
var devicemgtProps = require("/app/conf/reader/main.js")["conf"];
|
||||||
var log = new Log("/app/modules/utility.js");
|
var log = new Log("/app/modules/utility.js");
|
||||||
var JavaClass = Packages.java.lang.Class;
|
var JavaClass = Packages.java.lang.Class;
|
||||||
var PrivilegedCarbonContext = Packages.org.wso2.carbon.context.PrivilegedCarbonContext;
|
var PrivilegedCarbonContext = Packages.org.wso2.carbon.context.PrivilegedCarbonContext;
|
||||||
|
|||||||
@ -21,7 +21,7 @@ function onRequest(context) {
|
|||||||
var user = session.get(constants.USER_SESSION_KEY);
|
var user = session.get(constants.USER_SESSION_KEY);
|
||||||
var userModule = require("/app/modules/user.js").userModule;
|
var userModule = require("/app/modules/user.js").userModule;
|
||||||
var permissions = userModule.getUIPermissions();
|
var permissions = userModule.getUIPermissions();
|
||||||
var devicemgtProps = require('/app/conf/devicemgt-props.js').config();
|
var devicemgtProps = require("/app/conf/reader/main.js")["conf"];
|
||||||
|
|
||||||
if (!permissions.VIEW_DASHBOARD) {
|
if (!permissions.VIEW_DASHBOARD) {
|
||||||
response.sendRedirect(constants.WEB_APP_CONTEXT + "/devices");
|
response.sendRedirect(constants.WEB_APP_CONTEXT + "/devices");
|
||||||
|
|||||||
@ -23,7 +23,7 @@
|
|||||||
* @returns {*} A context object that returns the dynamic state of this page to be presented
|
* @returns {*} A context object that returns the dynamic state of this page to be presented
|
||||||
*/
|
*/
|
||||||
function onRequest(context) {
|
function onRequest(context) {
|
||||||
var devicemgtProps = require('/app/conf/devicemgt-props.js').config();
|
var devicemgtProps = require("/app/conf/reader/main.js")["conf"];
|
||||||
var page = {};
|
var page = {};
|
||||||
page["groupNameJSRegEx"] = devicemgtProps.groupValidationConfig.groupNameJSRegEx;
|
page["groupNameJSRegEx"] = devicemgtProps.groupValidationConfig.groupNameJSRegEx;
|
||||||
page["groupNameRegExViolationErrorMsg"] = devicemgtProps.groupValidationConfig.groupNameRegExViolationErrorMsg;
|
page["groupNameRegExViolationErrorMsg"] = devicemgtProps.groupValidationConfig.groupNameRegExViolationErrorMsg;
|
||||||
|
|||||||
@ -15,7 +15,7 @@
|
|||||||
specific language governing permissions and limitations
|
specific language governing permissions and limitations
|
||||||
under the License.
|
under the License.
|
||||||
}}
|
}}
|
||||||
{{unit "cdmf.unit.ui.title" pageTitle="User Management"}}
|
{{unit "cdmf.unit.ui.title" pageTitle="User Management | Add User"}}
|
||||||
|
|
||||||
{{#zone "breadcrumbs"}}
|
{{#zone "breadcrumbs"}}
|
||||||
<li>
|
<li>
|
||||||
@ -50,8 +50,8 @@
|
|||||||
<div id="user-create-error-msg" class="alert alert-danger hidden" role="alert">
|
<div id="user-create-error-msg" class="alert alert-danger hidden" role="alert">
|
||||||
<i class="icon fw fw-error"></i><span></span>
|
<i class="icon fw fw-error"></i><span></span>
|
||||||
</div>
|
</div>
|
||||||
<label class="wr-input-label" title="List of available secondary user stores">
|
<label class="wr-input-label" title="Select the domain of the user store from the drop-down given below. The domain of the default user store is PRIMARY">
|
||||||
User Stores
|
User Store Domain
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
</label>
|
</label>
|
||||||
<div class="wr-input-control">
|
<div class="wr-input-control">
|
||||||
@ -96,12 +96,10 @@
|
|||||||
<div id="emailField" class=" form-group wr-input-control">
|
<div id="emailField" class=" form-group wr-input-control">
|
||||||
<input type="email" id="emailAddress" class="form-control"/>
|
<input type="email" id="emailAddress" class="form-control"/>
|
||||||
<span class="glyphicon glyphicon-remove form-control-feedback hidden emailError"></span>
|
<span class="glyphicon glyphicon-remove form-control-feedback hidden emailError"></span>
|
||||||
<label class=" hidden error email-required" for="summary">This field is
|
<label class=" hidden error email-required" for="summary">This field is required.</label>
|
||||||
required.</label>
|
|
||||||
<label class=" hidden error email-invalid" for="summary">Invalid Email Address.</label>
|
<label class=" hidden error email-invalid" for="summary">Invalid Email Address.</label>
|
||||||
</div>
|
</div>
|
||||||
<label class="wr-input-label"
|
<label class="wr-input-label" title="Optional field that can have 0-to-many roles for the user">
|
||||||
title="Optional field that can have 0-to-many roles for the user">
|
|
||||||
User Roles
|
User Roles
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
</label>
|
</label>
|
||||||
@ -123,7 +121,6 @@
|
|||||||
<p class="page-sub-title">User was added successfully.</p>
|
<p class="page-sub-title">User was added successfully.</p>
|
||||||
<br>
|
<br>
|
||||||
An invitation mail will be sent to this user to initiate device enrollment.
|
An invitation mail will be sent to this user to initiate device enrollment.
|
||||||
|
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
<div class="qr-code col-lg-5 col-md-6 col-centered"></div>
|
<div class="qr-code col-lg-5 col-md-6 col-centered"></div>
|
||||||
@ -132,8 +129,7 @@
|
|||||||
<br>Please click <b>"Add Another User"</b>, if you wish to add another user or click
|
<br>Please click <b>"Add Another User"</b>, if you wish to add another user or click
|
||||||
<b>"View User List"</b> to complete the process and go back to the user list.
|
<b>"View User List"</b> to complete the process and go back to the user list.
|
||||||
<hr/>
|
<hr/>
|
||||||
<button class="wr-btn" onclick="window.location.href='{{@app.context}}/users'">View User List
|
<button class="wr-btn" onclick="window.location.href='{{@app.context}}/users'">View User List</button>
|
||||||
</button>
|
|
||||||
<a href="{{@app.context}}/user/add" class="cu-btn-inner">
|
<a href="{{@app.context}}/user/add" class="cu-btn-inner">
|
||||||
<span class="fw-stack">
|
<span class="fw-stack">
|
||||||
<i class="fw fw-ring fw-stack-2x"></i>
|
<i class="fw fw-ring fw-stack-2x"></i>
|
||||||
|
|||||||
@ -23,20 +23,24 @@
|
|||||||
* @returns {*} A context object that returns the dynamic state of this page to be presented
|
* @returns {*} A context object that returns the dynamic state of this page to be presented
|
||||||
*/
|
*/
|
||||||
function onRequest(context) {
|
function onRequest(context) {
|
||||||
|
//var log = new Log("/app/pages/cdmf.page.user.create server-side js");
|
||||||
|
|
||||||
var userModule = require("/app/modules/user.js")["userModule"];
|
var userModule = require("/app/modules/user.js")["userModule"];
|
||||||
var response = userModule.getRolesByUserStore("PRIMARY");
|
var devicemgtProps = require("/app/conf/reader/main.js")["conf"];
|
||||||
var devicemgtProps = require('/app/conf/devicemgt-props.js').config();
|
|
||||||
var page = {};
|
var page = {};
|
||||||
page["charLimit"] = devicemgtProps.usernameLength;
|
var response = userModule.getRolesByUserStore();
|
||||||
if (response["status"] == "success") {
|
if (response["status"] == "success") {
|
||||||
page["roles"] = response["content"];
|
page["roles"] = response["content"];
|
||||||
}
|
}
|
||||||
page["usernameJSRegEx"] = devicemgtProps.userValidationConfig.usernameJSRegEx;
|
page["charLimit"] = devicemgtProps["usernameLength"];
|
||||||
page["usernameHelpMsg"] = devicemgtProps.userValidationConfig.usernameHelpMsg;
|
page["usernameJSRegEx"] = devicemgtProps["userValidationConfig"]["usernameJSRegEx"];
|
||||||
page["usernameRegExViolationErrorMsg"] = devicemgtProps.userValidationConfig.usernameRegExViolationErrorMsg;
|
page["usernameHelpMsg"] = devicemgtProps["userValidationConfig"]["usernameHelpMsg"];
|
||||||
page["firstnameJSRegEx"] = devicemgtProps.userValidationConfig.firstnameJSRegEx;
|
page["usernameRegExViolationErrorMsg"] = devicemgtProps["userValidationConfig"]["usernameRegExViolationErrorMsg"];
|
||||||
page["firstnameRegExViolationErrorMsg"] = devicemgtProps.userValidationConfig.firstnameRegExViolationErrorMsg;
|
page["firstnameJSRegEx"] = devicemgtProps["userValidationConfig"]["firstnameJSRegEx"];
|
||||||
page["lastnameJSRegEx"] = devicemgtProps.userValidationConfig.lastnameJSRegEx;
|
page["firstnameRegExViolationErrorMsg"] = devicemgtProps["userValidationConfig"]["firstnameRegExViolationErrorMsg"];
|
||||||
page["lastnameRegExViolationErrorMsg"] = devicemgtProps.userValidationConfig.lastnameRegExViolationErrorMsg;
|
page["lastnameJSRegEx"] = devicemgtProps["userValidationConfig"]["lastnameJSRegEx"];
|
||||||
|
page["lastnameRegExViolationErrorMsg"] = devicemgtProps["userValidationConfig"]["lastnameRegExViolationErrorMsg"];
|
||||||
|
|
||||||
return page;
|
return page;
|
||||||
}
|
}
|
||||||
@ -10,8 +10,8 @@
|
|||||||
*
|
*
|
||||||
* Unless required by applicable law or agreed to in writing,
|
* Unless required by applicable law or agreed to in writing,
|
||||||
* software distributed under the License is distributed on an
|
* software distributed under the License is distributed on an
|
||||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
|
||||||
* KIND, either express or implied. See the License for the
|
* either express or implied. See the License for the
|
||||||
* specific language governing permissions and limitations
|
* specific language governing permissions and limitations
|
||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
@ -30,6 +30,7 @@ function inputIsValid(regExp, inputString) {
|
|||||||
|
|
||||||
var validateInline = {};
|
var validateInline = {};
|
||||||
var clearInline = {};
|
var clearInline = {};
|
||||||
|
var deviceMgtAPIsBasePath = "/api/device-mgt/v1.0";
|
||||||
|
|
||||||
var enableInlineError = function (inputField, errorMsg, errorSign) {
|
var enableInlineError = function (inputField, errorMsg, errorSign) {
|
||||||
var fieldIdentifier = "#" + inputField;
|
var fieldIdentifier = "#" + inputField;
|
||||||
@ -160,16 +161,16 @@ function emailIsValid(email) {
|
|||||||
return regExp.test(email);
|
return regExp.test(email);
|
||||||
}
|
}
|
||||||
|
|
||||||
$("#userStore")
|
$("#userStore").change(
|
||||||
.change(function () {
|
function () {
|
||||||
var str = "";
|
var str = "";
|
||||||
$("select option:selected").each(function () {
|
$("select option:selected").each(function () {
|
||||||
str += $(this).text() + " ";
|
str += $(this).text() + " ";
|
||||||
});
|
});
|
||||||
var addUserAPI = "/devicemgt_admin/roles/" + str;
|
var getRolesAPI = deviceMgtAPIsBasePath + "/roles/"+ str;
|
||||||
|
|
||||||
invokerUtil.get(
|
invokerUtil.get(
|
||||||
addUserAPI,
|
getRolesAPI,
|
||||||
function (data) {
|
function (data) {
|
||||||
data = JSON.parse(data);
|
data = JSON.parse(data);
|
||||||
if (data.errorMessage) {
|
if (data.errorMessage) {
|
||||||
@ -182,9 +183,13 @@ $("#userStore")
|
|||||||
$('#roles').append(newOption);
|
$('#roles').append(newOption);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
function (jqXHR) {
|
||||||
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}).change();
|
}
|
||||||
|
).change();
|
||||||
|
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
$("#emailValidationText").hide();
|
$("#emailValidationText").hide();
|
||||||
@ -202,7 +207,7 @@ $(document).ready(function () {
|
|||||||
var usernameInput = $("input#username");
|
var usernameInput = $("input#username");
|
||||||
var firstnameInput = $("input#firstname");
|
var firstnameInput = $("input#firstname");
|
||||||
var lastnameInput = $("input#lastname");
|
var lastnameInput = $("input#lastname");
|
||||||
var charLimit = parseInt($("input#username").attr("limit"));
|
//var charLimit = parseInt($("input#username").attr("limit"));
|
||||||
var domain = $("#userStore").val();
|
var domain = $("#userStore").val();
|
||||||
var username = usernameInput.val().trim();
|
var username = usernameInput.val().trim();
|
||||||
var firstname = firstnameInput.val();
|
var firstname = firstnameInput.val();
|
||||||
@ -244,17 +249,13 @@ $(document).ready(function () {
|
|||||||
addUserFormData.emailAddress = emailAddress;
|
addUserFormData.emailAddress = emailAddress;
|
||||||
addUserFormData.roles = roles;
|
addUserFormData.roles = roles;
|
||||||
|
|
||||||
var addUserAPI = "/devicemgt_admin/users";
|
var addUserAPI = deviceMgtAPIsBasePath + "/users";
|
||||||
|
|
||||||
invokerUtil.post(
|
invokerUtil.post(
|
||||||
addUserAPI,
|
addUserAPI,
|
||||||
addUserFormData,
|
addUserFormData,
|
||||||
function (data) {
|
function (data, textStatus, jqXHR) {
|
||||||
data = JSON.parse(data);
|
if (jqXHR.status == 201) {
|
||||||
if (data.errorMessage) {
|
|
||||||
$(errorMsg).text("Selected user store prompted an error : " + data.errorMessage);
|
|
||||||
$(errorMsgWrapper).removeClass("hidden");
|
|
||||||
} else if (data["statusCode"] == 201) {
|
|
||||||
// Clearing user input fields.
|
// Clearing user input fields.
|
||||||
$("input#username").val("");
|
$("input#username").val("");
|
||||||
$("input#firstname").val("");
|
$("input#firstname").val("");
|
||||||
@ -264,21 +265,17 @@ $(document).ready(function () {
|
|||||||
// Refreshing with success message
|
// Refreshing with success message
|
||||||
$("#user-create-form").addClass("hidden");
|
$("#user-create-form").addClass("hidden");
|
||||||
$("#user-created-msg").removeClass("hidden");
|
$("#user-created-msg").removeClass("hidden");
|
||||||
} else if (data["statusCode"] == 409) {
|
generateQRCode("#user-created-msg .qr-code");
|
||||||
$(errorMsg).text(data["messageFromServer"]);
|
|
||||||
$(errorMsgWrapper).removeClass("hidden");
|
|
||||||
} else if (data["statusCode"] == 500) {
|
|
||||||
$(errorMsg).text("An unexpected error occurred at backend server. Please try again later.");
|
|
||||||
$(errorMsgWrapper).removeClass("hidden");
|
|
||||||
}
|
}
|
||||||
}, function (data) {
|
}, function (data) {
|
||||||
data = JSON.parse(data.responseText);
|
var payload = JSON.parse(data.responseText);
|
||||||
if (data["statusCode"] == 409) {
|
if (data.status == 409) {
|
||||||
$(errorMsg).text("User : " + username + " already exists. Pick another username.");
|
$(errorMsg).text("User : " + username + " already exists. Pick another username.");
|
||||||
} else if (data["statusCode"] == 500) {
|
} else if (data.status == 500) {
|
||||||
$(errorMsg).text("An unexpected error occurred at backend server. Please try again later.");
|
$(errorMsg).text("An unexpected error occurred at backend server. Please try again later.");
|
||||||
} else {
|
} else {
|
||||||
$(errorMsg).text(data.errorMessage);
|
$(errorMsg).text(payload.message);
|
||||||
}
|
}
|
||||||
$(errorMsgWrapper).removeClass("hidden");
|
$(errorMsgWrapper).removeClass("hidden");
|
||||||
}
|
}
|
||||||
|
|||||||
@ -20,7 +20,7 @@ function onRequest(context) {
|
|||||||
var userModule = require("/app/modules/user.js").userModule;
|
var userModule = require("/app/modules/user.js").userModule;
|
||||||
var userName = request.getParameter("username");
|
var userName = request.getParameter("username");
|
||||||
var user = userModule.getUser(userName)["content"];
|
var user = userModule.getUser(userName)["content"];
|
||||||
var devicemgtProps = require('/app/conf/devicemgt-props.js').config();
|
var devicemgtProps = require("/app/conf/reader/main.js")["conf"];
|
||||||
if (user) {
|
if (user) {
|
||||||
var title;
|
var title;
|
||||||
if (user.firstname || user.lastname) {
|
if (user.firstname || user.lastname) {
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
*
|
*
|
||||||
* WSO2 Inc. licenses this file to you under the Apache License,
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
@ -10,12 +10,14 @@
|
|||||||
*
|
*
|
||||||
* Unless required by applicable law or agreed to in writing,
|
* Unless required by applicable law or agreed to in writing,
|
||||||
* software distributed under the License is distributed on an
|
* software distributed under the License is distributed on an
|
||||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
|
||||||
* KIND, either express or implied. See the License for the
|
* either express or implied. See the License for the
|
||||||
* specific language governing permissions and limitations
|
* specific language governing permissions and limitations
|
||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
var deviceMgtAPIsBasePath = "/api/device-mgt/v1.0";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if provided input is valid against RegEx input.
|
* Checks if provided input is valid against RegEx input.
|
||||||
*
|
*
|
||||||
@ -36,7 +38,7 @@ $(function () {
|
|||||||
var sortableElem = '.wr-sortable';
|
var sortableElem = '.wr-sortable';
|
||||||
$(sortableElem).sortable({
|
$(sortableElem).sortable({
|
||||||
beforeStop: function () {
|
beforeStop: function () {
|
||||||
var sortedIDs = $(this).sortable('toArray');
|
$(this).sortable('toArray');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
$(sortableElem).disableSelection();
|
$(sortableElem).disableSelection();
|
||||||
@ -46,11 +48,9 @@ var modalPopup = ".wr-modalpopup";
|
|||||||
var modalPopupContainer = modalPopup + " .modalpopup-container";
|
var modalPopupContainer = modalPopup + " .modalpopup-container";
|
||||||
var modalPopupContent = modalPopup + " .modalpopup-content";
|
var modalPopupContent = modalPopup + " .modalpopup-content";
|
||||||
var body = "body";
|
var body = "body";
|
||||||
var isInit = true;
|
//var isInit = true;
|
||||||
$(".icon .text").res_text(0.2);
|
$(".icon .text").res_text(0.2);
|
||||||
|
|
||||||
var resetPasswordServiceURL = "/devicemgt_admin/users/reset-password";
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* set popup maximum height function.
|
* set popup maximum height function.
|
||||||
*/
|
*/
|
||||||
@ -80,11 +80,9 @@ function hidePopup() {
|
|||||||
*/
|
*/
|
||||||
function getSelectedUsernames() {
|
function getSelectedUsernames() {
|
||||||
var usernameList = [];
|
var usernameList = [];
|
||||||
var userList = $("#user-grid").find('> tbody > tr');
|
var userList = $("#user-grid").find('tr.DTTT_selected');
|
||||||
userList.each(function () {
|
userList.each(function () {
|
||||||
if ($(this).hasClass('DTTT_selected')) {
|
usernameList.push($(this).data('username'));
|
||||||
usernameList.push($(this).attr('data-username'));
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
return usernameList;
|
return usernameList;
|
||||||
}
|
}
|
||||||
@ -96,7 +94,7 @@ function getSelectedUsernames() {
|
|||||||
*/
|
*/
|
||||||
$("a.invite-user-link").click(function () {
|
$("a.invite-user-link").click(function () {
|
||||||
var usernameList = getSelectedUsernames();
|
var usernameList = getSelectedUsernames();
|
||||||
var inviteUserAPI = "/devicemgt_admin/users/email-invitation";
|
var inviteUserAPI = deviceMgtAPIsBasePath + "/users/send-invitation";
|
||||||
|
|
||||||
if (usernameList.length == 0) {
|
if (usernameList.length == 0) {
|
||||||
$(modalPopupContent).html($("#errorUsers").html());
|
$(modalPopupContent).html($("#errorUsers").html());
|
||||||
@ -110,13 +108,18 @@ $("a.invite-user-link").click(function () {
|
|||||||
invokerUtil.post(
|
invokerUtil.post(
|
||||||
inviteUserAPI,
|
inviteUserAPI,
|
||||||
usernameList,
|
usernameList,
|
||||||
function () {
|
// success callback
|
||||||
|
function (data, textStatus, jqXHR) {
|
||||||
|
if (jqXHR.status == 200) {
|
||||||
$(modalPopupContent).html($('#invite-user-success-content').html());
|
$(modalPopupContent).html($('#invite-user-success-content').html());
|
||||||
$("a#invite-user-success-link").click(function () {
|
$("a#invite-user-success-link").click(function () {
|
||||||
hidePopup();
|
hidePopup();
|
||||||
});
|
});
|
||||||
|
}
|
||||||
},
|
},
|
||||||
function () {
|
// error callback
|
||||||
|
function (jqXHR) {
|
||||||
|
console.log("error in invite-user API, status code: " + jqXHR.status);
|
||||||
$(modalPopupContent).html($('#invite-user-error-content').html());
|
$(modalPopupContent).html($('#invite-user-error-content').html());
|
||||||
$("a#invite-user-error-link").click(function () {
|
$("a#invite-user-error-link").click(function () {
|
||||||
hidePopup();
|
hidePopup();
|
||||||
@ -135,29 +138,28 @@ $("a.invite-user-link").click(function () {
|
|||||||
* when a user clicks on "Remove" link
|
* when a user clicks on "Remove" link
|
||||||
* on User Listing page in WSO2 Devicemgt Console.
|
* on User Listing page in WSO2 Devicemgt Console.
|
||||||
*/
|
*/
|
||||||
function removeUser(uname, uid) {
|
function removeUser(username) {
|
||||||
var username = uname;
|
var removeUserAPI = deviceMgtAPIsBasePath + "/users/" + username;
|
||||||
var userid = uid;
|
|
||||||
var removeUserAPI = "/devicemgt_admin/users?username=" + username;
|
|
||||||
$(modalPopupContent).html($('#remove-user-modal-content').html());
|
$(modalPopupContent).html($('#remove-user-modal-content').html());
|
||||||
showPopup();
|
showPopup();
|
||||||
|
|
||||||
$("a#remove-user-yes-link").click(function () {
|
$("a#remove-user-yes-link").click(function () {
|
||||||
invokerUtil.delete(
|
invokerUtil.delete(
|
||||||
removeUserAPI,
|
removeUserAPI,
|
||||||
function () {
|
// success callback
|
||||||
$("#" + userid).remove();
|
function (data, textStatus, jqXHR) {
|
||||||
// get new user-list-count
|
if (jqXHR.status == 200) {
|
||||||
var newUserListCount = $(".user-list > span").length;
|
|
||||||
// update user-listing-status-msg with new user-count
|
|
||||||
$("#user-listing-status-msg").text("Total number of Users found : " + newUserListCount);
|
|
||||||
// update modal-content with success message
|
// update modal-content with success message
|
||||||
$(modalPopupContent).html($('#remove-user-success-content').html());
|
$(modalPopupContent).html($('#remove-user-success-content').html());
|
||||||
$("a#remove-user-success-link").click(function () {
|
$("a#remove-user-success-link").click(function () {
|
||||||
hidePopup();
|
hidePopup();
|
||||||
|
location.reload();
|
||||||
});
|
});
|
||||||
|
}
|
||||||
},
|
},
|
||||||
function () {
|
// error callback
|
||||||
|
function (jqXHR) {
|
||||||
|
console.log("error in remove-user API, status code: " + jqXHR.status);
|
||||||
$(modalPopupContent).html($('#remove-user-error-content').html());
|
$(modalPopupContent).html($('#remove-user-error-content').html());
|
||||||
$("a#remove-user-error-link").click(function () {
|
$("a#remove-user-error-link").click(function () {
|
||||||
hidePopup();
|
hidePopup();
|
||||||
@ -202,28 +204,29 @@ function resetPassword(uname) {
|
|||||||
$(errorMsgWrapper).removeClass("hidden");
|
$(errorMsgWrapper).removeClass("hidden");
|
||||||
} else {
|
} else {
|
||||||
var resetPasswordFormData = {};
|
var resetPasswordFormData = {};
|
||||||
resetPasswordFormData.username = user;
|
//resetPasswordFormData.username = user;
|
||||||
resetPasswordFormData.newPassword = window.btoa(unescape(encodeURIComponent(confirmedPassword)));
|
resetPasswordFormData.newPassword = unescape(confirmedPassword);
|
||||||
|
|
||||||
|
var resetPasswordServiceURL = deviceMgtAPIsBasePath + "/admin/users/"+ user +"/credentials";
|
||||||
|
|
||||||
invokerUtil.post(
|
invokerUtil.post(
|
||||||
resetPasswordServiceURL,
|
resetPasswordServiceURL,
|
||||||
resetPasswordFormData,
|
resetPasswordFormData,
|
||||||
function (data) { // The success callback
|
// success callback
|
||||||
data = JSON.parse(data);
|
function (data, textStatus, jqXHR) {
|
||||||
if (data.statusCode == 201) {
|
if (jqXHR.status == 200) {
|
||||||
$(modalPopupContent).html($('#reset-password-success-content').html());
|
$(modalPopupContent).html($('#reset-password-success-content').html());
|
||||||
$("a#reset-password-success-link").click(function () {
|
$("a#reset-password-success-link").click(function () {
|
||||||
hidePopup();
|
hidePopup();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}, function (data) { // The error callback
|
},
|
||||||
if (data.statusCode == 400) {
|
// error callback
|
||||||
$(errorMsg).text("Old password does not match with the provided value.");
|
function (jqXHR) {
|
||||||
|
console.log("error in reset-password API, status code: " + jqXHR.status);
|
||||||
|
var payload = JSON.parse(jqXHR.responseText);
|
||||||
|
$(errorMsg).text(payload.message);
|
||||||
$(errorMsgWrapper).removeClass("hidden");
|
$(errorMsgWrapper).removeClass("hidden");
|
||||||
} else {
|
|
||||||
$(errorMsg).text("An unexpected error occurred. Please try again later.");
|
|
||||||
$(errorMsgWrapper).removeClass("hidden");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -250,7 +253,7 @@ $("#search-btn").click(function () {
|
|||||||
* when a user clicks on the list item
|
* when a user clicks on the list item
|
||||||
* initial mode and with out select mode.
|
* initial mode and with out select mode.
|
||||||
*/
|
*/
|
||||||
function InitiateViewOption() {
|
function initiateViewOption() {
|
||||||
if ($("#can-view").val()) {
|
if ($("#can-view").val()) {
|
||||||
$(location).attr('href', $(this).data("url"));
|
$(location).attr('href', $(this).data("url"));
|
||||||
} else {
|
} else {
|
||||||
@ -259,73 +262,137 @@ function InitiateViewOption() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadUsers(searchParam) {
|
function loadUsers() {
|
||||||
$("#loading-content").show();
|
var loadingContentIcon = "#loading-content";
|
||||||
var userListing = $("#user-listing");
|
$(loadingContentIcon).show();
|
||||||
var userListingSrc = userListing.attr("src");
|
|
||||||
$.template("user-listing", userListingSrc, function (template) {
|
var dataFilter = function (data) {
|
||||||
var serviceURL = "/devicemgt_admin/users";
|
|
||||||
if (searchParam) {
|
|
||||||
serviceURL = serviceURL + "/view-users?username=" + searchParam;
|
|
||||||
}
|
|
||||||
var successCallback = function (data) {
|
|
||||||
if (!data) {
|
|
||||||
$('#ast-container').addClass('hidden');
|
|
||||||
$('#user-listing-status-msg').text('No users are available to be displayed.');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var canRemove = $("#can-remove").val();
|
|
||||||
var canEdit = $("#can-edit").val();
|
|
||||||
var canResetPassword = $("#can-reset-password").val();
|
|
||||||
data = JSON.parse(data);
|
data = JSON.parse(data);
|
||||||
data = data.responseContent;
|
|
||||||
var viewModel = {};
|
var objects = [];
|
||||||
viewModel.users = data;
|
|
||||||
for (var i = 0; i < viewModel.users.length; i++) {
|
$(data.users).each(
|
||||||
viewModel.users[i].userid = viewModel.users[i].username.replace(/[^\w\s]/gi, '');
|
function (index) {
|
||||||
if (canRemove) {
|
objects.push(
|
||||||
viewModel.users[i].canRemove = true;
|
{
|
||||||
|
username: data.users[index].username,
|
||||||
|
firstname: data.users[index].firstname ? data.users[index].firstname: '' ,
|
||||||
|
lastname: data.users[index].lastname ? data.users[index].lastname : '',
|
||||||
|
emailAddress : data.users[index].emailAddress ? data.users[index].emailAddress: '',
|
||||||
|
DT_RowId : "user-" + data.users[index].username
|
||||||
}
|
}
|
||||||
if (canEdit) {
|
)
|
||||||
viewModel.users[i].canEdit = true;
|
|
||||||
}
|
|
||||||
if (canResetPassword) {
|
|
||||||
viewModel.users[i].canResetPassword = true;
|
|
||||||
}
|
|
||||||
viewModel.users[i].adminUser = $("#user-table").data("user");
|
|
||||||
}
|
|
||||||
if (data.length > 0) {
|
|
||||||
$('#ast-container').removeClass('hidden');
|
|
||||||
$('#user-listing-status-msg').text("");
|
|
||||||
var content = template(viewModel);
|
|
||||||
$("#ast-container").html(content);
|
|
||||||
} else {
|
|
||||||
$('#ast-container').addClass('hidden');
|
|
||||||
$('#user-listing-status-msg').text('No users are available to be displayed.');
|
|
||||||
}
|
|
||||||
$("#loading-content").hide();
|
|
||||||
if (isInit) {
|
|
||||||
$('#user-grid').datatables_extended();
|
|
||||||
isInit = false;
|
|
||||||
}
|
|
||||||
$(".icon .text").res_text(0.2);
|
|
||||||
};
|
|
||||||
invokerUtil.get(serviceURL,
|
|
||||||
successCallback,
|
|
||||||
function (message) {
|
|
||||||
$('#ast-container').addClass('hidden');
|
|
||||||
$('#user-listing-status-msg').text('Invalid search query. Try again with a valid search query');
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
});
|
|
||||||
|
var json = {
|
||||||
|
"recordsTotal": data.count,
|
||||||
|
"recordsFiltered": data.count,
|
||||||
|
"data": objects
|
||||||
|
};
|
||||||
|
|
||||||
|
return JSON.stringify(json);
|
||||||
|
};
|
||||||
|
|
||||||
|
var fnCreatedRow = function(nRow, aData, iDataIndex) {
|
||||||
|
console.log(JSON.stringify(aData));
|
||||||
|
$(nRow).attr('data-type', 'selectable');
|
||||||
|
$(nRow).attr('data-username', aData["username"]);
|
||||||
|
};
|
||||||
|
|
||||||
|
var columns = [
|
||||||
|
{
|
||||||
|
class: "remove-padding icon-only content-fill",
|
||||||
|
data: null,
|
||||||
|
defaultContent:
|
||||||
|
'<div class="thumbnail icon">' +
|
||||||
|
'<i class="square-element text fw fw-user" style="font-size: 30px;"></i>' +
|
||||||
|
'</div>'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
class: "fade-edge",
|
||||||
|
data: null,
|
||||||
|
render: function (data, type, row, meta) {
|
||||||
|
return '<h4>' + data.firstname + ' ' + data.lastname + '</h4>';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
class: "fade-edge remove-padding-top",
|
||||||
|
data: null,
|
||||||
|
render: function (data, type, row, meta) {
|
||||||
|
return '<i class="fw-user"></i> ' + data.username;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
class: "fade-edge remove-padding-top",
|
||||||
|
data: null,
|
||||||
|
render: function (data, type, row, meta) {
|
||||||
|
return '<a href="mailto:' + data.emailAddress + ' " class="wr-list-email"><i class="fw-mail"></i> ' +
|
||||||
|
data.emailAddress + ' </a>';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
class: "text-right content-fill text-left-on-grid-view no-wrap",
|
||||||
|
data: null,
|
||||||
|
render: function (data, type, row, meta) {
|
||||||
|
return '<a href="/emm/users/edit-user?username=' + data.username + '" ' +
|
||||||
|
'data-username="' + data.username + '" ' +
|
||||||
|
'data-click-event="edit-form" ' +
|
||||||
|
'class="btn padding-reduce-on-grid-view edit-user-link">' +
|
||||||
|
'<span class="fw-stack">' +
|
||||||
|
'<i class="fw fw-ring 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>' +
|
||||||
|
'<a href="#" ' +
|
||||||
|
'data-username="' + data.username + '" ' +
|
||||||
|
'data-user-id="' + data.username + '" ' +
|
||||||
|
'data-click-event="edit-form" ' +
|
||||||
|
'onclick="javascript:resetPassword(\'' + data.username + '\')" ' +
|
||||||
|
'class="btn padding-reduce-on-grid-view remove-user-link">' +
|
||||||
|
'<span class="fw-stack">' +
|
||||||
|
'<i class="fw fw-ring fw-stack-2x"></i>' +
|
||||||
|
'<i class="fw fw-key fw-stack-1x"></i>' +
|
||||||
|
'<span class="fw-stack fw-move-right fw-move-bottom">' +
|
||||||
|
'<i class="fw fw-circle fw-stack-2x fw-stroke fw-inverse"></i> ' +
|
||||||
|
'<i class="fw fw-circle fw-stack-2x"></i>' +
|
||||||
|
'<i class="fw fw-refresh fw-stack-1x fw-inverse"></i> ' +
|
||||||
|
'</span>' +
|
||||||
|
'</span>' +
|
||||||
|
'<span class="hidden-xs hidden-on-grid-view"> Reset Password</span>' +
|
||||||
|
'</a>' +
|
||||||
|
'<a href="#" ' +
|
||||||
|
'data-username="' + data.username + '" ' +
|
||||||
|
'data-user-id=' + data.username + ' ' +
|
||||||
|
'data-click-event="remove-form" ' +
|
||||||
|
'onclick="javascript:removeUser(\'' + data.username + '\', \'' + data.username + '\')" ' +
|
||||||
|
'class="btn padding-reduce-on-grid-view remove-user-link">' +
|
||||||
|
'<span class="fw-stack">' +
|
||||||
|
'<i class="fw fw-ring fw-stack-2x"></i>' +
|
||||||
|
'<i class="fw fw-delete fw-stack-1x"></i>' +
|
||||||
|
'</span>' +
|
||||||
|
'<span class="hidden-xs hidden-on-grid-view"> Remove</span> ' +
|
||||||
|
'</a>'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
$("#user-grid").datatables_extended_serverside_paging(
|
||||||
|
null, '/api/device-mgt/v1.0/users', dataFilter, columns, fnCreatedRow, null
|
||||||
|
);
|
||||||
|
|
||||||
|
$("#loading-content").hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
loadUsers();
|
loadUsers();
|
||||||
|
|
||||||
$(".viewEnabledIcon").click(function () {
|
$(".viewEnabledIcon").click(function () {
|
||||||
InitiateViewOption();
|
initiateViewOption();
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!$("#can-invite").val()) {
|
if (!$("#can-invite").val()) {
|
||||||
$("#invite-user-button").remove();
|
$("#invite-user-button").remove();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -52,6 +52,11 @@
|
|||||||
<span class="fw-stack">
|
<span class="fw-stack">
|
||||||
<i class="fw fw-ring fw-stack-2x"></i>
|
<i class="fw fw-ring fw-stack-2x"></i>
|
||||||
<i class="fw fw-key fw-stack-1x"></i>
|
<i class="fw fw-key fw-stack-1x"></i>
|
||||||
|
<span class="fw-stack fw-move-right fw-move-bottom">
|
||||||
|
<i class="fw fw-circle fw-stack-2x fw-stroke fw-inverse"></i>
|
||||||
|
<i class="fw fw-circle fw-stack-2x"></i>
|
||||||
|
<i class="fw fw-refresh fw-stack-1x fw-inverse"></i>
|
||||||
|
</span>
|
||||||
</span>
|
</span>
|
||||||
<span class="hidden-xs hidden-on-grid-view">Reset</span>
|
<span class="hidden-xs hidden-on-grid-view">Reset</span>
|
||||||
</a>
|
</a>
|
||||||
|
|||||||
@ -27,14 +27,14 @@
|
|||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="{{@app.context}}/users">
|
<a href="{{@app.context}}/users">
|
||||||
Users
|
USERS
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
{{/zone}}
|
{{/zone}}
|
||||||
|
|
||||||
{{#zone "navbarActions"}}
|
{{#zone "navbarActions"}}
|
||||||
<li>
|
<li>
|
||||||
<a href="{{@app.context}}/user/add" class="cu-btn">
|
<a href="{{@app.context}}/user/add">
|
||||||
<span class="icon fw-stack">
|
<span class="icon fw-stack">
|
||||||
<i class="fw fw-add fw-stack-1x"></i>
|
<i class="fw fw-add fw-stack-1x"></i>
|
||||||
<i class="fw fw-ring fw-stack-2x"></i>
|
<i class="fw fw-ring fw-stack-2x"></i>
|
||||||
@ -298,15 +298,13 @@
|
|||||||
Enter new password
|
Enter new password
|
||||||
<br><br>
|
<br><br>
|
||||||
<div>
|
<div>
|
||||||
<input type="password" class="form-control modal-input operationDataKeys" id="new-password"
|
<input type="password" class="form-control modal-input operationDataKeys" id="new-password" data-key="message"/>
|
||||||
data-key="message"/>
|
|
||||||
</div>
|
</div>
|
||||||
<br>
|
<br>
|
||||||
Retype new password
|
Retype new password
|
||||||
<br><br>
|
<br><br>
|
||||||
<div>
|
<div>
|
||||||
<input type="password" class="form-control modal-input operationDataKeys"
|
<input type="password" class="form-control modal-input operationDataKeys" id="confirmed-password" data-key="message"/>
|
||||||
id="confirmed-password" data-key="message"/>
|
|
||||||
</div>
|
</div>
|
||||||
<br>
|
<br>
|
||||||
</h4>
|
</h4>
|
||||||
@ -338,6 +336,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{/zone}}
|
{{/zone}}
|
||||||
{{#zone "common-navigation"}}
|
{{#zone "common-navigation"}}
|
||||||
<!--Later add the navigation menu from here-->
|
<!--Later add the navigation menu from here-->
|
||||||
|
|||||||
@ -26,13 +26,13 @@ function onRequest(context) {
|
|||||||
return options.fn(this);
|
return options.fn(this);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var page = {};
|
var page = {};
|
||||||
var userModule = require("/app/modules/user.js")["userModule"];
|
var userModule = require("/app/modules/user.js")["userModule"];
|
||||||
var deviceMgtProps = require("/app/conf/devicemgt-props.js").config();
|
var deviceMgtProps = require("/app/conf/reader/main.js")["conf"];
|
||||||
|
|
||||||
|
page["adminUser"] = deviceMgtProps["adminUser"];
|
||||||
page["permissions"] = userModule.getUIPermissions();
|
page["permissions"] = userModule.getUIPermissions();
|
||||||
if (userModule.isAuthorized("/permission/admin/device-mgt/users/delete")) {
|
|
||||||
page["removePermitted"] = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (userModule.isAuthorized("/permission/admin/device-mgt/users/remove")) {
|
if (userModule.isAuthorized("/permission/admin/device-mgt/users/remove")) {
|
||||||
page["removePermitted"] = true;
|
page["removePermitted"] = true;
|
||||||
@ -51,6 +51,5 @@ function onRequest(context) {
|
|||||||
page["resetPasswordPermitted"] = true;
|
page["resetPasswordPermitted"] = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
page["adminUser"] = deviceMgtProps.adminUser;
|
|
||||||
return page;
|
return page;
|
||||||
}
|
}
|
||||||
@ -19,9 +19,10 @@
|
|||||||
{{~css "css/dataTables.bootstrap.css"}}
|
{{~css "css/dataTables.bootstrap.css"}}
|
||||||
{{~css "css/dataTables.responsive.css"}}
|
{{~css "css/dataTables.responsive.css"}}
|
||||||
{{/zone}}
|
{{/zone}}
|
||||||
{{~#zone "bottomJs"}}
|
{{#zone "bottomJs"}}
|
||||||
{{~js "js/jquery.dataTables.min.js"}}
|
{{~js "js/jquery.dataTables.min.js"}}
|
||||||
{{~js "js/dataTables.bootstrap.js"}}
|
{{~js "js/dataTables.bootstrap.js"}}
|
||||||
{{~js "js/dataTables.responsive.min.js"}}
|
{{~js "js/dataTables.responsive.min.js"}}
|
||||||
{{~js "js/dataTables.extended.js"}}
|
{{~js "js/dataTables.extended.js"}}
|
||||||
|
{{~js "js/dataTables.extended.serversidepaging.js"}}
|
||||||
{{/zone}}
|
{{/zone}}
|
||||||
|
|||||||
@ -0,0 +1,281 @@
|
|||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* =========================================================
|
||||||
|
* data-tables extended function (Server-side Pagination)
|
||||||
|
* =========================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @namespace $
|
||||||
|
* The $ is just a function.
|
||||||
|
* It is actually an alias for the function called jQuery.
|
||||||
|
* For ex: $(this) means jQuery(this) and S.fn.x means jQuery.fn.x
|
||||||
|
*/
|
||||||
|
|
||||||
|
$.fn.datatables_extended_serverside_paging = function (settings , url, dataFilter,
|
||||||
|
columns, fnCreatedRow, fnDrawCallback) {
|
||||||
|
var elem = $(this);
|
||||||
|
|
||||||
|
// EMM related function
|
||||||
|
if (initiateViewOption) {
|
||||||
|
$(".viewEnabledIcon").bind("click", initiateViewOption);
|
||||||
|
}
|
||||||
|
//--- End of EMM related codes
|
||||||
|
|
||||||
|
$(elem).DataTable(
|
||||||
|
$.extend({},{
|
||||||
|
serverSide: true,
|
||||||
|
bSortCellsTop: true,
|
||||||
|
ajax : {
|
||||||
|
url: "/emm/api/data-tables/invoker",
|
||||||
|
data : function (params) {
|
||||||
|
var filter = "";
|
||||||
|
var i;
|
||||||
|
for (i = 0; i < params.columns.length; i++) {
|
||||||
|
// console.log(i);
|
||||||
|
filter += "&" + params.columns[i].data + "=" + params.columns[i].search.value;
|
||||||
|
}
|
||||||
|
// console.log(filter);
|
||||||
|
params.offset = params.start;
|
||||||
|
params.limit = params.length;
|
||||||
|
params.filter = filter;
|
||||||
|
params.url = url;
|
||||||
|
},
|
||||||
|
dataFilter: dataFilter
|
||||||
|
},
|
||||||
|
columns: columns,
|
||||||
|
responsive: false,
|
||||||
|
autoWidth: false,
|
||||||
|
dom:'<"dataTablesTop"' +
|
||||||
|
'f' +
|
||||||
|
'<"dataTables_toolbar">' +
|
||||||
|
'>' +
|
||||||
|
'rt' +
|
||||||
|
'<"dataTablesBottom"' +
|
||||||
|
'lip' +
|
||||||
|
'>',
|
||||||
|
language: {
|
||||||
|
searchPlaceholder: 'Search by Role name',
|
||||||
|
search: ''
|
||||||
|
},
|
||||||
|
fnCreatedRow: fnCreatedRow,
|
||||||
|
"fnDrawCallback": fnDrawCallback,
|
||||||
|
initComplete: function () {
|
||||||
|
this.api().columns().every(function () {
|
||||||
|
|
||||||
|
var column = this;
|
||||||
|
var filterColumn = $('.filter-row th', elem);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create & add select/text filters to each column
|
||||||
|
*/
|
||||||
|
if (filterColumn.eq(column.index()).hasClass('select-filter')) {
|
||||||
|
var select = $('<select class="form-control"><option value="">All</option></select>')
|
||||||
|
.appendTo(filterColumn.eq(column.index()).empty())
|
||||||
|
.on('change', function () {
|
||||||
|
var val = $.fn.dataTable.util.escapeRegex(
|
||||||
|
$(this).val()
|
||||||
|
);
|
||||||
|
|
||||||
|
column
|
||||||
|
//.search(val ? '^' + val + '$' : '', true, false)
|
||||||
|
.search(val ? val : '', true, false)
|
||||||
|
.draw();
|
||||||
|
|
||||||
|
if (filterColumn.eq(column.index()).hasClass('data-platform')) {
|
||||||
|
if (val == null || val == undefined || val == "") {
|
||||||
|
$("#operation-bar").hide();
|
||||||
|
$("#operation-guide").show();
|
||||||
|
} else {
|
||||||
|
$("#operation-guide").hide();
|
||||||
|
$("#operation-bar").show();
|
||||||
|
loadOperationBar(val);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$(column).each(function () {
|
||||||
|
if ($(column.nodes()).attr('data-search')) {
|
||||||
|
var titles = [];
|
||||||
|
column.nodes().unique().sort().each(function (d, j) {
|
||||||
|
var title = $(d).attr('data-display');
|
||||||
|
if ($.inArray(title, titles) < 0) {
|
||||||
|
titles.push(title);
|
||||||
|
if (title !== undefined) {
|
||||||
|
select.append('<option value="' + title + '">' + title + '</option>')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
column.data().unique().sort().each(function (d, j) {
|
||||||
|
select.append('<option value="' + d + '">' + d + '</option>')
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else if (filterColumn.eq(column.index()).hasClass('text-filter')) {
|
||||||
|
var title = filterColumn.eq(column.index()).attr('data-for');
|
||||||
|
$(filterColumn.eq(column.index()).empty()).html('<input type="text" class="form-control" placeholder="Search ' + title + '" />');
|
||||||
|
|
||||||
|
filterColumn.eq(column.index()).find('input').on('keyup change', function () {
|
||||||
|
column.search($(this).val()).draw();
|
||||||
|
if ($('.dataTables_empty').length > 0) {
|
||||||
|
$('.bulk-action-row').addClass("hidden");
|
||||||
|
} else {
|
||||||
|
$('.bulk-action-row').removeClass("hidden");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* search input default styles override
|
||||||
|
*/
|
||||||
|
var search_input = $(this).closest('.dataTables_wrapper').find('div[id$=_filter] input');
|
||||||
|
search_input.before('<i class="fw fw-search search-icon"></i>').removeClass('input-sm');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* create sorting dropdown menu for list table advance operations
|
||||||
|
*/
|
||||||
|
var dropdownmenu = $('<ul class="dropdown-menu arrow arrow-top-right dark sort-list add-margin-top-2x"><li class="dropdown-header">Sort by</li></ul>');
|
||||||
|
$('.sort-row th', elem).each(function () {
|
||||||
|
if (!$(this).hasClass('no-sort')) {
|
||||||
|
dropdownmenu.append('<li><a href="#' + $(this).html() + '" data-column="' + $(this).index() + '">' + $(this).html() + '</a></li>');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* append advance operations to list table toolbar
|
||||||
|
*/
|
||||||
|
$('.dataTable.list-table').closest('.dataTables_wrapper').find('.dataTablesTop .dataTables_toolbar').html('' +
|
||||||
|
'<ul class="nav nav-pills navbar-right remove-margin" role="tablist">' +
|
||||||
|
'<li><button data-click-event="toggle-selectable" class="btn btn-default btn-primary select-enable-btn">Select</li>' +
|
||||||
|
'<li><button data-click-event="toggle-selected" id="dt-select-all" class="btn btn-default btn-primary disabled">Select All</li>' +
|
||||||
|
'<li><button data-click-event="toggle-list-view" data-view="grid" class="btn btn-default"><i class="fw fw-grid"></i></button></li>' +
|
||||||
|
'<li><button data-click-event="toggle-list-view" data-view="list" class="btn btn-default"><i class="fw fw-list"></i></button></li>' +
|
||||||
|
'<li><button class="btn btn-default" data-toggle="dropdown"><i class="fw fw-sort"></i></button>' + dropdownmenu[0].outerHTML + '</li>' +
|
||||||
|
'</ul>'
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* sorting dropdown menu select function
|
||||||
|
*/
|
||||||
|
$('.dataTables_wrapper .sort-list li a').click(function () {
|
||||||
|
$(this).closest('li').siblings('li').find('a').removeClass('sorting_asc').removeClass('sorting_desc');
|
||||||
|
|
||||||
|
var thisTable = $(this).closest('.dataTables_wrapper').find('.dataTable').dataTable();
|
||||||
|
|
||||||
|
if (!($(this).hasClass('sorting_asc')) && !($(this).hasClass('sorting_desc'))) {
|
||||||
|
$(this).addClass('sorting_asc');
|
||||||
|
thisTable.fnSort([[$(this).attr('data-column'), 'asc']]);
|
||||||
|
}
|
||||||
|
else if ($(this).hasClass('sorting_asc')) {
|
||||||
|
$(this).switchClass('sorting_asc', 'sorting_desc');
|
||||||
|
thisTable.fnSort([[$(this).attr('data-column'), 'desc']]);
|
||||||
|
}
|
||||||
|
else if ($(this).hasClass('sorting_desc')) {
|
||||||
|
$(this).switchClass('sorting_desc', 'sorting_asc');
|
||||||
|
thisTable.fnSort([[$(this).attr('data-column'), 'asc']]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
var rowSelectedClass = 'DTTT_selected selected';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enable/Disable selection on rows
|
||||||
|
*/
|
||||||
|
$('.dataTables_wrapper [data-click-event=toggle-selectable]').click(function () {
|
||||||
|
var button = this,
|
||||||
|
thisTable = $(this).closest('.dataTables_wrapper').find('.dataTable').dataTable();
|
||||||
|
if ($(button).html() == 'Select') {
|
||||||
|
thisTable.addClass("table-selectable");
|
||||||
|
$(button).addClass("active").html('Cancel');
|
||||||
|
$(button).parent().next().children("button").removeClass("disabled");
|
||||||
|
// EMM related code
|
||||||
|
$(".viewEnabledIcon").unbind("click");
|
||||||
|
//--- End of EMM related codes
|
||||||
|
} else if ($(button).html() == 'Cancel') {
|
||||||
|
thisTable.removeClass("table-selectable");
|
||||||
|
$(button).addClass("active").html('Select');
|
||||||
|
$(button).parent().next().children().addClass("disabled");
|
||||||
|
// EMM related function
|
||||||
|
$(".viewEnabledIcon").bind("click", initiateViewOption);
|
||||||
|
//--- End of EMM related codes
|
||||||
|
}
|
||||||
|
});
|
||||||
|
/**
|
||||||
|
* select/deselect all rows function
|
||||||
|
*/
|
||||||
|
$('.dataTables_wrapper [data-click-event=toggle-selected]').click(function () {
|
||||||
|
var button = this,
|
||||||
|
thisTable = $(this).closest('.dataTables_wrapper').find('.dataTable').dataTable();
|
||||||
|
if (!$(button).hasClass('disabled')) {
|
||||||
|
if ($(button).html() == 'Select All') {
|
||||||
|
thisTable.api().rows().every(function () {
|
||||||
|
$(this.node()).addClass(rowSelectedClass);
|
||||||
|
$(button).html('Deselect All');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else if ($(button).html() == 'Deselect All') {
|
||||||
|
thisTable.api().rows().every(function () {
|
||||||
|
$(this.node()).removeClass(rowSelectedClass);
|
||||||
|
$(button).html('Select All');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* on row click select/deselect row function
|
||||||
|
*/
|
||||||
|
$('body').on('click', '[data-type=selectable]', function () {
|
||||||
|
var rowSelectedClass = 'DTTT_selected selected';
|
||||||
|
$(this).toggleClass(rowSelectedClass);
|
||||||
|
var button = this,
|
||||||
|
thisTable = $(this).closest('.dataTables_wrapper').find('.dataTable').dataTable();
|
||||||
|
|
||||||
|
thisTable.api().rows().every(function () {
|
||||||
|
if (!$(this.node()).hasClass(rowSelectedClass)) {
|
||||||
|
$(button).closest('.dataTables_wrapper').find('[data-click-event=toggle-selected]').html('Select All');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* list table list/grid view toggle function
|
||||||
|
*/
|
||||||
|
var toggleButton = $('[data-click-event=toggle-list-view]');
|
||||||
|
toggleButton.click(function () {
|
||||||
|
if ($(this).attr('data-view') == 'grid') {
|
||||||
|
$(this).closest('.dataTables_wrapper').find('.dataTable').addClass('grid-view');
|
||||||
|
//$(this).closest('li').hide();
|
||||||
|
//$(this).closest('li').siblings().show();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$(this).closest('.dataTables_wrapper').find('.dataTable').removeClass('grid-view');
|
||||||
|
//$(this).closest('li').hide();
|
||||||
|
//$(this).closest('li').siblings().show();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},settings)
|
||||||
|
);
|
||||||
|
|
||||||
|
};
|
||||||
@ -30,9 +30,9 @@ function onRequest (context) {
|
|||||||
var userModule = require("/app/modules/user.js").userModule;
|
var userModule = require("/app/modules/user.js").userModule;
|
||||||
var constants = require("/app/modules/constants.js");
|
var constants = require("/app/modules/constants.js");
|
||||||
var permissions = userModule.getUIPermissions();
|
var permissions = userModule.getUIPermissions();
|
||||||
var mdmProps = require('/app/conf/devicemgt-props.js').config();
|
var deviceMgtProps = require("/app/conf/reader/main.js")["conf"];
|
||||||
context.permissions = permissions;
|
context.permissions = permissions;
|
||||||
context["enrollmentURL"] = mdmProps.enrollmentURL;
|
context["enrollmentURL"] = deviceMgtProps.enrollmentURL;
|
||||||
|
|
||||||
return configs;
|
return configs;
|
||||||
}
|
}
|
||||||
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
*
|
*
|
||||||
* WSO2 Inc. licenses this file to you under the Apache License,
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
@ -10,63 +10,61 @@
|
|||||||
*
|
*
|
||||||
* Unless required by applicable law or agreed to in writing,
|
* Unless required by applicable law or agreed to in writing,
|
||||||
* software distributed under the License is distributed on an
|
* software distributed under the License is distributed on an
|
||||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
|
||||||
* KIND, either express or implied. See the License for the
|
* either express or implied. See the License for the
|
||||||
* specific language governing permissions and limitations
|
* specific language governing permissions and limitations
|
||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var invokerUtil = function () {
|
var invokerUtil = function () {
|
||||||
|
|
||||||
var module = {};
|
var publicMethods = {};
|
||||||
|
var privateMethods = {};
|
||||||
|
|
||||||
var END_POINT = window.location.origin+"/devicemgt/api/invoker/execute/";
|
privateMethods.execute = function (requestMethod, requestURL, requestPayload, successCallback, errorCallback) {
|
||||||
|
var restAPIRequestDetails = {};
|
||||||
|
restAPIRequestDetails["requestMethod"] = requestMethod;
|
||||||
|
restAPIRequestDetails["requestURL"] = requestURL;
|
||||||
|
restAPIRequestDetails["requestPayload"] = JSON.stringify(requestPayload);
|
||||||
|
|
||||||
module.get = function (url, successCallback, errorCallback, contentType, acceptType) {
|
var request = {
|
||||||
var payload = null;
|
url: context + "/api/invoker/execute/",
|
||||||
execute("GET", url, payload, successCallback, errorCallback, contentType, acceptType);
|
|
||||||
};
|
|
||||||
module.post = function (url, payload, successCallback, errorCallback, contentType, acceptType) {
|
|
||||||
execute("POST", url, payload, successCallback, errorCallback, contentType, acceptType);
|
|
||||||
};
|
|
||||||
module.put = function (url, payload, successCallback, errorCallback, contentType, acceptType) {
|
|
||||||
execute("PUT", url, payload, successCallback, errorCallback, contentType, acceptType);
|
|
||||||
};
|
|
||||||
module.delete = function (url, successCallback, errorCallback, contentType, acceptType) {
|
|
||||||
var payload = null;
|
|
||||||
execute("DELETE", url, payload, successCallback, errorCallback, contentType, acceptType);
|
|
||||||
};
|
|
||||||
function execute (methoad, url, payload, successCallback, errorCallback, contentType, acceptType) {
|
|
||||||
if(contentType == undefined){
|
|
||||||
contentType = "application/json";
|
|
||||||
}
|
|
||||||
if(acceptType == undefined){
|
|
||||||
acceptType = "application/json";
|
|
||||||
}
|
|
||||||
var data = {
|
|
||||||
url: END_POINT,
|
|
||||||
type: "POST",
|
type: "POST",
|
||||||
contentType: contentType,
|
contentType: "application/json",
|
||||||
accept: acceptType,
|
data: JSON.stringify(restAPIRequestDetails),
|
||||||
success: successCallback
|
accept: "application/json",
|
||||||
};
|
success: successCallback,
|
||||||
var paramValue = {};
|
error: function (jqXHR) {
|
||||||
paramValue.actionMethod = methoad;
|
if (jqXHR.status == 401) {
|
||||||
paramValue.actionUrl = url;
|
|
||||||
paramValue.actionPayload = payload;
|
|
||||||
if(contentType == "application/json"){
|
|
||||||
paramValue.actionPayload = JSON.stringify(payload);
|
|
||||||
}
|
|
||||||
data.data = JSON.stringify(paramValue);
|
|
||||||
$.ajax(data).fail(function (jqXHR) {
|
|
||||||
if (jqXHR.status == "401") {
|
|
||||||
console.log("Unauthorized access attempt!");
|
console.log("Unauthorized access attempt!");
|
||||||
$(modalPopupContent).html($('#error-msg').html());
|
$(modalPopupContent).html($("#error-msg").html());
|
||||||
showPopup();
|
showPopup();
|
||||||
} else {
|
} else {
|
||||||
errorCallback(jqXHR);
|
errorCallback(jqXHR);
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
};
|
};
|
||||||
return module;
|
|
||||||
|
$.ajax(request);
|
||||||
|
};
|
||||||
|
|
||||||
|
publicMethods.get = function (requestURL, successCallback, errorCallback) {
|
||||||
|
var requestPayload = null;
|
||||||
|
privateMethods.execute("GET", requestURL, requestPayload, successCallback, errorCallback);
|
||||||
|
};
|
||||||
|
|
||||||
|
publicMethods.post = function (requestURL, requestPayload, successCallback, errorCallback) {
|
||||||
|
privateMethods.execute("POST", requestURL, requestPayload, successCallback, errorCallback);
|
||||||
|
};
|
||||||
|
|
||||||
|
publicMethods.put = function (requestURL, requestPayload, successCallback, errorCallback) {
|
||||||
|
privateMethods.execute("PUT", requestURL, requestPayload, successCallback, errorCallback);
|
||||||
|
};
|
||||||
|
|
||||||
|
publicMethods.delete = function (requestURL, successCallback, errorCallback) {
|
||||||
|
var requestPayload = null;
|
||||||
|
privateMethods.execute("DELETE", requestURL, requestPayload, successCallback, errorCallback);
|
||||||
|
};
|
||||||
|
|
||||||
|
return publicMethods;
|
||||||
}();
|
}();
|
||||||
|
|||||||
@ -15,10 +15,7 @@
|
|||||||
specific language governing permissions and limitations
|
specific language governing permissions and limitations
|
||||||
under the License.
|
under the License.
|
||||||
}}
|
}}
|
||||||
{{#zone "bottomJs"}}
|
{{#zone "content"}}
|
||||||
{{js "js/js.cookie.js"}}
|
|
||||||
{{js "js/invoker-lib.js"}}
|
|
||||||
|
|
||||||
<div id="error-msg" class="hide">
|
<div id="error-msg" class="hide">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@ -35,3 +32,10 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{{/zone}}
|
{{/zone}}
|
||||||
|
{{#zone "bottomJs"}}
|
||||||
|
<script type="text/javascript">
|
||||||
|
var context = "{{@app.context}}"
|
||||||
|
</script>
|
||||||
|
{{js "js/js.cookie.js"}}
|
||||||
|
{{js "js/invoker-lib.js"}}
|
||||||
|
{{/zone}}
|
||||||
|
|||||||
@ -24,7 +24,7 @@
|
|||||||
*/
|
*/
|
||||||
function onRequest(context) {
|
function onRequest(context) {
|
||||||
var userModule = require("/app/modules/user.js")["userModule"];
|
var userModule = require("/app/modules/user.js")["userModule"];
|
||||||
var deviceMgtProps = require('/app/conf/devicemgt-props.js').config();
|
var deviceMgtProps = require("/app/conf/reader/main.js")["conf"];
|
||||||
var response = userModule.getRoles();
|
var response = userModule.getRoles();
|
||||||
if (response["status"] == "success") {
|
if (response["status"] == "success") {
|
||||||
context["roles"] = response["content"];
|
context["roles"] = response["content"];
|
||||||
|
|||||||
@ -24,7 +24,7 @@
|
|||||||
*/
|
*/
|
||||||
function onRequest(context) {
|
function onRequest(context) {
|
||||||
var userModule = require("/app/modules/user.js")["userModule"];
|
var userModule = require("/app/modules/user.js")["userModule"];
|
||||||
var deviceMgtProps = require("/app/conf/devicemgt-props.js").config();
|
var deviceMgtProps = require("/app/conf/reader/main.js")["conf"];
|
||||||
var uri = request.getRequestURI();
|
var uri = request.getRequestURI();
|
||||||
var uriMatcher = new URIMatcher(String(uri));
|
var uriMatcher = new URIMatcher(String(uri));
|
||||||
var isMatched = uriMatcher.match("/{context}/role/edit/{rolename}");
|
var isMatched = uriMatcher.match("/{context}/role/edit/{rolename}");
|
||||||
|
|||||||
@ -30,7 +30,7 @@ function onRequest(context) {
|
|||||||
if (userModule.isAuthorized("/permission/admin/device-mgt/roles/remove")) {
|
if (userModule.isAuthorized("/permission/admin/device-mgt/roles/remove")) {
|
||||||
context["removePermitted"] = true;
|
context["removePermitted"] = true;
|
||||||
}
|
}
|
||||||
var deviceMgtProps = require("/app/conf/devicemgt-props.js").config();
|
var deviceMgtProps = require("/app/conf/reader/main.js")["conf"];
|
||||||
context["appContext"] = deviceMgtProps.appContext;
|
context["appContext"] = deviceMgtProps.appContext;
|
||||||
context["adminRole"] = deviceMgtProps.adminRole;
|
context["adminRole"] = deviceMgtProps.adminRole;
|
||||||
return context;
|
return context;
|
||||||
|
|||||||
@ -16,38 +16,58 @@
|
|||||||
under the License.
|
under the License.
|
||||||
}}
|
}}
|
||||||
{{#zone "navMenu-icon"}}
|
{{#zone "navMenu-icon"}}
|
||||||
<span class="icon fw-stack"><i class="fw fw-tiles fw-stack-1x"></i></span>
|
<span class="icon fw-stack">
|
||||||
|
<i class="fw fw-tiles fw-stack-1x toggle-icon-up"></i>
|
||||||
|
</span>
|
||||||
{{/zone}}
|
{{/zone}}
|
||||||
|
|
||||||
{{~#zone "navMenu-items"}}
|
{{#zone "navMenu-items"}}
|
||||||
{{#if permissions.VIEW_DASHBOARD}}
|
{{#if permissions.VIEW_DASHBOARD}}
|
||||||
<li>
|
<li>
|
||||||
<a href="{{@app.context}}"><i class="fw fw-dashboard"></i>Admin Dashboard</a>
|
<a href="{{@app.context}}">
|
||||||
|
<i class="fw fw-dashboard"></i>
|
||||||
|
Admin Dashboard
|
||||||
|
</a>
|
||||||
</li>
|
</li>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{#if permissions.LIST_OWN_DEVICES}}
|
{{#if permissions.LIST_OWN_DEVICES}}
|
||||||
<li>
|
<li>
|
||||||
<a href="{{@app.context}}/devices"><i class="fw fw-mobile"></i>Device Management</a>
|
<a href="{{@app.context}}/devices">
|
||||||
|
<i class="fw fw-mobile"></i>
|
||||||
|
Device Management
|
||||||
|
</a>
|
||||||
</li>
|
</li>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{#if permissions.LIST_GROUPS}}
|
{{#if permissions.LIST_GROUPS}}
|
||||||
<li>
|
<li>
|
||||||
<a href="{{@app.context}}/groups"><i class="fw fw-grouping"></i>Group Management</a>
|
<a href="{{@app.context}}/groups">
|
||||||
|
<i class="fw fw-grouping"></i>
|
||||||
|
Group Management
|
||||||
|
</a>
|
||||||
</li>
|
</li>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{#if permissions.ADD_USER}}
|
{{#if permissions.ADD_USER}}
|
||||||
<li>
|
<li>
|
||||||
<a href="{{@app.context}}/users"><i class="fw fw-user"></i>User Management</a>
|
<a href="{{@app.context}}/users">
|
||||||
|
<i class="fw fw-user"></i>
|
||||||
|
User Management
|
||||||
|
</a>
|
||||||
</li>
|
</li>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{#if permissions.ADD_ROLE}}
|
{{#if permissions.ADD_ROLE}}
|
||||||
<li>
|
<li>
|
||||||
<a href="{{@app.context}}/roles"><i class="fw fw-bookmark"></i>Role Management</a>
|
<a href="{{@app.context}}/roles">
|
||||||
|
<i class="fw fw-bookmark"></i>
|
||||||
|
Role Management
|
||||||
|
</a>
|
||||||
</li>
|
</li>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{#if permissions.ADD_POLICY}}
|
{{#if permissions.ADD_POLICY}}
|
||||||
<li>
|
<li>
|
||||||
<a href="{{@app.context}}/policies"><i class="fw fw-policy"></i>Policy Management</a>
|
<a href="{{@app.context}}/policies">
|
||||||
|
<i class="fw fw-policy"></i>
|
||||||
|
Policy Management
|
||||||
|
</a>
|
||||||
</li>
|
</li>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{#if permissions.TENANT_CONFIGURATION}}
|
{{#if permissions.TENANT_CONFIGURATION}}
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"displayName": "Carbon Device Management App",
|
"displayName": "Carbon Device Management App",
|
||||||
"logLevel": "warn",
|
"logLevel": "info",
|
||||||
"initScripts": ["/app/modules/init.js"],
|
"initScripts": ["/app/modules/init.js"],
|
||||||
"urlMappings": [
|
"urlMappings": [
|
||||||
{
|
{
|
||||||
@ -50,6 +50,10 @@
|
|||||||
{
|
{
|
||||||
"url": "/*",
|
"url": "/*",
|
||||||
"path": "/lib/pages.jag"
|
"path": "/lib/pages.jag"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "/api/data-tables/invoker",
|
||||||
|
"path": "/api/data-tables-invoker-api.jag"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@ -29,7 +29,7 @@ public class CertificateAuthenticator implements WebappAuthenticator {
|
|||||||
private static final String CERTIFICATE_AUTHENTICATOR = "CertificateAuth";
|
private static final String CERTIFICATE_AUTHENTICATOR = "CertificateAuth";
|
||||||
private static final String MUTUAL_AUTH_HEADER = "mutual-auth-header";
|
private static final String MUTUAL_AUTH_HEADER = "mutual-auth-header";
|
||||||
private static final String PROXY_MUTUAL_AUTH_HEADER = "proxy-mutual-auth-header";
|
private static final String PROXY_MUTUAL_AUTH_HEADER = "proxy-mutual-auth-header";
|
||||||
private static final String CERTIFICATE_VERIFICATION_HEADER = "certificate-verification-header";
|
private static final String CERTIFICATE_VERIFICATION_HEADER = "Mdm-Signature";
|
||||||
private static final String CLIENT_CERTIFICATE_ATTRIBUTE = "javax.servlet.request.X509Certificate";
|
private static final String CLIENT_CERTIFICATE_ATTRIBUTE = "javax.servlet.request.X509Certificate";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -55,7 +55,6 @@ public class CertificateAuthenticator implements WebappAuthenticator {
|
|||||||
authenticationInfo.setStatus(Status.CONTINUE);
|
authenticationInfo.setStatus(Status.CONTINUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
String certVerificationHeader = request.getContext().findParameter(CERTIFICATE_VERIFICATION_HEADER);
|
|
||||||
try {
|
try {
|
||||||
// When there is a load balancer terminating mutual SSL, it should pass this header along and
|
// When there is a load balancer terminating mutual SSL, it should pass this header along and
|
||||||
// as the value of this header, the client certificate subject dn should be passed.
|
// as the value of this header, the client certificate subject dn should be passed.
|
||||||
@ -78,7 +77,7 @@ public class CertificateAuthenticator implements WebappAuthenticator {
|
|||||||
}
|
}
|
||||||
} else if (request.getHeader(CERTIFICATE_VERIFICATION_HEADER) != null) {
|
} else if (request.getHeader(CERTIFICATE_VERIFICATION_HEADER) != null) {
|
||||||
|
|
||||||
String certHeader = request.getHeader(certVerificationHeader);
|
String certHeader = request.getHeader(CERTIFICATE_VERIFICATION_HEADER);
|
||||||
if (certHeader != null &&
|
if (certHeader != null &&
|
||||||
AuthenticatorFrameworkDataHolder.getInstance().getCertificateManagementService().
|
AuthenticatorFrameworkDataHolder.getInstance().getCertificateManagementService().
|
||||||
verifySignature(certHeader)) {
|
verifySignature(certHeader)) {
|
||||||
|
|||||||
@ -0,0 +1,8 @@
|
|||||||
|
CREATE TABLE IF NOT EXISTS DM_DEVICE_CERTIFICATE (
|
||||||
|
ID INTEGER auto_increment NOT NULL,
|
||||||
|
SERIAL_NUMBER VARCHAR(500) DEFAULT NULL,
|
||||||
|
CERTIFICATE BLOB DEFAULT NULL,
|
||||||
|
TENANT_ID INTEGER DEFAULT 0,
|
||||||
|
USERNAME VARCHAR(500) DEFAULT NULL,
|
||||||
|
PRIMARY KEY (ID)
|
||||||
|
);
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
CREATE TABLE DM_DEVICE_CERTIFICATE (
|
||||||
|
ID INTEGER IDENTITY NOT NULL,
|
||||||
|
SERIAL_NUMBER VARCHAR(500) DEFAULT NULL,
|
||||||
|
CERTIFICATE VARBINARY(max) DEFAULT NULL,
|
||||||
|
TENANT_ID INTEGER DEFAULT 0,
|
||||||
|
USERNAME VARCHAR(500) DEFAULT NULL,
|
||||||
|
PRIMARY KEY (ID)
|
||||||
|
);
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
CREATE TABLE IF NOT EXISTS DM_DEVICE_CERTIFICATE (
|
||||||
|
ID INTEGER auto_increment NOT NULL,
|
||||||
|
SERIAL_NUMBER VARCHAR(500) DEFAULT NULL,
|
||||||
|
CERTIFICATE BLOB DEFAULT NULL,
|
||||||
|
TENANT_ID INTEGER DEFAULT 0,
|
||||||
|
USERNAME VARCHAR(500) DEFAULT NULL,
|
||||||
|
PRIMARY KEY (ID)
|
||||||
|
)ENGINE = InnoDB;
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
CREATE TABLE DM_DEVICE_CERTIFICATE (
|
||||||
|
ID NUMBER(10) NOT NULL,
|
||||||
|
SERIAL_NUMBER VARCHAR2(500) DEFAULT NULL,
|
||||||
|
CERTIFICATE BLOB DEFAULT NULL,
|
||||||
|
TENANT_ID NUMBER(10) DEFAULT 0,
|
||||||
|
USERNAME VARCHAR2(500) DEFAULT NULL,
|
||||||
|
PRIMARY KEY (ID)
|
||||||
|
)
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
CREATE TABLE IF NOT EXISTS DM_DEVICE_CERTIFICATE (
|
||||||
|
ID BIGSERIAL NOT NULL PRIMARY KEY,
|
||||||
|
SERIAL_NUMBER VARCHAR(500) DEFAULT NULL,
|
||||||
|
CERTIFICATE BYTEA DEFAULT NULL,
|
||||||
|
TENANT_ID INTEGER DEFAULT 0,
|
||||||
|
USERNAME VARCHAR(500) DEFAULT NULL
|
||||||
|
);
|
||||||
@ -1,3 +1,4 @@
|
|||||||
instructions.configure = \
|
instructions.configure = \
|
||||||
org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.certificate.mgt.server_${feature.version}/conf/wso2certs.jks,target:${installFolder}/../../resources/security/wso2certs.jks,overwrite:true);\
|
org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.certificate.mgt.server_${feature.version}/conf/wso2certs.jks,target:${installFolder}/../../resources/security/wso2certs.jks,overwrite:true);\
|
||||||
org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.certificate.mgt.server_${feature.version}/conf/certificate-config.xml,target:${installFolder}/../../conf/certificate-config.xml,overwrite:true);\
|
org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.certificate.mgt.server_${feature.version}/conf/certificate-config.xml,target:${installFolder}/../../conf/certificate-config.xml,overwrite:true);\
|
||||||
|
org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.certificate.mgt.server_${feature.version}/dbscripts/cdm/,target:${installFolder}/../../../dbscripts/cdm,overwrite:true);\
|
||||||
@ -17,15 +17,6 @@ CREATE TABLE IF NOT EXISTS DM_GROUP (
|
|||||||
PRIMARY KEY (ID)
|
PRIMARY KEY (ID)
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS DM_DEVICE_CERTIFICATE (
|
|
||||||
ID INTEGER auto_increment NOT NULL,
|
|
||||||
SERIAL_NUMBER VARCHAR(500) DEFAULT NULL,
|
|
||||||
CERTIFICATE BLOB DEFAULT NULL,
|
|
||||||
TENANT_ID INTEGER DEFAULT 0,
|
|
||||||
USERNAME VARCHAR(500) DEFAULT NULL,
|
|
||||||
PRIMARY KEY (ID)
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS DM_DEVICE (
|
CREATE TABLE IF NOT EXISTS DM_DEVICE (
|
||||||
ID INTEGER auto_increment NOT NULL,
|
ID INTEGER auto_increment NOT NULL,
|
||||||
DESCRIPTION TEXT DEFAULT NULL,
|
DESCRIPTION TEXT DEFAULT NULL,
|
||||||
|
|||||||
@ -17,15 +17,6 @@ CREATE TABLE DM_GROUP (
|
|||||||
PRIMARY KEY (ID)
|
PRIMARY KEY (ID)
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE TABLE DM_DEVICE_CERTIFICATE (
|
|
||||||
ID INTEGER IDENTITY NOT NULL,
|
|
||||||
SERIAL_NUMBER VARCHAR(500) DEFAULT NULL,
|
|
||||||
CERTIFICATE VARBINARY(max) DEFAULT NULL,
|
|
||||||
TENANT_ID INTEGER DEFAULT 0,
|
|
||||||
USERNAME VARCHAR(500) DEFAULT NULL,
|
|
||||||
PRIMARY KEY (ID)
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE DM_DEVICE (
|
CREATE TABLE DM_DEVICE (
|
||||||
ID INTEGER identity NOT NULL,
|
ID INTEGER identity NOT NULL,
|
||||||
DESCRIPTION VARCHAR(max) DEFAULT NULL,
|
DESCRIPTION VARCHAR(max) DEFAULT NULL,
|
||||||
|
|||||||
@ -6,15 +6,6 @@ CREATE TABLE IF NOT EXISTS DM_DEVICE_TYPE (
|
|||||||
PRIMARY KEY (ID)
|
PRIMARY KEY (ID)
|
||||||
)ENGINE = InnoDB;
|
)ENGINE = InnoDB;
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS DM_DEVICE_CERTIFICATE (
|
|
||||||
ID INTEGER auto_increment NOT NULL,
|
|
||||||
SERIAL_NUMBER VARCHAR(500) DEFAULT NULL,
|
|
||||||
CERTIFICATE BLOB DEFAULT NULL,
|
|
||||||
TENANT_ID INTEGER DEFAULT 0,
|
|
||||||
USERNAME VARCHAR(500) DEFAULT NULL,
|
|
||||||
PRIMARY KEY (ID)
|
|
||||||
)ENGINE = InnoDB;
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS DM_DEVICE (
|
CREATE TABLE IF NOT EXISTS DM_DEVICE (
|
||||||
ID INTEGER AUTO_INCREMENT NOT NULL,
|
ID INTEGER AUTO_INCREMENT NOT NULL,
|
||||||
DESCRIPTION TEXT DEFAULT NULL,
|
DESCRIPTION TEXT DEFAULT NULL,
|
||||||
|
|||||||
@ -44,16 +44,6 @@ WHEN (NEW.ID IS NULL)
|
|||||||
SELECT DM_GROUP_seq.NEXTVAL INTO :NEW.ID FROM DUAL;
|
SELECT DM_GROUP_seq.NEXTVAL INTO :NEW.ID FROM DUAL;
|
||||||
END;
|
END;
|
||||||
/
|
/
|
||||||
|
|
||||||
CREATE TABLE DM_DEVICE_CERTIFICATE (
|
|
||||||
ID NUMBER(10) NOT NULL,
|
|
||||||
SERIAL_NUMBER VARCHAR2(500) DEFAULT NULL,
|
|
||||||
CERTIFICATE BLOB DEFAULT NULL,
|
|
||||||
TENANT_ID NUMBER(10) DEFAULT 0,
|
|
||||||
USERNAME VARCHAR2(500) DEFAULT NULL,
|
|
||||||
PRIMARY KEY (ID)
|
|
||||||
)
|
|
||||||
/
|
|
||||||
-- Generate ID using sequence and trigger
|
-- Generate ID using sequence and trigger
|
||||||
CREATE SEQUENCE DM_DEVICE_CERTIFICATE_seq START WITH 1 INCREMENT BY 1 NOCACHE
|
CREATE SEQUENCE DM_DEVICE_CERTIFICATE_seq START WITH 1 INCREMENT BY 1 NOCACHE
|
||||||
/
|
/
|
||||||
|
|||||||
@ -5,14 +5,6 @@ CREATE TABLE IF NOT EXISTS DM_DEVICE_TYPE (
|
|||||||
SHARED_WITH_ALL_TENANTS BOOLEAN NOT NULL DEFAULT FALSE
|
SHARED_WITH_ALL_TENANTS BOOLEAN NOT NULL DEFAULT FALSE
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS DM_DEVICE_CERTIFICATE (
|
|
||||||
ID BIGSERIAL NOT NULL PRIMARY KEY,
|
|
||||||
SERIAL_NUMBER VARCHAR(500) DEFAULT NULL,
|
|
||||||
CERTIFICATE BYTEA DEFAULT NULL,
|
|
||||||
TENANT_ID INTEGER DEFAULT 0,
|
|
||||||
USERNAME VARCHAR(500) DEFAULT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS DM_DEVICE (
|
CREATE TABLE IF NOT EXISTS DM_DEVICE (
|
||||||
ID BIGSERIAL NOT NULL PRIMARY KEY,
|
ID BIGSERIAL NOT NULL PRIMARY KEY,
|
||||||
DESCRIPTION TEXT DEFAULT NULL,
|
DESCRIPTION TEXT DEFAULT NULL,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user