blob: 713bc14b95088cdaf6d79f62200dcdca95467614 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2013-2020 LAAS-CNRS (www.laas.fr)
* 7 Colonel Roche 31077 Toulouse - France
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* Initial Contributors:
* Thierry Monteil : Project manager, technical co-manager
* Mahdi Ben Alaya : Technical co-manager
* Samir Medjiah : Technical co-manager
* Khalil Drira : Strategy expert
* Guillaume Garzone : Developer
* François Aïssaoui : Developer
*
* New contributors :
*******************************************************************************/
/**
* Authors:
* Mahdi Ben Alaya <ben.alaya@laas.fr> <benalaya.mahdi@gmail.com>
* Marouane El kiasse <melkiasse@laas.fr> <kiasmarouane@gmail.com>
* Yassine Banouar <ybanouar@laas.fr> <yassine.banouar@gmail.com>
*/
var cseBase= getUrlVar("cseId");
var context=getUrlVar("context");
$(document).ready(function() {
$("#main").hide();
$("input#username").focus();
});
var username;
var password;
var parser=new DOMParser();
function make_base_auth(user, password) {
var tok = user + ':' + password;
//var hash = btoa(tok);
//return "Basic " + hash;
return tok;
}
function login(){
username = $("input#username").val();
password = $("input#password").val();
get("/" + cseBase);
}
function logout(){
username = "";
password = "";
$("input#username").val("")
$("input#password").val("")
$("#attributes").html("");
$('#content').html("");
$('#response').html("");
$("#login").show();
$("#main").hide();
}
function get(targetId){
$.ajax({
type: "GET",
beforeSend: function(){},
dataType: "json",
url: context + targetId + "?rcn=5&lvl=1",
headers : {"X-M2M-Origin" : make_base_auth(username, password), "Accept":"application/json", "X-M2M-RI":"OM2M-webpage"},
success: function(response){
$("#login").hide();
$("#main").show();
$("#url").text(window.location.protocol+"//"+window.location.host+context+targetId);
$("#"+encodeId(targetId)).html("");
$("#attributes").html("");
$('#content').html('');
$('#response').html('');
$("#error").html('');
for(var resourceName in response){
var resource = response[resourceName];
if(resourceName == "m2m:cb"){
$("#resources").html("<li onclick=get('"+targetId+"')>"+resource['rn']+"<ul id="+encodeId(targetId)+"></ul></li>");
}
for (var attribute in resource){
if(attribute == "ch"){
for (var index in resource[attribute]){
var child = resource[attribute][index];
$("#"+encodeId(targetId)).append("<li onclick=get('"+child["val"]+"')>"+child["nm"]+"<ul id="+encodeId(child["val"])+"></ul></li>");
}
} else {
var value ;
if(attribute == "pv" || attribute == "pvs"){
var table = '<table class="bordered"><thead><th>AccessControlOriginator</th><th>AccessControlOperation</th></thead>' +
'<tbody>' ;
for(var index in resource[attribute]['acr']){
var acr = resource[attribute]['acr'][index] ;
var acor = '<table class="bordered"><tbody>'
var acors = acr['acor'];
for (var indexJ in acors){
acor += "<tr><td>"+ acors[indexJ] +"</td></tr>";
}
acor += "</tbody></table>" ;
table += '<tr><td>' + acor + '</td><td>'+ acr['acop'] +'</td></tr>';
}
table += '</tbody></table>' ;
value = table;
} else if (attribute == "poa"){
var table = '<table class="bordered"><thead><th>Point Of Access</th></thead><tbody>' ;
var poas = resource[attribute];
for (var index in poas){
table += '<tr><td>'+ poas[index] +'</td></tr>'
}
table += "</tbody></table>";
value = table ;
} else if (attribute == "srt") {
var table = '<table class="bordered"><thead><th>Supported resource types</th></thead><tbody>' ;
var srts = resource[attribute];
for (var index in srts){
table += '<tr><td>'+ srts[index] +'</td></tr>'
}
table += "</tbody></table>";
value = table ;
} else if(resourceName == "m2m:csr" && attribute == "csi"){
value = '<button type="button" onClick="get(\'' + resource['csi'] +'\')">'+ resource['csi'] +'</button>';
} else if(attribute == "acpi"){
var table = "<table class='bordered'><thead><th>AccessControlPolicyIDs</th></thdead><tbody>";
var acpiList = resource[attribute];
for(var index in acpiList){
table += "<tr><td>" + acpiList[index] + "</td></tr>";
}
table += "</tbody></table>";
value = table;
} else if(attribute == "daci"){
var table = "<table class='bordered'><thead><th>DynamicAuthorizationConsultationIDs</th></thdead><tbody>";
var daciList = resource[attribute];
for(var index in daciList){
table += "<tr><td>" + daciList[index] + "</td></tr>";
}
table += "</tbody></table>";
value = table;
}else if(attribute == "la" || attribute == "ol"){
value = "<button onClick=\"get('"+ resource[attribute] +"')\">"+ resource[attribute] +"</button>";
} else if ((attribute =="lbl") || (attribute == "nu")) {
var lblList = resource[attribute];
value="<ul>";
for(var index in lblList) {
value+= "<li>" + lblList[index] + "</li>";
}
value += "</ul>";
} else {
value = resource[attribute];
if (value instanceof Object) {
value = value.val;
}
}
if(attribute == "con"){
display(resource['con']);
} else {
$("#attributes").append("<tr><td class="+attribute+">"+attribute+"</td><td>"+value+"</td></tr>");
}
}
}
}
$("li").click(function (e) {
e.stopPropagation();
});
},
error: function(xhr,status,error){
$("#error").html(xhr.status+' '+status+' '+error);
}
});
}
function encodeId(id){
return id.replace(/[\n\s]/g,'').replace(/[\/]/gi,"_");
}
function clean(text){
return text.replace(/[\n\s]/g,'');
}
function display(content){
$("#attributes").append("<tr><td class="+"con"+">"+"con"+"</td><td id='cont'></td></tr>");
//var obix= atob(content);
var rep=parser.parseFromString(content,'text/xml');
if(rep.firstChild.tagName != 'obj'){
$('#cont').append(content);
return;
}
$('#cont').append("<table class='bordered' id='contentTable'><thead><tr><th>Attribute</th><th>Value</th></tr></thead></table>");
if(rep.firstChild.tagName!="obj"){
$('#contentTable').append('<tr><td>'+$(rep.firstChild).attr('name')+'</td><td>'+$(rep.firstChild).attr('val')+'</td></tr>');
}
var childrens =$(rep.firstChild).children();
for(var t=0; t<childrens.length; t++){
if(childrens[t].tagName=="op"){
if($(childrens[t]).attr('is')=="retrieve"){
$('#contentTable').append("<tr><td><input type='button' onclick=retrieve('"+$(childrens[t]).attr('href')+"') value='"+$(childrens[t]).attr('name')+"' ></td><td>"+$(childrens[t]).attr('href')+"</td></tr>");
}else if ($(childrens[t]).attr('is')=="execute"){
$('#contentTable').append("<tr><td><input type='button' onclick=execute('"+$(childrens[t]).attr('href')+"') value='"+$(childrens[t]).attr('name')+"' ></td><td>"+$(childrens[t]).attr('href')+"</td></tr>");
}else if ($(childrens[t]).attr('is')=="create"){
var objs = childrens;
for(var j=0; j<objs.length; j++){
if(objs[j].tagName=="obj"){
if($(objs[j]).attr('href')==$(childrens[t]).attr('in')){
var serializer = new XMLSerializer();
content = serializer.serializeToString( objs[j] );
$('#contentTable').append("<tr><td><input type='button' onclick=create('"+$(childrens[t]).attr('href')+"','"+btoa(content)+"') value='"+$(childrens[t]).attr('name')+"' ></td><td>"+$(childrens[t]).attr('href')+"</td></tr>");
break;
}
}
}
}
}
else if(childrens[t].tagName!="obj"){
$('#contentTable').append('<tr><td>'+$(childrens[t]).attr('name')+'</td><td>'+$(childrens[t]).attr('val')+'</td></tr>');
}
}
}
function getUrlVar(key){
var result = new RegExp(key + "=([^&]*)", "i").exec(window.location.search);
return result && unescape(result[1]) || "";
}
function execute(url){
$('#response').html('');
$.ajax({
type: 'POST',
url: context+url,
headers: {"X-M2M-Origin":make_base_auth(username,password), "X-M2M-RI":"OM2M-webpage"},
beforeSend: function() {
},
timeout: 20000,
error: function(xhr, status, error) {
if(xhr.status==204) successCallback(null, error, xhr);
else $('#response').append('<h4>Post request failed: '+xhr.status+' '+error+'</h4>'); },
dataType: 'xml',
success: function(response) {
$('#response').append('<h4>Successful POST request.</h4>');
}
});
}
function retrieve(url){
$('#response').html('');
$.ajax({
type: 'GET',
url: context+url,
headers: {"X-M2M-Origin":make_base_auth(username,password), "X-M2M-RI":"OM2M-webpage"},
beforeSend: function() {
},
timeout: 20000,
error: function(xhr, status, error) { $('#response').append('<h4>GET request failed: '+xhr.status+' '+error+'</h4>'); }, // alert a message in case of error
dataType: 'xml',
success: function(response) {
$('#response').append('<h4>Successful GET Request:</h4>');
$('#response').append('<table class="bordered" id="contentTable1" ><thead><tr><th >Name</th><th >Value</th></thead></table>');
if(response.firstChild.localName=="obj"){
$(response).find('obj').children().each(function() {
$('#contentTable1').append('<tr"><td>'+$(this).attr('name')+'</td><td>'+$(this).attr('val')+'</td></tr>');
});
}else{
$(response).children().each(function() {
$('#contentTable1').append('<tr"><td>'+$(this).attr('name')+'</td><td>'+$(this).attr('val')+'</td></tr>');
});
}
}
});
}
function create(url, content){
$('#response').html('');
$.ajax({
type: 'POST',
url: context+'/'+url,
headers: {"X-M2M-Origin":make_base_auth(username,password), "X-M2M-RI":"OM2M-webpage"},
beforeSend: function() {
},
timeout: 20000,
data: atob(content),
error: function(xhr, status, error) {
if(xhr.status==204) successCallback(null, error, xhr);
else $('#response').append('<h4>Post request failed: '+xhr.status+' '+error+'</h4>');
},
dataType: 'xml',
success: function(response) {
$('#response').append('<h4>Successful POST request.</h4>');
}
});
}