Monday, November 08, 2010 at 12:05 AM.
system.verbs.builtins.radio.html.viewPasswords
on viewPasswords (pta = nil) {
if pta == nil {
pta = html.getPageTableAddress ()};
local (htmltext = "", indentlevel = 0, passwordName = "", action = "", buttonText = "Add", flEdit = false, errorString = "");
on add (s) {
htmltext = htmltext + string.filledstring ("\t", indentlevel) + s + "\r\n"};
on helpLink (section) {
return (radio.userInterface.helpLink ("passwords#" + section))};
local (adrdata = @user.radio.prefs.passwords);
if defined (pta^.searchArgs) {
action = "?" + pta^.searchArgs; //preserve searchArgs
local (args); new (tableType, @args);
webserver.parseArgs (pta^.searchArgs, @args);
if defined (args.command) {
case args.command {
"editPassword" {
if defined (args.passwordName) {
if defined (adrdata^.[args.passwordName]) {
passwordName = string.urlDecode (args.passwordName);
buttonText = "Submit";
flEdit = true}}}}}};
if pta^.method == "POST" { //handle deleting or adding passwords
local (adrargs = @pta^.radioResponder.postArgs);
<<scratchpad.args = adrargs^; edit (@scratchpad.args)
if defined (adrargs^.createPassword) {
passwordName = adrargs^.passwordName;
local (adrpassword = @adrdata^.[passwordName]);
if defined (adrargs^.originalPassword) { //the user is updating an existing password
flEdit = true;
if defined (adrpassword^) {
if adrargs^.originalPassword == adrpassword^ {
if sizeOf (adrargs^.password) > 3 {
if adrargs^.password == adrargs^.repeatPassword {
adrpassword^ = adrargs^.password}
else {
errorString = "Can't edit the password, '" + passwordName + "', because the new password doesn't match the repeat password."}}
else {
errorString = "Can't set the new password because it is not at least four characters long."}}
else {
errorString = "Can't edit the password, '" + passwordName + "', because the original password you entered is incorrect."}}
else {
errorString = "Can't edit the password, '" + passwordName + "', because no password with that name exists."}}
else { //the user is creating a new password
if sizeOf (adrargs^.password) > 3 {
if adrargs^.password == adrargs^.repeatPassword {
adrpassword^ = adrargs^.password}
else {
errorString = "Can't create the password, '" + passwordName + "', because the password doesn't match the repeat password."}}
else {
errorString = "Can't create the password because it is not at least four characters long."}}}};
add ("<form method=\"POST\" action=\"" + action + "\">"); indentlevel++;
bundle { //add the password entry form
add ("To create a new password, type the name of the password, and the password itself into the form below.<p>");
add ("<blockquote>"); indentlevel++;
add ("<table>"); indentlevel++;
if errorString != "" {
add ("<tr><td colspan=\"3\"><font color=\"red\">" + errorString + "</font><br> </td></tr>")};
add ("<tr>"); indentlevel++;
add ("<td align=\"right\">" + "Password name:</td>");
add ("<td valign=\"top\"><input type=\"text\" name=\"passwordName\" size=\"35\" maxlength=\"255\" value=\"" + passwordName + "\"></td>");
add ("<td><input type=\"submit\" name=\"createPassword\" value=\"" + buttonText + "\"></td>");
add ("</tr>"); indentlevel--;
if flEdit {
add ("<tr>"); indentlevel++;
add ("<td align=\"right\">" + "Original password:</td>");
add ("<td valign=\"top\"><input type=\"password\" name=\"originalPassword\" size=\"12\" maxlength=\"255\" value=\"\"></td>");
add ("</tr>"); indentlevel--};
add ("<tr>"); indentlevel++;
if flEdit {
add ("<td align=\"right\">" + "New password:</td>")}
else {
add ("<td align=\"right\">" + "Password:</td>")};
add ("<td valign=\"top\" colspan=\"2\"><input type=\"password\" name=\"password\" size=\"12\" maxlength=\"255\" value=\"\"></td>");
add ("</tr>"); indentlevel--;
add ("<tr>"); indentlevel++;
add ("<td align=\"right\">" + "Repeat:</td>");
add ("<td valign=\"top\"><input type=\"password\" name=\"repeatPassword\" size=\"12\" maxlength=\"255\" value=\"\"></td>");
add ("<td colspan=\"3\" align=\"right\">" + helpLink ("addPassword") + "</td>");
add ("</tr>"); indentlevel--;
add ("</table>"); indentlevel--;
add ("</blockquote>"); indentlevel--};
bundle { //add the text at the top of the page
add ("The following table lists your passwords by name. To delete a password, check the box to its left, and then click on the Delete button. You can edit a password by clicking its Edit button. " + helpLink ("passwordList") + "<p>")};
add ("<blockquote>"); indentlevel++;
add ("<table><tr>"); indentlevel++;
add ("<td>"); indentlevel++;
bundle { //add passwords table
add ("<table cellspacing=\"0\" cellpadding=\"0\"><tr bgcolor=\"" + radio.data.htmlColors.framecolor + "\"><td>"); indentlevel++;
add ("<table border=\"0\" cellspacing=\"1\" cellpadding=\"5\">"); indentlevel++;
local (adr, ct = 0);
for adr in adrdata {
local (name = nameOf (adr^));
add ("<tr bgcolor=\"" + radio.data.htmlColors.cellbgcolor + "\">"); indentlevel++;
bundle { //add checkbox
local (name = nameof (adr^));
local (checkboxval = "\"xxx\"");
if false {
checkboxval = checkboxval + " checked"};
add ("<td valign=\"top\"><input type=\"checkbox\" name=\"" + name + "\" value=" + checkboxval + "></td>");
add ("<td valign=\"top\" nowrap>" + name + "</td>");
add ("<td valign=\"top\" title=\"Click to edit this password.\"><a href=\"?command=editPassword&passwordName=" + name + "\">" + radio.images.systemImageRef ("icons/editButton") + "</a></td>")};
add ("</tr>"); indentlevel--};
add ("</table>"); indentlevel--;
add ("</td></tr></table>"); indentlevel--};
add ("</td>"); indentlevel--;
add ("<td valign=\"top\"> <input type=\"submit\" name=\"delete\" value=\"Delete\"></td>");
add ("</tr></table>"); indentlevel--;
add ("</blockquote>"); indentlevel--;
add ("</form>"); indentlevel--;
return (htmltext)}
<<bundle //debugging
<<viewPasswords (@scratchpad.paramTable)
This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.