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.