X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fuseredit.c;h=0da29118649b93ba1bb3c97bcf45e94c13dd2bd9;hb=bc17ed696720ce8a4726f6aaa70171f061319763;hp=494bd4fed5355c1acea821563fdc5882ce586ea6;hpb=728f8b13e0f45cd677895582efe985a596a49f61;p=citadel.git diff --git a/webcit/useredit.c b/webcit/useredit.c index 494bd4fed..0da291186 100644 --- a/webcit/useredit.c +++ b/webcit/useredit.c @@ -1,60 +1,67 @@ /* + * $Id$ + * * Administrative screen to add/change/delete user accounts * */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "webcit.h" #include "webserver.h" - - - void select_user_to_edit(char *message, char *preselect) { char buf[SIZ]; char username[SIZ]; - output_headers(3); /* No room banner on this screen */ + output_headers(1, 1, 2, 0, 0, 0); + wprintf("
\n"); + wprintf("" + "
" + "" + ""); + wprintf(_("Edit or delete users")); + wprintf("
\n" + "
\n
\n" + ); if (message != NULL) wprintf(message); - wprintf("
"); - wprintf("" - "Add/change/delete user accounts" - "
\n"); + wprintf("
\n"); + + svprintf("BOXTITLE", WCS_STRING, _("Add users")); + do_template("beginbox"); + + wprintf(_("To create a new user account, enter the desired " + "user name in the box below and click 'Create'.")); + wprintf("

"); + + wprintf("
\n"); + wprintf(_("New user: ")); + wprintf("
\n" + "" + "
\n", _("Create")); - wprintf("" - "
To edit an existing user account, select the user " - "name from the list and click 'Edit'.

"); + do_template("endbox"); + + wprintf("
"); + + svprintf("BOXTITLE", WCS_STRING, _("Edit or Delete users")); + do_template("beginbox"); + + wprintf(_("To edit an existing user account, select the user " + "name from the list and click 'Edit'.")); + wprintf("

"); - wprintf("
\n"); - wprintf("\n"); serv_puts("LIST"); - serv_gets(buf); + serv_getln(buf, sizeof buf); if (buf[0] == '1') { - while (serv_gets(buf), strcmp(buf, "000")) { - extract(username, buf, 0); + while (serv_getln(buf, sizeof buf), strcmp(buf, "000")) { + extract_token(username, buf, 0, '|', sizeof username); wprintf("
\n"); + wprintf("
\n"); - wprintf(""); - wprintf(""); + wprintf("", _("Edit configuration")); + wprintf("", _("Edit address book entry")); + wprintf("", _("Delete user"), _("Delete this user?")); wprintf("
\n"); - - wprintf("
" - "To create a new user account, enter the desired " - "user name in the box below and click 'Create'.

"); - - wprintf("
\n"); - wprintf("New user: "); - wprintf("
\n" - "" - "
\n"); + do_template("endbox"); wprintf("
\n"); @@ -108,8 +108,8 @@ long locate_user_vcard(char *username, long usernum) { TRYAGAIN: /* Search for the user's vCard */ serv_puts("MSGS ALL"); - serv_gets(buf); - if (buf[0] == '1') while (serv_gets(buf), strcmp(buf, "000")) { + serv_getln(buf, sizeof buf); + if (buf[0] == '1') while (serv_getln(buf, sizeof buf), strcmp(buf, "000")) { ptr = malloc(sizeof(struct stuff_t)); ptr->msgnum = atol(buf); ptr->next = stuff; @@ -119,12 +119,12 @@ TRYAGAIN: /* Iterate through the message list looking for vCards */ while (stuff != NULL) { serv_printf("MSG0 %ld|2", stuff->msgnum); - serv_gets(buf); + serv_getln(buf, sizeof buf); if (buf[0]=='1') { - while(serv_gets(buf), strcmp(buf, "000")) { + while(serv_getln(buf, sizeof buf), strcmp(buf, "000")) { if (!strncasecmp(buf, "part=", 5)) { - extract(partnum, &buf[5], 2); - extract(content_type, &buf[5], 4); + extract_token(partnum, &buf[5], 2, '|', sizeof partnum); + extract_token(content_type, &buf[5], 4, '|', sizeof content_type); if (!strcasecmp(content_type, "text/x-vcard")) { vcard_msgnum = stuff->msgnum; @@ -142,7 +142,7 @@ TRYAGAIN: if (vcard_msgnum < 0) if (already_tried_creating_one == 0) { already_tried_creating_one = 1; serv_puts("ENT0 1|||4"); - serv_gets(buf); + serv_getln(buf, sizeof buf); if (buf[0] == '4') { serv_puts("Content-type: text/x-vcard"); serv_puts(""); @@ -169,16 +169,16 @@ void display_edit_address_book_entry(char *username, long usernum) { /* Locate the user's config room, creating it if necessary */ sprintf(roomname, "%010ld.%s", usernum, USERCONFIGROOM); serv_printf("GOTO %s||1", roomname); - serv_gets(buf); + serv_getln(buf, sizeof buf); if (buf[0] != '2') { serv_printf("CRE8 1|%s|5|||1|", roomname); - serv_gets(buf); + serv_getln(buf, sizeof buf); serv_printf("GOTO %s||1", roomname); - serv_gets(buf); + serv_getln(buf, sizeof buf); if (buf[0] != '2') { sprintf(error_message, - "" - "%s

\n", &buf[4]); + "" + "%s

\n", &buf[4]); select_user_to_edit(error_message, username); return; } @@ -188,9 +188,8 @@ void display_edit_address_book_entry(char *username, long usernum) { if (vcard_msgnum < 0) { sprintf(error_message, - "" - "Could not create/edit vCard" - "

\n" + "%s

\n", + _("An error occurred while trying to create or edit this address book entry.") ); select_user_to_edit(error_message, username); return; @@ -205,14 +204,17 @@ void display_edit_address_book_entry(char *username, long usernum) { /* * Edit a user. If supplied_username is null, look in the "username" * web variable for the name of the user to edit. + * + * If "is_new" is set to nonzero, this screen will set the web variables + * to send the user to the vCard editor next. */ -void display_edituser(char *supplied_username) { - char buf[SIZ]; - char error_message[SIZ]; +void display_edituser(char *supplied_username, int is_new) { + char buf[1024]; + char error_message[1024]; time_t now; - char username[SIZ]; - char password[SIZ]; + char username[256]; + char password[256]; unsigned int flags; int timescalled; int msgsposted; @@ -223,24 +225,24 @@ void display_edituser(char *supplied_username) { int i; if (supplied_username != NULL) { - strcpy(username, supplied_username); + safestrncpy(username, supplied_username, sizeof username); } else { - strcpy(username, bstr("username") ); + safestrncpy(username, bstr("username"), sizeof username); } serv_printf("AGUP %s", username); - serv_gets(buf); + serv_getln(buf, sizeof buf); if (buf[0] != '2') { sprintf(error_message, - "" - "%s

\n", &buf[4]); + "" + "%s

\n", &buf[4]); select_user_to_edit(error_message, username); return; } - extract(username, &buf[4], 0); - extract(password, &buf[4], 1); + extract_token(username, &buf[4], 0, '|', sizeof username); + extract_token(password, &buf[4], 1, '|', sizeof password); flags = extract_int(&buf[4], 2); timescalled = extract_int(&buf[4], 3); msgsposted = extract_int(&buf[4], 4); @@ -249,43 +251,72 @@ void display_edituser(char *supplied_username) { lastcall = extract_long(&buf[4], 7); purgedays = extract_long(&buf[4], 8); - if (!strcmp(bstr("sc"), "Edit address book entry")) { + if (strlen(bstr("edit_abe_button")) > 0) { display_edit_address_book_entry(username, usernum); return; } - output_headers(3); /* No room banner on this screen */ - wprintf("
"); - wprintf("" - "Edit user account: "); + if (strlen(bstr("delete_button")) > 0) { + delete_user(username); + return; + } + + output_headers(1, 1, 2, 0, 0, 0); + wprintf("
\n"); + wprintf("
"); + wprintf(""); + wprintf(_("Edit user account: ")); escputs(username); - wprintf("
\n"); + wprintf("
\n"); + wprintf("\n
\n"); - wprintf("
\n" + wprintf("
" + "
\n"); + wprintf("\n" "\n"); + wprintf("\n" + "\n", + is_new, usernum); wprintf("\n", flags); wprintf("
"); - wprintf("\n"); - wprintf("\n"); + + wprintf("\n"); - wprintf("\n"); - wprintf("\n"); - wprintf("\n"); now = time(NULL); - wprintf(""); - wprintf("\n"); wprintf("
Password" + wprintf("
"); + wprintf(_("Password")); + wprintf("" "
Times logged in" + wprintf("
"); + wprintf(_("Permission to send Internet mail")); + wprintf(""); + wprintf("
"); + wprintf(_("Number of logins")); + wprintf("" "
Messages posted" + wprintf("
"); + wprintf(_("Messages submitted")); + wprintf("" "
Access level" + wprintf("
"); + wprintf(_("Access level")); + wprintf("" "
User ID number" + wprintf("
"); + wprintf(_("User ID number")); + wprintf("" "
Date/time of last login" + wprintf("
"); + wprintf(_("Date and time of last login")); + wprintf("" "
Auto-purge after days" + wprintf("
"); + wprintf(_("Auto-purge after this many days")); + wprintf("" "
\n"); - wprintf("\n" - "\n" - "

\n"); + wprintf("\n" + " " + "\n" + "

\n", _("Save changes"), _("Cancel")); wprintf("
\n"); - + wprintf("
\n"); wDumpContent(1); } @@ -338,17 +376,27 @@ void display_edituser(char *supplied_username) { void edituser(void) { char message[SIZ]; char buf[SIZ]; + int is_new = 0; + unsigned int flags = 0; - if (strcasecmp(bstr("action"), "OK")) { - strcpy(message, "Edit user cancelled."); - } + is_new = atoi(bstr("is_new")); + if (strlen(bstr("ok_button")) == 0) { + safestrncpy(message, _("Changes were not saved."), sizeof message); + } else { + flags = atoi(bstr("flags")); + if (!strcasecmp(bstr("inetmail"), "yes")) { + flags |= US_INTERNET; + } + else { + flags &= ~US_INTERNET ; + } - serv_printf("ASUP %s|%s|%s|%s|%s|%s|%s|%s|%s|", + serv_printf("ASUP %s|%s|%d|%s|%s|%s|%s|%s|%s|", bstr("username"), bstr("password"), - bstr("flags"), + flags, bstr("timescalled"), bstr("msgsposted"), bstr("axlevel"), @@ -356,21 +404,47 @@ void edituser(void) { bstr("lastcall"), bstr("purgedays") ); - serv_gets(buf); + serv_getln(buf, sizeof buf); if (buf[0] != '2') { sprintf(message, - "" - "%s

\n", &buf[4]); + "" + "%s

\n", &buf[4]); } else { - strcpy(message, ""); + safestrncpy(message, "", sizeof message); } } - select_user_to_edit(message, bstr("username")); + /* If we are in the middle of creating a new user, move on to + * the vCard edit screen. + */ + if (is_new) { + display_edit_address_book_entry( bstr("username"), atol(bstr("usernum")) ); + } + else { + select_user_to_edit(message, bstr("username")); + } } +void delete_user(char *username) { + char buf[SIZ]; + char message[SIZ]; + + serv_printf("ASUP %s|0|0|0|0|0|", username); + serv_getln(buf, sizeof buf); + if (buf[0] != '2') { + sprintf(message, + "" + "%s

\n", &buf[4]); + } + else { + safestrncpy(message, "", sizeof message); + } + select_user_to_edit(message, bstr("username")); +} + + void create_user(void) { @@ -378,19 +452,20 @@ void create_user(void) { char error_message[SIZ]; char username[SIZ]; - strcpy(username, bstr("username")); + safestrncpy(username, bstr("username"), sizeof username); serv_printf("CREU %s", username); - serv_gets(buf); + serv_getln(buf, sizeof buf); if (buf[0] == '2') { - sprintf(error_message, "User has been created."); - select_user_to_edit(error_message, username); + sprintf(WC->ImportantMessage, + _("A new user has been created.")); + display_edituser(username, 1); } else { sprintf(error_message, - "" - "%s

\n", &buf[4]); + "" + "%s

\n", &buf[4]); select_user_to_edit(error_message, NULL); }