mod so one can set passwords a) for pads that are in no group and b) via the web interface

This commit is contained in:
jaseg 2011-12-06 22:00:42 +01:00
parent b0976a292f
commit dc8ff69553
5 changed files with 66 additions and 29 deletions

View file

@ -280,11 +280,11 @@ Example returns:
exports.setPublicStatus = function(padID, publicStatus, callback) exports.setPublicStatus = function(padID, publicStatus, callback)
{ {
//ensure this is a group pad //ensure this is a group pad
if(padID.indexOf("$") == -1) /*if(padID.indexOf("$") == -1)
{ {
callback({stop: "You can only get/set the publicStatus of pads that belong to a group"}); callback({stop: "You can only get/set the publicStatus of pads that belong to a group"});
return; return;
} }*/
//get the pad //get the pad
getPadSafe(padID, true, function(err, pad) getPadSafe(padID, true, function(err, pad)
@ -349,8 +349,8 @@ exports.setPassword = function(padID, password, callback)
//ensure this is a group pad //ensure this is a group pad
if(padID.indexOf("$") == -1) if(padID.indexOf("$") == -1)
{ {
callback({stop: "You can only get/set the password of pads that belong to a group"}); //callback({stop: "You can only get/set the password of pads that belong to a group"});
return; //return;
} }
//get the pad //get the pad

View file

@ -202,7 +202,7 @@ exports.createGroupPad = function(groupID, padName, text, callback)
} }
}); });
}, },
//ensure pad does not exists //ensure pad does not exist
function (callback) function (callback)
{ {
padManager.doesPadExists(padID, function(err, exists) padManager.doesPadExists(padID, function(err, exists)
@ -278,8 +278,7 @@ function randomString(len)
var randomstring = ''; var randomstring = '';
for (var i = 0; i < len; i++) for (var i = 0; i < len; i++)
{ {
var rnum = Math.floor(Math.random() * chars.length); randomstring += chars[Math.floor(Math.random() * chars.length)];
randomstring += chars.substring(rnum, rnum + 1);
} }
return randomstring; return randomstring;
} }

View file

@ -52,7 +52,7 @@ Class('Pad', {
publicStatus : { publicStatus : {
is: 'rw', is: 'rw',
init: false, init: true,
getterName : 'getPublicStatus' getterName : 'getPublicStatus'
}, //publicStatus }, //publicStatus
@ -486,7 +486,11 @@ Class('Pad', {
}, },
setPassword: function(password) setPassword: function(password)
{ {
this.passwordHash = password == null ? null : hash(password, generateSalt()); if(password == null){
this.passwordHash = null;
}else{
this.passwordHash = hash(password, generateSalt());
}
db.setSub("pad:"+this.id, ["passwordHash"], this.passwordHash); db.setSub("pad:"+this.id, ["passwordHash"], this.passwordHash);
}, },
isCorrectPassword: function(password) isCorrectPassword: function(password)
@ -516,8 +520,7 @@ function generateSalt()
var randomstring = ''; var randomstring = '';
for (var i = 0; i < len; i++) for (var i = 0; i < len; i++)
{ {
var rnum = Math.floor(Math.random() * chars.length); randomstring += chars[Math.floor(Math.random() * chars.length)];
randomstring += chars.substring(rnum, rnum + 1);
} }
return randomstring; return randomstring;
} }

View file

@ -35,7 +35,7 @@ var sessionManager = require("./SessionManager");
exports.checkAccess = function (padID, sessionID, token, password, callback) exports.checkAccess = function (padID, sessionID, token, password, callback)
{ {
// it's not a group pad, means we can grant access // it's not a group pad, means we can grant access
if(padID.indexOf("$") == -1) /*if(padID.indexOf("$") == -1)
{ {
//get author for this token //get author for this token
authorManager.getAuthor4Token(token, function(err, author) authorManager.getAuthor4Token(token, function(err, author)
@ -46,7 +46,7 @@ exports.checkAccess = function (padID, sessionID, token, password, callback)
//don't continue //don't continue
return; return;
} }*/
var groupID = padID.split("$")[0]; var groupID = padID.split("$")[0];
var padExists = false; var padExists = false;

View file

@ -69,7 +69,7 @@
font-weight: bold; font-weight: bold;
font-size: 15px font-size: 15px
} }
input[type="text"] { input[type="text"], input[type="password"] {
width: 243px; width: 243px;
padding: 10px 47px 10px 10px; padding: 10px 47px 10px 10px;
background: #fff; background: #fff;
@ -77,6 +77,12 @@
outline: none; outline: none;
border-radius: 3px; border-radius: 3px;
text-shadow: 0 0 1px #fff text-shadow: 0 0 1px #fff
}
#usepwlabel {
display: inline;
}
#usePasswordContainer {
margin: 10px 0 5px 0
} }
input[type="submit"] { input[type="submit"] {
width: 45px; width: 45px;
@ -88,39 +94,68 @@
</style> </style>
<link href="static/custom/index.css" rel="stylesheet"> <link href="static/custom/index.css" rel="stylesheet">
<script src="static/custom/index.js"></script> <script src="static/custom/index.js"></script>
<script src="static/js/jquery.min.js"></script>
<div id="container"> <div id="container">
<div id="button" onclick="go2Random()">New Pad</div><br><div id="label">or create/open a Pad with the name</div> <div id="button" onclick="go2Random()">New Pad</div><br><div id="label">or create/open a Pad with the name</div>
<form action="#" onsubmit="go2Name();return false;"> <form action="#" onsubmit="go2Name();return false;">
<input type="text" id="padname" autofocus> <input type="text" id="padname" autofocus/>
<input type="submit" value="OK"> <input type="submit" value="OK"/><br/>
<div id="usePasswordContainer"><input type="checkbox" id="usePassword" onclick="updatePasswordField()"/><label for="usePassword"><div id="usepwlabel">Use password</div></label></div>
<div id="passwordFieldContainer"><input type="password" id="passwordField"/></div>
</form> </form>
</div> </div>
<script> <script>
function go2Name() function go2Name()
{ {
var padname = document.getElementById("padname").value; var padname = $("#padname").val();
padname.length > 0 ? window.location = "p/" + padname : alert("Please enter a name") if(padname.length > 0){
if($("#passwordField").val().length>0)
{
$.get("api/1/createPad", {apikey: "o8PJ496RtbcwoMQGgDyjoOmyq5wJ8dON", padID: padname}, function(data){
$.get("api/1/setPassword", {apikey: "o8PJ496RtbcwoMQGgDyjoOmyq5wJ8dON", padID: padname, password: $("#passwordField").val()}, function(data){
window.location = "p/" + padname;
});
});
}
else
{
window.location = "p/" + padname;
}
}
else
{
alert("Please enter a name");
}
} }
function go2Random() function go2Random()
{ {
window.location = "p/" + randomPadName(); $("#padname").val(randomPadName());
go2Name();
} }
function randomPadName() function randomPadName()
{ {
var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
var string_length = 10;
var randomstring = ''; var randomstring = '';
for (var i = 0; i < string_length; i++) for (var i = 0; i < 10; i++)
{ {
var rnum = Math.floor(Math.random() * chars.length); randomstring += chars[Math.floor(Math.random() * chars.length)];
randomstring += chars.substring(rnum, rnum + 1);
} }
return randomstring; return randomstring;
} }
//start the costum js function updatePasswordField()
if(typeof costumStart == "function") costumStart(); {
if($("#usePassword:checked").val()){
$("#passwordFieldContainer").css("display", "block");
}
else
{
$("#passwordFieldContainer").css("display", "none");
}
}
updatePasswordField();
if(typeof customStart == "function") customStart();
</script> </script>
</html> </html>