mirror of
https://gitea.psi.ch/ELOG/elog.git
synced 2026-09-08 17:13:56 +00:00
Added guest menu and user_email
SVN revision: 186
This commit is contained in:
parent
4e88e0da64
commit
f53a91cd00
@ -319,6 +319,23 @@ special command in addition to the above commands: The command <b><code>Last x</
|
|||||||
behaviour without the "<I>Find Menu commands</I>" option.
|
behaviour without the "<I>Find Menu commands</I>" option.
|
||||||
<p>
|
<p>
|
||||||
|
|
||||||
|
<li><b><code>Guest Menu commands = <list></code></b>
|
||||||
|
</br>
|
||||||
|
This option specifies the menu commands for guest logins. A guest login happens if a
|
||||||
|
password file is used, but someone accesses the logbook for the first time, which means
|
||||||
|
that no username/password is given. In that case the commands from the guest menu
|
||||||
|
are displayed, which usually contain a subset of the normal commands. A typical scenario
|
||||||
|
is a logbook which only has commands to read the logbook on the guest menu, but no
|
||||||
|
commands to write/edit entries. Instead, the <b>login</b> command is given in the guest
|
||||||
|
menu, with which one can login as a real user (username and password have to match those
|
||||||
|
from the password file), which then allowes full access via the <b>"Menu commands"</b> list.
|
||||||
|
A typical example for the menu settings for this scenario are:<p>
|
||||||
|
<pre>
|
||||||
|
Menu commands = New, Edit, Reply, Find, Last 10, Change password, Logout, Help
|
||||||
|
Guest menu commands = Find, Last 10, Login, Help
|
||||||
|
</pre>
|
||||||
|
<p>
|
||||||
|
|
||||||
<li><b><code>Bottom text = <file></code></b>
|
<li><b><code>Bottom text = <file></code></b>
|
||||||
</br>
|
</br>
|
||||||
If this option is present, the HTML contents of <b><code>file</code></b> is displayed at
|
If this option is present, the HTML contents of <b><code>file</code></b> is displayed at
|
||||||
@ -500,7 +517,8 @@ text. This text can contain arbitrary fixed text and following values:
|
|||||||
<LI><b>$host</b>: The host name where <code><b>elogd</b></code> is running
|
<LI><b>$host</b>: The host name where <code><b>elogd</b></code> is running
|
||||||
<LI><b>$remote_host</b>: The host name of the host from with the entry was submitted
|
<LI><b>$remote_host</b>: The host name of the host from with the entry was submitted
|
||||||
<LI><b>$short_name</b>: The login name (if password file is present)
|
<LI><b>$short_name</b>: The login name (if password file is present)
|
||||||
<LI><b>$long_name</b>: The full name (if password file is present)
|
<LI><b>$long_name</b>: The full name from the password file for the current user
|
||||||
|
<LI><b>$user_email</b>: The email address from the password file for the current user
|
||||||
<LI><b>$logbook</b>: The name of the current logbook
|
<LI><b>$logbook</b>: The name of the current logbook
|
||||||
<LI><b>$date</b>: The current date, formatted via "<I>Date format</I>"
|
<LI><b>$date</b>: The current date, formatted via "<I>Date format</I>"
|
||||||
</UL>
|
</UL>
|
||||||
@ -570,21 +588,25 @@ must be re-entered.
|
|||||||
An alternative to the read/write/admin passwords is the user level access with a
|
An alternative to the read/write/admin passwords is the user level access with a
|
||||||
password file. This file contains user names and passwords in following format:
|
password file. This file contains user names and passwords in following format:
|
||||||
<p>
|
<p>
|
||||||
<ul><code><pre><login name1>:<password1>:<full name1>
|
<ul><code><pre><login name1>:<password1>:<full name1>:<email1>
|
||||||
<login name2>:<password2>:<full name2>
|
<login name2>:<password2>:<full name2>:<email1>
|
||||||
<login name3>:<password3>:<full name3>
|
<login name3>:<password3>:<full name3>:<email1>
|
||||||
...</pre></code></ul>
|
...</pre></code></ul>
|
||||||
<p>
|
<p>
|
||||||
The passwords are encoded. To create or change them, use the "<I>Change
|
The passwords are encoded. To create or change them, use the "<I>Change
|
||||||
Password</I>" menu point. To create a new user, edit the password file
|
Password</I>" menu point. To create a new user, edit the password file
|
||||||
manually and use an empty password (like "<code><login name>::<full name></code>"), which can then be changed via the "<I>Change password</I>" menu point.
|
manually and use an empty password (like "<code><login name>::<full name>:<email></code>"), which can then be changed via the "<I>Change password</I>" menu point.
|
||||||
<p>
|
<p>
|
||||||
The presence of a password file requires all users to "<I>log in</I>" using their name and
|
The presence of a password file requires all users to "<I>log in</I>" using their name and
|
||||||
password. An additional advantage of this method is that the user name can be used as
|
password, excep when a guest login is allowed via the <b>"Guest menu commands"</b> option.
|
||||||
|
An additional advantage of this method is that the user name can be used as
|
||||||
an attribute value for creating logbook entries. For example, the following line could be
|
an attribute value for creating logbook entries. For example, the following line could be
|
||||||
added to the configuration file to fill in the <i>Author</i> attribute with the user name:
|
added to the configuration file to fill in the <i>Author</i> and the <i>Email</i> attributes
|
||||||
|
with the current user name and email:
|
||||||
<p>
|
<p>
|
||||||
<ul><code>Options Author = $long_name from $remote_host</code></ul>
|
<ul><code>Attributes = Author, Email, ...</code></ul>
|
||||||
|
<ul><code>Options Author = $long_name from $remote_host<br>
|
||||||
|
Options Email = $user_email</code></ul>
|
||||||
<p>
|
<p>
|
||||||
Thus the author name is not user-input anymore, ensuring the entry always contains the
|
Thus the author name is not user-input anymore, ensuring the entry always contains the
|
||||||
actual user name. For a full listing of substitutions, see the "<I>Subst <attrib></I>" option.
|
actual user name. For a full listing of substitutions, see the "<I>Subst <attrib></I>" option.
|
||||||
|
|||||||
109
elogd.c
109
elogd.c
@ -6,8 +6,11 @@
|
|||||||
Contents: Web server program for Electronic Logbook ELOG
|
Contents: Web server program for Electronic Logbook ELOG
|
||||||
|
|
||||||
$Log$
|
$Log$
|
||||||
|
Revision 2.50 2002/07/27 06:52:14 midas
|
||||||
|
Added guest menu and user_email
|
||||||
|
|
||||||
Revision 2.49 2002/07/26 08:40:56 midas
|
Revision 2.49 2002/07/26 08:40:56 midas
|
||||||
Fixed 'POST' statement containing some blanks
|
Fixed type
|
||||||
|
|
||||||
Revision 2.48 2002/07/25 15:37:26 midas
|
Revision 2.48 2002/07/25 15:37:26 midas
|
||||||
Fixed bug with ss_find_file under unix
|
Fixed bug with ss_find_file under unix
|
||||||
@ -251,7 +254,7 @@
|
|||||||
\********************************************************************/
|
\********************************************************************/
|
||||||
|
|
||||||
/* Version of ELOG */
|
/* Version of ELOG */
|
||||||
#define VERSION "2.0.5"
|
#define VERSION "2.0.6"
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
@ -3249,6 +3252,15 @@ int i, j;
|
|||||||
rsprintf("<font size=3 face=verdana,arial,helvetica,sans-serif color=%s><b> %s \"%s\"<b></font></td>\n",
|
rsprintf("<font size=3 face=verdana,arial,helvetica,sans-serif color=%s><b> %s \"%s\"<b></font></td>\n",
|
||||||
gt("Title fontcolor"), loc("Logged in as"), getparam("full_name"));
|
gt("Title fontcolor"), loc("Logged in as"), getparam("full_name"));
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (getcfg(logbook, "Guest menu commands", str))
|
||||||
|
{
|
||||||
|
rsprintf("<td bgcolor=%s align=center>", gt("Title BGColor"));
|
||||||
|
rsprintf("<font size=3 face=verdana,arial,helvetica,sans-serif color=%s><b> %s<b></font></td>\n",
|
||||||
|
gt("Title fontcolor"), loc("Not logged in"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* right cell */
|
/* right cell */
|
||||||
rsprintf("<td bgcolor=%s align=right>", gt("Title BGColor"));
|
rsprintf("<td bgcolor=%s align=right>", gt("Title BGColor"));
|
||||||
@ -3469,6 +3481,11 @@ struct tm *ts;
|
|||||||
strcpy(list[i], "long_name");
|
strcpy(list[i], "long_name");
|
||||||
strcpy(value[i++], getparam("full_name"));
|
strcpy(value[i++], getparam("full_name"));
|
||||||
|
|
||||||
|
/* add email */
|
||||||
|
strcpy(list[i], "user_email");
|
||||||
|
strcpy(value[i], "mailto:");
|
||||||
|
strcat(value[i++], getparam("user_email"));
|
||||||
|
|
||||||
/* add logbook */
|
/* add logbook */
|
||||||
strcpy(list[i], "logbook");
|
strcpy(list[i], "logbook");
|
||||||
strcpy(value[i++], lbs->name);
|
strcpy(value[i++], lbs->name);
|
||||||
@ -3938,7 +3955,8 @@ time_t now;
|
|||||||
/* if attribute cannot be changed, just display text */
|
/* if attribute cannot be changed, just display text */
|
||||||
if ((attr_flags[index] & AF_LOCKED) || (bedit && (attr_flags[index] & AF_FIXED)))
|
if ((attr_flags[index] & AF_LOCKED) || (bedit && (attr_flags[index] & AF_FIXED)))
|
||||||
{
|
{
|
||||||
rsprintf("<td bgcolor=%s>%s\n", gt("Categories bgcolor2"), attrib[index]);
|
rsprintf("<td bgcolor=%s>\n", gt("Categories bgcolor2"));
|
||||||
|
rsputs2(attrib[index]);
|
||||||
|
|
||||||
if (attr_flags[index] & AF_MULTI)
|
if (attr_flags[index] & AF_MULTI)
|
||||||
{
|
{
|
||||||
@ -6463,8 +6481,12 @@ BOOL first;
|
|||||||
if (!allow_user(lbs, command))
|
if (!allow_user(lbs, command))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* get menu command */
|
/* check for guest access */
|
||||||
getcfg(lbs->name, "Menu commands", menu_str);
|
if (!getcfg(lbs->name, "Guest Menu commands", menu_str) ||
|
||||||
|
*getparam("unm") != 0)
|
||||||
|
getcfg(lbs->name, "Menu commands", menu_str);
|
||||||
|
|
||||||
|
/* default menu commands */
|
||||||
if (menu_str[0] == 0)
|
if (menu_str[0] == 0)
|
||||||
{
|
{
|
||||||
strcpy(menu_str, loc("New"));
|
strcpy(menu_str, loc("New"));
|
||||||
@ -7459,12 +7481,12 @@ char str[256];
|
|||||||
|
|
||||||
/*------------------------------------------------------------------*/
|
/*------------------------------------------------------------------*/
|
||||||
|
|
||||||
BOOL get_user_line(LOGBOOK *lbs, char *user, char *password, char *full_name)
|
BOOL get_user_line(LOGBOOK *lbs, char *user, char *password, char *full_name, char *email)
|
||||||
{
|
{
|
||||||
char str[256], line[256], file_name[256], *p;
|
char str[256], line[256], file_name[256], *p;
|
||||||
FILE *f;
|
FILE *f;
|
||||||
|
|
||||||
password[0] = full_name[0] = 0;
|
password[0] = full_name[0] = email[0] = 0;
|
||||||
getcfg(lbs->name, "Password file", str);
|
getcfg(lbs->name, "Password file", str);
|
||||||
|
|
||||||
if (str[0] == DIR_SEPARATOR || str[1] == ':')
|
if (str[0] == DIR_SEPARATOR || str[1] == ':')
|
||||||
@ -7500,29 +7522,27 @@ FILE *f;
|
|||||||
}
|
}
|
||||||
fclose(f);
|
fclose(f);
|
||||||
|
|
||||||
/* if user found, check password */
|
/* if user found, retrieve other info */
|
||||||
p = line+strlen(user);
|
p = strtok(line, ":");
|
||||||
if (*p)
|
|
||||||
p++;
|
|
||||||
|
|
||||||
strcpy(str, p);
|
if (p)
|
||||||
if (strchr(str, ':'))
|
{
|
||||||
*strchr(str, ':') = 0;
|
p = strtok(NULL, ":");
|
||||||
|
if (p)
|
||||||
strcpy(password, str);
|
{
|
||||||
|
strcpy(password, p);
|
||||||
p += strlen(str);
|
p = strtok(NULL, ":");
|
||||||
if (*p)
|
if (p)
|
||||||
p++;
|
{
|
||||||
strcpy(str, p);
|
strcpy(full_name, p);
|
||||||
if (strchr(str, ':'))
|
p = strtok(NULL, ":");
|
||||||
*strchr(str, ':') = 0;
|
if (p)
|
||||||
if (strchr(str, '\r'))
|
{
|
||||||
*strchr(str, '\r') = 0;
|
strcpy(email, p);
|
||||||
if (strchr(str, '\n'))
|
}
|
||||||
*strchr(str, '\n') = 0;
|
}
|
||||||
|
}
|
||||||
strcpy(full_name, str);
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@ -7534,12 +7554,16 @@ FILE *f;
|
|||||||
|
|
||||||
BOOL check_user_password(LOGBOOK *lbs, char *user, char *password, char *redir)
|
BOOL check_user_password(LOGBOOK *lbs, char *user, char *password, char *redir)
|
||||||
{
|
{
|
||||||
char str[256], upwd[256], full_name[256];
|
char str[256], upwd[256], full_name[256], email[256];
|
||||||
|
|
||||||
if (get_user_line(lbs, user, upwd, full_name))
|
if (get_user_line(lbs, user, upwd, full_name, email))
|
||||||
{
|
{
|
||||||
if (user[0] && strcmp(password, upwd) == 0)
|
if (user[0] && strcmp(password, upwd) == 0)
|
||||||
|
{
|
||||||
|
setparam("full_name", full_name);
|
||||||
|
setparam("user_email", email);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
/* show login password page */
|
/* show login password page */
|
||||||
show_standard_header("ELOG login", NULL);
|
show_standard_header("ELOG login", NULL);
|
||||||
@ -7946,12 +7970,25 @@ LOGBOOK *cur_lb;
|
|||||||
|
|
||||||
/*---- show ELog page --------------------------------------------*/
|
/*---- show ELog page --------------------------------------------*/
|
||||||
|
|
||||||
|
|
||||||
/* if password file given, check password and user name */
|
/* if password file given, check password and user name */
|
||||||
if (getcfg(logbook, "Password file", str))
|
if (getcfg(logbook, "Password file", str))
|
||||||
{
|
{
|
||||||
logf("Connection of user \"%s\"",getparam("unm"));
|
/* check if guest access */
|
||||||
if (!check_user_password(cur_lb, getparam("unm"), getparam("upwd"), path))
|
if (getcfg(cur_lb->name, "Guest menu commands", str) && *getparam("unm") == 0)
|
||||||
return;
|
logf("Guest access");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
logf("Connection of user \"%s\"",getparam("unm"));
|
||||||
|
if (!check_user_password(cur_lb, getparam("unm"), getparam("upwd"), path))
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (equal_ustring(command, loc("Login")))
|
||||||
|
{
|
||||||
|
check_user_password(cur_lb, "", "", path);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (equal_ustring(command, loc("New")) ||
|
if (equal_ustring(command, loc("New")) ||
|
||||||
@ -8089,7 +8126,7 @@ char *p, *pitem;
|
|||||||
if (p[strlen(p)-1] == '/')
|
if (p[strlen(p)-1] == '/')
|
||||||
p[strlen(p)-1] = 0;
|
p[strlen(p)-1] = 0;
|
||||||
|
|
||||||
p = strtok(p,"&");
|
p = strtok(p, "&");
|
||||||
while (p != NULL)
|
while (p != NULL)
|
||||||
{
|
{
|
||||||
pitem = p;
|
pitem = p;
|
||||||
@ -8102,7 +8139,7 @@ char *p, *pitem;
|
|||||||
|
|
||||||
setparam(pitem, p);
|
setparam(pitem, p);
|
||||||
|
|
||||||
p = strtok(NULL,"&");
|
p = strtok(NULL, "&");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user