Commit 9af62027 authored by François Billioud's avatar François Billioud

wip

parent 61db05a9
/**
*
* Base64 encode / decode
* http://www.webtoolkit.info/
*
**/
var Base64 = {
// private property
_keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
// public method for encoding
encode : function (input) {
var output = "";
var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
var i = 0;
input = Base64._utf8_encode(input);
while (i < input.length) {
chr1 = input.charCodeAt(i++);
chr2 = input.charCodeAt(i++);
chr3 = input.charCodeAt(i++);
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;
if (isNaN(chr2)) {
enc3 = enc4 = 64;
} else if (isNaN(chr3)) {
enc4 = 64;
}
output = output +
this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
}
return output;
},
// public method for decoding
decode : function (input) {
var output = "";
var chr1, chr2, chr3;
var enc1, enc2, enc3, enc4;
var i = 0;
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
while (i < input.length) {
enc1 = this._keyStr.indexOf(input.charAt(i++));
enc2 = this._keyStr.indexOf(input.charAt(i++));
enc3 = this._keyStr.indexOf(input.charAt(i++));
enc4 = this._keyStr.indexOf(input.charAt(i++));
chr1 = (enc1 << 2) | (enc2 >> 4);
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
chr3 = ((enc3 & 3) << 6) | enc4;
output = output + String.fromCharCode(chr1);
if (enc3 != 64) {
output = output + String.fromCharCode(chr2);
}
if (enc4 != 64) {
output = output + String.fromCharCode(chr3);
}
}
output = Base64._utf8_decode(output);
return output;
},
// private method for UTF-8 encoding
_utf8_encode : function (string) {
string = string.replace(/\r\n/g,"\n");
var utftext = "";
for (var n = 0; n < string.length; n++) {
var c = string.charCodeAt(n);
if (c < 128) {
utftext += String.fromCharCode(c);
}
else if((c > 127) && (c < 2048)) {
utftext += String.fromCharCode((c >> 6) | 192);
utftext += String.fromCharCode((c & 63) | 128);
}
else {
utftext += String.fromCharCode((c >> 12) | 224);
utftext += String.fromCharCode(((c >> 6) & 63) | 128);
utftext += String.fromCharCode((c & 63) | 128);
}
}
return utftext;
},
// private method for UTF-8 decoding
_utf8_decode : function (utftext) {
var string = "";
var i = 0;
var c = c1 = c2 = 0;
while ( i < utftext.length ) {
c = utftext.charCodeAt(i);
if (c < 128) {
string += String.fromCharCode(c);
i++;
}
else if((c > 191) && (c < 224)) {
c2 = utftext.charCodeAt(i+1);
string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
i += 2;
}
else {
c2 = utftext.charCodeAt(i+1);
c3 = utftext.charCodeAt(i+2);
string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
i += 3;
}
}
return string;
}
}
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="jio.js" />
<script type="text/javascript">
nextField = function(event) {
if(event.keyCode==13) {
if(document.getElementById("userName")==document.activeElement) {document.getElementById("password").focus();return;}
if(document.getElementById("password")==document.activeElement) {login();document.getElementById("submit").focus();return;}
}
}
document.onload;
</script>
</head>
<body>
<form action="https://dav-storage/login.php" method="post">
<div style="border: solid 1px #000; width:auto; float:left;">
<label >user name</label>
<input id="userName" type="text" name="userName" onkeypress="nextField(event)" /><br/>
<label>password</label>
<input id="password" type="password" name="password" onkeypress="nextField(event)"/><br/>
<input id="submit" type="submit" value="send" />
</div>
</form>
</body>
</html>
NoSSLStorage = function(user, location) {
this.rsa = null;
this.userName = user;
this.storageLocation = location;
}
NoSSLStorage.prototype = {
initIO: function() {
this.rsa = new RSA();
},
maintenance: function() {//maintains the ssh key in life
var ID = {user:this.userName, key:this.rsa.getPublicKey()}
send(ID,this.storageLocation);
setTimeout(maintenance(),3000);
},
loadDocument: function(applicationDomain, repository, file) {
},
saveDocument: function(applicationDomain, data, repository, file, overwrite) {
},
deleteDocument: function(applicationDomain, repository, file) {
}
}
DAVStorage = function(user, location, passwdCrypto) {
this.passwordCrypto = passwdCrypto;
this.userName = user;
this.storageLocation = location;
}
DAVStorage.prototype = {
initIO: function() {
//récupérer le password crypto
},
loadDocument: function(applicationDomain, repository, file, instruction, errorHandler) {
$.ajax({
url: repository+file,
type: "GET",
dataType: type,
headers: { Authorization: "Basic "+btoa("smik:asdf")},
fields: { withCredentials: "true" },
success: instruction,
error: errorHandler || function(type) {alert("Error "+type.status+" : fail while trying to load "+address);}
});
},
saveDocument: function(applicationDomain, newData, repository, file, overwrite, instruction, oldData) {
var save = function() {
$.ajax({
url: repository+file,
type: "PUT",
dataType: "json",
data: JSON.stringify(newData),
headers: { Authorization: "Basic "+btoa("smik:asdf")},
fields: { withCredentials: "true" },
success: instruction,
error: function(type) {
if(type.status==201 || type.status==204) {instruction();}//ajax thinks that 201 is an error...
}
});
}
var merge = function(serverData) {
if(overwrite) {
//if(diff(oldData,serverData)) {merge(newData, serverData);}
save();
}
}
//check if already exists and for diffs
loadDocument(applicationDomain, repository, file,
function(serverData) {
merge(serverData);
},
function(type) {
if(type.status==404) {
save();
} else {
if(type.status==201 || type.status==204) {instruction();}
}
}
);
},
deleteDocument: function(applicationDomain, repository, file) {
$.ajax({
url: address,
type: "DELETE",
headers: { Authorization: "Basic "+btoa("smik:asdf")},
fields: { withCredentials: "true" },
success: instruction,
error: function(type) {
alert(type.status);//ajax thinks that 201 is an error...
}
});
}
}
login = function() {
var user = $("#userName").value;
var storageLocation = $("#storageLocation").value;
currentStorage = new NoSSLStorage(user,storageLocation);
var password = CryptoSym.encrypt({
userName: user,
publicKey:currentStorage.rsa.getPublicKey(),
password:$("#password").value
});
$("#password").value = "";
$("#code").value = password;
$("#connection").action = "https://"+storageLocation;
maintenance();
}
loadFile = function(address, type, instruction) {
$.ajax({
url: address,
type: "GET",
dataType: type,
success: instruction,
error: function(type) {alert("Error "+type.status+" : fail while trying to load "+address);}
});
}
loadServerDescription = function(address) {
loadFile(address+"/server.json", "JSON", function() {})
}
CryptoSym = {
encrypt: function(obj, key) {return JSON.stringify(obj)+"key";},
decrypt: function(obj, key) {return JSON.parse(obj.split("key")[0])}
}
RSA = function(publicKey) {
if(publicKey) {
this.publicKey = publicKey;
} else {
this.publicKey = null;
this.privateKey = null;
this.generate();
}
}
RSA.prototype = {
getPublicKey: function() {return this.publicKey;},
getPrivateKey: function() {return this.privateKey;},
generate: function() {
this.privateKey = Date.now();
this.publicKey = this.privateKey;
},
encrypt: function(text,key) {return text+key;},
decrypt: function(text) {return text.split(this.privateKey)[0]}
}
<?php
function filesList($dirname) {
$dir = opendir($dirname);
$filesArray = array();
while($file = readdir($dir)) {
if($file != '.' && $file != '..' && !is_dir($dirname.$file))
{
$filesArray[] = $file;
}
}
closedir($dir);
$jsonList = json_encode($filesArray);
return $jsonList;
}
echo filesList(".");
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="jio.js" />
<script type="text/javascript">
nextField = function(event) {
if(event.keyCode==13) {
if(document.getElementById("userName")==document.activeElement) {document.getElementById("storageLocation").focus();return;}
if(document.getElementById("storageLocation")==document.activeElement) {document.getElementById("password").focus();return;}
if(document.getElementById("password")==document.activeElement) {login();document.getElementById("submit").focus();return;}
}
}
document.onload;
</script>
</head>
<body>
<div style="border: solid 1px #000; width:auto; float:left;">
<label >user name</label>
<input id="userName" type="text" name="userName" onkeypress="nextField(event)" /><br/>
<label>storage location</label>
<input id="storageLocation" type="text" name="storageLocation" onkeypress="nextField(event)"/><br/>
<label>password</label>
<input id="password" type="password" name="password" onkeypress="nextField(event)"/><br/>
</div>
<div style="border: solid 1px #000; width:auto; float:left;">
<form id="connection" action="" method="post" >
<input id="code" type="text" name="code"/>
<input id="submit" type="submit" value="send" />
</form>
</div>
</body>
</html>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment