Changeset 1794


Ignore:
Timestamp:
2000-12-15T13:03:42+13:00 (23 years ago)
Author:
sjboddie
Message:

Added ability to view gsdlsite.cfg and view/edit main.cfg configuration
files from within the status action.
Also added a "change password" link as it was previously impossible for
someone without administrator privileges to change their password.

Location:
trunk/gsdl
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/gsdl/macros/status.dm

    r1494 r1794  
    2828  </tr>
    2929</table>
     30<center>
     31<table width=_pagewidth_><tr><td>
    3032}
    3133
    3234_infofooter_ {
     35</td></tr></table>
    3336<p> _iconblankbar_
    3437</body>
     
    6568<a href="_gwcgi_?e=_compressedoptions_&a=um&uma=listusers" target=infoframe>_textlistusers_</a><br>
    6669<a href="_gwcgi_?e=_compressedoptions_&a=um&uma=adduser" target=infoframe>_textaddusers_</a><br>
     70<a href="_gwcgi_?e=_compressedoptions_&a=um&uma=changepasswd" target=infoframe>_textchangepasswd_</a>
    6771)
    6872
     
    7377<a href="_gwcgi_?e=_compressedoptions_&a=status&sp=browserinfo" target=infoframe>_textbrowsers_</a><br>
    7478<a href="_gwcgi_?e=_compressedoptions_&a=status&sp=protocolinfo" target=infoframe>_textprotocols_</a>
     79
     80<p><b>_textconfigfiles_</b><br>
     81<a href="_gwcgi_?e=_compressedoptions_&a=status&sp=gsdlsite" target=infoframe>_textgsdlsite_</a><br>
     82<a href="_gwcgi_?e=_compressedoptions_&a=status&sp=maincfg" target=infoframe>_textmaincfg_</a>
    7583
    7684<p><b>_textlogs_</b><br>
     
    8492_textlistusers_ {list users}
    8593_textaddusers_ {add a new user}
     94_textchangepasswd_ {change password}
    8695
    8796_textinfo_ {Information}
     
    91100_textbrowsers_ {browsers}
    92101_textprotocols_ {protocols}
     102
     103_textconfigfiles_ {Configuration files}
     104_textgsdlsite_ {gsdlsite.cfg}
     105_textmaincfg_ {main.cfg}_
    93106
    94107_textlogs_ {Logs}
     
    132145</center>
    133146}
     147
     148_maincfg_ {
     149<form name="maincfgform" method=post action="_gwcgi_">
     150<input type=hidden name="sp" value="changemaincfg">
     151<input type=hidden name="e" value="_decodedcompressedoptions_">
     152<p>_If_(_maincfgfile_,<textarea name="cfgfile" cols=72 rows=18 wrap=off>
     153_maincfgfile_
     154</textarea><input type=submit value="Submit Changes"><input type=reset>,
     155Error opening main.cfg)
     156</form>
     157}
     158
     159_changemaincfgfail_ {
     160<html>
     161<body bgcolor="\#ffffff" text="\#000000">
     162Failed to update main.cfg
     163_footer_
     164}
     165
     166_changemaincfgsuccess_ {
     167<html>
     168<body bgcolor="\#ffffff" text="\#000000">
     169main.cfg updated successfully
     170_footer_
     171}
     172
  • trunk/gsdl/macros/users.dm

    r1129 r1794  
    139139package userschangepasswd
    140140
    141 _pagetitle_ {Change password}
    142 _imagethispage_ {_imagegreenstone_}
     141_header_ {
     142<html>
     143<head>
     144<title>Change password</title>
     145</head>
     146<body bgcolor="#ffffff" text="#000000" link="#006666"
     147      alink="#cc9900" vlink="#666633">
     148}
    143149
    144150_content_ {
     
    168174package userschangepasswdok
    169175
    170 _pagetitle_ {Change password}
    171 _imagethispage_ {_imagegreenstone_}
     176_header_ {
     177<html>
     178<head>
     179<title>Change password</title>
     180</head>
     181<body bgcolor="#ffffff" text="#000000" link="#006666"
     182      alink="#cc9900" vlink="#666633">
     183}
    172184
    173185_content_ {
  • trunk/gsdl/src/recpt/statusaction.cpp

    r1759 r1794  
    2727#include "fileutil.h"
    2828#include "htmlutils.h"
     29#include "gsdltools.h"
    2930#include <assert.h>
    3031
     
    744745                   outconvertclass &outconvert,
    745746                   ostream &textout, ostream &/*logout*/) {
    746   if (recpt == NULL) return;
    747   const recptconf &rcinfo = recpt->get_configinfo ();
    748   text_t initfilename = filename_cat (rcinfo.gsdlhome, "etc", "initout.txt");
     747
     748  text_t initfilename = filename_cat (gsdlhome, "etc", "initout.txt");
    749749  char *cinitfilename = initfilename.getcstr();
    750750  if (cinitfilename == NULL) return;
     
    788788                    outconvertclass &outconvert,
    789789                    ostream &textout, ostream &logout) {
    790   if (recpt == NULL) return;
    791   const recptconf &rcinfo = recpt->get_configinfo ();
    792   text_t errfilename = filename_cat (rcinfo.gsdlhome, "etc", "errout.txt");
     790
     791  text_t errfilename = filename_cat (gsdlhome, "etc", "errout.txt");
    793792  char *cerrfilename = errfilename.getcstr();
    794793  if (cerrfilename == NULL) return;
     
    828827
    829828  textout << outconvert << disp << "_status:infofooter_\n";
     829}
     830
     831void statusaction::output_gsdlsite (cgiargsclass &/*args*/, displayclass &disp,
     832                    outconvertclass &outconvert,
     833                    ostream &textout, ostream &logout) {
     834
     835  textout << outconvert << disp << "_status:infoheader_(gsdlsite.cfg)\n";
     836  textout << outconvert << "<h2>gsdlsite.cfg</h2>\n";
     837  logout << flush;
     838
     839#ifdef GSDL_USE_IOS_H
     840  ifstream gsdlsitein ("gsdlsite.cfg", ios::in | ios::nocreate);
     841#else
     842  ifstream gsdlsitein ("gsdlsite.cfg", ios::in);
     843#endif
     844
     845  if (gsdlsitein) {
     846    textout << "<p>The gsdlsite.cfg configuration file contains the\n"
     847        << "following information:\n\n";
     848    text_t gsdlsite = "<p><pre>\n";
     849
     850    char c;
     851    gsdlsitein.get(c);
     852    while (!gsdlsitein.eof ()) {
     853      gsdlsite.push_back(c);
     854      gsdlsitein.get(c);
     855    }
     856   
     857    gsdlsite += "</pre>\n";
     858    gsdlsitein.close();
     859    textout << outconvert << gsdlsite;
     860
     861  } else {
     862    textout << "Couldn't read gsdlsite.cfg configuration file\n";
     863  }
     864
     865  textout << outconvert << disp << "_status:infofooter_\n";
     866}
     867
     868void statusaction::output_maincfg (cgiargsclass &/*args*/, displayclass &disp,
     869                   outconvertclass &outconvert,
     870                   ostream &textout, ostream &/*logout*/) {
     871
     872  text_t maincfgfile = filename_cat (gsdlhome, "etc", "main.cfg");
     873
     874  textout << outconvert << disp << "_status:infoheader_(main.cfg)\n"
     875      << "<h2>main.cfg</h2>\n"
     876      << "<p>The main configuration file, "
     877      << maincfgfile << ", contains the following information:<br>\n\n"
     878      << "(Note that only users belonging to the \"administrator\" group "
     879      << "may edit this file)<br>\n"
     880      << "_status:maincfg_<br>\n"
     881      << "_status:infofooter_\n";
     882}
     883
     884void statusaction::change_maincfg (cgiargsclass &args, displayclass &disp,
     885                   outconvertclass &outconvert,
     886                   ostream &textout, ostream &logout) {
     887
     888  // write out the contents of the cfgfile argument to main.cfg
     889  text_t cfgfile = filename_cat(gsdlhome, "etc", "main.cfg");
     890  char *cfgfilec = cfgfile.getcstr();
     891#ifdef __WIN32__
     892  ofstream cfg_out (cfgfilec, ios::binary);
     893#else
     894  ofstream cfg_out (cfgfilec);
     895#endif
     896 
     897  if (cfg_out) {
     898    // lock the file
     899    int fd = GSDL_GET_FILEDESC(cfg_out);
     900    int lock_val = 1;
     901    GSDL_LOCK_FILE (fd);
     902    if (lock_val != 0) {
     903      logout << "statusaction::change_maincfg: Error: Couldn't lock file " << cfgfilec << "\n";
     904      cfg_out.close();
     905      textout << outconvert << disp << "_status:changemaincfgfail_";
     906     
     907    } else {
     908     
     909      outconvertclass text_t2ascii;
     910      cfg_out << text_t2ascii << args["cfgfile"];
     911      GSDL_UNLOCK_FILE (fd);
     912      cfg_out.close();
     913      textout << outconvert << disp << "_status:changemaincfgsuccess_";
     914    }
     915  } else {
     916    logout << "statusaction::change_maincfg: Error: Couldn't open file " << cfgfilec << "for writing\n";
     917    textout << outconvert << disp << "_status:changemaincfgfail_";
     918  }
    830919}
    831920
     
    869958  arg_ainfo.defaultstatus = cgiarginfo::good;
    870959  arg_ainfo.argdefault = "frameset";
    871   arg_ainfo.savedarginfo = cgiarginfo::can;
     960  arg_ainfo.savedarginfo = cgiarginfo::must;
    872961  argsinfo.addarginfo (NULL, arg_ainfo);
    873962
     
    880969  arg_ainfo.savedarginfo = cgiarginfo::can;
    881970  argsinfo.addarginfo (NULL, arg_ainfo);
     971
     972  arg_ainfo.shortname = "cfgfile";
     973  arg_ainfo.longname = "configuration file contents";
     974  arg_ainfo.multiplechar = true;
     975  arg_ainfo.defaultstatus = cgiarginfo::weak;
     976  arg_ainfo.argdefault = "";
     977  arg_ainfo.savedarginfo = cgiarginfo::mustnot;
     978  argsinfo.addarginfo (NULL, arg_ainfo);
    882979}
    883980
     
    885982}
    886983
    887 bool statusaction::check_cgiargs (cgiargsinfoclass &/*argsinfo*/, cgiargsclass &/*args*/,
     984bool statusaction::check_cgiargs (cgiargsinfoclass &/*argsinfo*/, cgiargsclass &args,
    888985                  ostream &/*logout*/) {
     986
     987  // only users belonging to the "administrator" group may edit
     988  // the main.cfg file
     989  if (args["sp"] == "maincfg" || args["sp"] == "changemaincfg") {
     990    args["uan"] = "1";
     991    args["ug"] = "administrator";
     992  }
    889993  return true;
    890994}
     
    895999  response = content;
    8961000  response_data = "text/html";
     1001}
     1002
     1003
     1004void statusaction::define_internal_macros (displayclass &disp, cgiargsclass &args,
     1005                       recptprotolistclass * /*protos*/, ostream &logout) {
     1006
     1007  // define_internal_macros sets the following macros:
     1008  // _maincfgfile_   the contents of the main.cfg configuration file
     1009
     1010  if (args["sp"] == "maincfg") {
     1011
     1012    // read in main.cfg
     1013    text_t maincfg = filename_cat(gsdlhome, "etc", "main.cfg"); 
     1014    char *maincfgc = maincfg.getcstr();
     1015   
     1016#ifdef GSDL_USE_IOS_H
     1017    ifstream cfg_ifs (maincfgc, ios::in | ios::nocreate);
     1018#else
     1019    ifstream cfg_ifs (maincfgc, ios::in);
     1020#endif
     1021   
     1022    if (cfg_ifs) { 
     1023      text_t cfgtext;
     1024      char c;
     1025      cfg_ifs.get(c);
     1026      while (!cfg_ifs.eof ()) {
     1027    cfgtext.push_back(c);
     1028    cfg_ifs.get(c);
     1029      }
     1030      cfg_ifs.close();
     1031     
     1032      // define it as a macro
     1033      disp.setmacro("maincfgfile", "status", dm_safe(cfgtext));
     1034     
     1035    } else {
     1036      logout << "statusaction::define_internal_macros: couldn't open configuration file ("
     1037         << maincfgc << ") for reading\n";
     1038      disp.setmacro("maincfgfile", "status", "");
     1039    }   
     1040    delete maincfgc;
     1041  }
    8971042}
    8981043
     
    9551100  else if (arg_sp == "initlog") output_initlog (args, disp, outconvert, textout, logout);
    9561101  else if (arg_sp == "errorlog") output_errorlog (args, disp, outconvert, textout, logout);
     1102  else if (arg_sp == "gsdlsite") output_gsdlsite (args, disp, outconvert, textout, logout);
     1103  else if (arg_sp == "maincfg") output_maincfg (args, disp, outconvert, textout, logout);
     1104  else if (arg_sp == "changemaincfg") change_maincfg (args, disp, outconvert, textout, logout);
    9571105  else {
    9581106    output_errorpage (outconvert, textout, logout,
  • trunk/gsdl/src/recpt/statusaction.h

    r1285 r1794  
    8383            ostream &textout, ostream &logout);
    8484
     85  void output_gsdlsite (cgiargsclass &args, displayclass &disp,
     86            outconvertclass &outconvert,
     87            ostream &textout, ostream &logout);
     88
     89  void output_maincfg (cgiargsclass &args, displayclass &disp,
     90               outconvertclass &outconvert,
     91               ostream &textout, ostream &logout);
     92
     93  void change_maincfg (cgiargsclass &args, displayclass &disp,
     94               outconvertclass &outconvert,
     95               ostream &textout, ostream &logout);
     96
    8597  void output_errorpage (outconvertclass &outconvert,
    8698             ostream &textout, ostream &logout,
     
    102114             ostream &logout);
    103115
     116
     117  void define_internal_macros (displayclass &disp, cgiargsclass &args,
     118                   recptprotolistclass *protos, ostream &logout);
     119
    104120  bool do_action (cgiargsclass &args, recptprotolistclass *protos,
    105121          browsermapclass *browsers, displayclass &disp,
Note: See TracChangeset for help on using the changeset viewer.