/********************************************************************** * * usersaction.cpp -- managing users * Copyright (C) 1999 DigiLib Systems Limited, New Zealand * * A component of the Greenstone digital library software * from the New Zealand Digital Library Project at the * University of Waikato, New Zealand. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * *********************************************************************/ #include "gsdl_modules_cfg.h" #ifdef GSDL_USE_USERS_ACTION #include "usersaction.h" #include "fileutil.h" /////////////// // usersaction /////////////// usersaction::usersaction () { // this action uses cgi variable "a" cgiarginfo arg_ainfo; arg_ainfo.shortname = "a"; arg_ainfo.longname = "action"; arg_ainfo.multiplechar = true; arg_ainfo.defaultstatus = cgiarginfo::weak; arg_ainfo.argdefault = "um"; // user management arg_ainfo.savedarginfo = cgiarginfo::must; argsinfo.addarginfo (NULL, arg_ainfo); // "uma" arg_ainfo.shortname = "uma"; arg_ainfo.longname = "user management action"; arg_ainfo.multiplechar = true; arg_ainfo.defaultstatus = cgiarginfo::weak; arg_ainfo.argdefault = "listusers"; arg_ainfo.savedarginfo = cgiarginfo::mustnot; argsinfo.addarginfo (NULL, arg_ainfo); // "umun" arg_ainfo.shortname = "umun"; arg_ainfo.longname = "user management user name"; arg_ainfo.multiplechar = true; arg_ainfo.defaultstatus = cgiarginfo::weak; arg_ainfo.argdefault = g_EmptyText; arg_ainfo.savedarginfo = cgiarginfo::mustnot; argsinfo.addarginfo (NULL, arg_ainfo); // "umpw" arg_ainfo.shortname = "umpw"; arg_ainfo.longname = "user management password"; arg_ainfo.multiplechar = true; arg_ainfo.defaultstatus = cgiarginfo::weak; arg_ainfo.argdefault = g_EmptyText; arg_ainfo.savedarginfo = cgiarginfo::mustnot; argsinfo.addarginfo (NULL, arg_ainfo); // "umnpw1" arg_ainfo.shortname = "umnpw1"; arg_ainfo.longname = "user management new password 1"; arg_ainfo.multiplechar = true; arg_ainfo.defaultstatus = cgiarginfo::weak; arg_ainfo.argdefault = g_EmptyText; arg_ainfo.savedarginfo = cgiarginfo::mustnot; argsinfo.addarginfo (NULL, arg_ainfo); // "umnpw2" arg_ainfo.shortname = "umnpw2"; arg_ainfo.longname = "user management new password 2"; arg_ainfo.multiplechar = true; arg_ainfo.defaultstatus = cgiarginfo::weak; arg_ainfo.argdefault = g_EmptyText; arg_ainfo.savedarginfo = cgiarginfo::mustnot; argsinfo.addarginfo (NULL, arg_ainfo); // "umus" arg_ainfo.shortname = "umus"; arg_ainfo.longname = "user management account status"; arg_ainfo.multiplechar = true; arg_ainfo.defaultstatus = cgiarginfo::weak; arg_ainfo.argdefault = g_EmptyText; arg_ainfo.savedarginfo = cgiarginfo::mustnot; argsinfo.addarginfo (NULL, arg_ainfo); // "umug" arg_ainfo.shortname = "umug"; arg_ainfo.longname = "user management groups"; // comma seperated list arg_ainfo.multiplechar = true; arg_ainfo.defaultstatus = cgiarginfo::weak; arg_ainfo.argdefault = g_EmptyText; arg_ainfo.savedarginfo = cgiarginfo::mustnot; argsinfo.addarginfo (NULL, arg_ainfo); // "umc" arg_ainfo.shortname = "umc"; arg_ainfo.longname = "user management comment"; arg_ainfo.multiplechar = true; arg_ainfo.defaultstatus = cgiarginfo::weak; arg_ainfo.argdefault = g_EmptyText; arg_ainfo.savedarginfo = cgiarginfo::mustnot; argsinfo.addarginfo (NULL, arg_ainfo); // "bcp" arg_ainfo.shortname = "bcp"; arg_ainfo.longname = "change password submit button"; arg_ainfo.multiplechar = true; arg_ainfo.defaultstatus = cgiarginfo::weak; arg_ainfo.argdefault = g_EmptyText; arg_ainfo.savedarginfo = cgiarginfo::mustnot; argsinfo.addarginfo (NULL, arg_ainfo); // "beu" arg_ainfo.shortname = "beu"; arg_ainfo.longname = "edit user submit button"; arg_ainfo.multiplechar = true; arg_ainfo.defaultstatus = cgiarginfo::weak; arg_ainfo.argdefault = g_EmptyText; arg_ainfo.savedarginfo = cgiarginfo::mustnot; argsinfo.addarginfo (NULL, arg_ainfo); // "cm" arg_ainfo.shortname = "cm"; arg_ainfo.longname = "confirm an action"; arg_ainfo.multiplechar = true; arg_ainfo.defaultstatus = cgiarginfo::weak; arg_ainfo.argdefault = g_EmptyText; arg_ainfo.savedarginfo = cgiarginfo::mustnot; argsinfo.addarginfo (NULL, arg_ainfo); } void usersaction::configure (const text_t &key, const text_tarray &cfgline) { action::configure (key, cfgline); } bool usersaction::init (ostream &logout) { if (dbhome.empty()) { logout << "ERROR (usersaction::init) dbhome is not set\n"; return false; } return action::init (logout); } bool usersaction::check_cgiargs (cgiargsinfoclass &/*argsinfo*/, cgiargsclass &args, recptprotolistclass * /*protos*/, ostream &/*logout*/) { args["uan"] = "1"; // user authentication is needed if (args["uma"] == "changepasswd") { // no particular group is needed to change a password args["ug"].clear(); } else { // administrator is needed for all other management tasks args["ug"] = "administrator"; } return true; } void usersaction::get_cgihead_info (cgiargsclass &/*args*/, recptprotolistclass * /*protos*/, response_t &response, text_t &response_data, ostream &/*logout*/) { response = content; response_data = "text/html"; } bool usersaction::do_action (cgiargsclass &args, recptprotolistclass * /*protos*/, browsermapclass * /*browsers*/, displayclass &disp, outconvertclass &outconvert, ostream &textout, ostream &logout) { if (args["uma"] == "adduser" || args["uma"] == "edituser") { // adduser is handled by edituser return do_edituser (args, disp, outconvert, textout, logout); } else if (args["uma"] == "deleteuser") { return do_deleteuser (args, disp, outconvert, textout, logout); } else if (args["uma"] == "changepasswd") { return do_changepasswd (args, disp, outconvert, textout, logout); } // default return do_listusers (args, disp, outconvert, textout, logout); } bool usersaction::do_listusers (cgiargsclass &/*args*/, displayclass &disp, outconvertclass &outconvert, ostream &textout, ostream &/*logout*/) { textout << outconvert << disp << "_userslistusers:header_\n_userslistusers:contentstart_\n"; text_tarray userlist; // get user list user_database->get_user_list (userlist); // sort the list sort(userlist.begin(), userlist.end()); // output the information for each user userinfo_t userinfo; text_tarray::iterator users_here = userlist.begin(); text_tarray::iterator users_end = userlist.end(); while (users_here != users_end) { if (user_database->get_user_info(*users_here, userinfo) == ERRNO_SUCCEED) { textout << outconvert << disp << "