summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpiaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2008-01-30 18:34:45 +0800
committerpiaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2008-01-30 18:34:45 +0800
commit5abb8fa043dfbff8cb1077e98f1ee9a2d20d17b3 (patch)
tree796a5b4bf60316ce07c81cd291c294eb1bc10773
parent6e8189ed25ad5beb1c5ad390af988403f0b4402a (diff)
downloadpttbbs-5abb8fa043dfbff8cb1077e98f1ee9a2d20d17b3.tar
pttbbs-5abb8fa043dfbff8cb1077e98f1ee9a2d20d17b3.tar.gz
pttbbs-5abb8fa043dfbff8cb1077e98f1ee9a2d20d17b3.tar.bz2
pttbbs-5abb8fa043dfbff8cb1077e98f1ee9a2d20d17b3.tar.lz
pttbbs-5abb8fa043dfbff8cb1077e98f1ee9a2d20d17b3.tar.xz
pttbbs-5abb8fa043dfbff8cb1077e98f1ee9a2d20d17b3.tar.zst
pttbbs-5abb8fa043dfbff8cb1077e98f1ee9a2d20d17b3.zip
- improve registration process
- COPY2TMP and other pager functions now require BASIC permission git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@3887 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
-rw-r--r--include/modes.h1
-rw-r--r--mbbsd/more.c24
-rw-r--r--mbbsd/pmore.c19
-rw-r--r--mbbsd/register.c106
-rw-r--r--mbbsd/user.c50
5 files changed, 122 insertions, 78 deletions
diff --git a/include/modes.h b/include/modes.h
index d5ff30ab..e112733c 100644
--- a/include/modes.h
+++ b/include/modes.h
@@ -24,6 +24,7 @@
#define RET_DOSYSOPEDIT (996)
#define RET_DOCHESSREPLAY (995)
#define RET_DOBBSLUA (994)
+#define RET_COPY2TMP (993)
/* user 操作狀態與模式 */
#define IDLE 0
diff --git a/mbbsd/more.c b/mbbsd/more.c
index 6c5c1428..2cddc14c 100644
--- a/mbbsd/more.c
+++ b/mbbsd/more.c
@@ -27,15 +27,35 @@ int more(char *fpath, int promptend)
vedit(fpath, NA, NULL);
break;
+ case RET_COPY2TMP:
+ r = FULLUPDATE;
+ if (HasUserPerm(PERM_BASIC))
+ {
+ char buf[10];
+ getdata(b_lines - 1, 0, "把這篇文章收入到暫存檔?[y/N] ",
+ buf, 4, LCECHO);
+ if (buf[0] != 'y')
+ break;
+ setuserfile(buf, ask_tmpbuf(b_lines - 1));
+ Copy(fpath, buf);
+ }
+ break;
+
case RET_DOCHESSREPLAY:
r = FULLUPDATE;
- ChessReplayGame(fpath);
+ if (HasUserPerm(PERM_BASIC))
+ {
+ ChessReplayGame(fpath);
+ }
break;
#if defined(USE_BBSLUA)
case RET_DOBBSLUA:
r = FULLUPDATE;
- bbslua(fpath);
+ if (HasUserPerm(PERM_BASIC))
+ {
+ bbslua(fpath);
+ }
break;
#endif
}
diff --git a/mbbsd/pmore.c b/mbbsd/pmore.c
index 69be7b2f..1d7b82e0 100644
--- a/mbbsd/pmore.c
+++ b/mbbsd/pmore.c
@@ -2127,7 +2127,11 @@ pmore(char *fpath, int promptend)
flExit = 1, retval = RET_DOCHESSREPLAY;
break;
#endif
-
+#ifdef RET_COPY2TMP
+ case Ctrl('T'):
+ flExit = 1, retval = RET_COPY2TMP;
+ break;
+#endif
/* ------------------ EXITING KEYS ------------------ */
case 'A':
flExit = 1, retval = AUTHOR_PREV;
@@ -2348,19 +2352,6 @@ pmore(char *fpath, int promptend)
}
break;
- case Ctrl('T'):
- {
- char buf[10];
- getdata(b_lines - 1, 0, "把這篇文章收入到暫存檔?[y/N] ",
- buf, 4, LCECHO);
- if (buf[0] == 'y') {
- setuserfile(buf, ask_tmpbuf(b_lines - 1));
- Copy(fpath, buf);
- }
- MFDISP_DIRTY();
- }
- break;
-
case 'h': case 'H': case KEY_F1:
case '?':
// help
diff --git a/mbbsd/register.c b/mbbsd/register.c
index 1eb745a7..0a41a2e5 100644
--- a/mbbsd/register.c
+++ b/mbbsd/register.c
@@ -194,17 +194,21 @@ setupnewuser(const userec_t *user)
return uid;
}
+// checking functions (in user.c now...)
+char *isvalidname(char *rname);
+
void
new_register(void)
{
userec_t newuser;
char passbuf[STRLEN];
int try, id, uid;
+ char *errmsg = NULL;
#ifdef HAVE_USERAGREEMENT
more(HAVE_USERAGREEMENT, YEA);
while( 1 ){
- getdata(b_lines - 1, 0, "請問您接受這份使用者條款嗎? (yes/no) ",
+ getdata(b_lines, 0, "請問您接受這份使用者條款嗎? (yes/no) ",
passbuf, 4, LCECHO);
if( passbuf[0] == 'y' )
break;
@@ -216,7 +220,24 @@ new_register(void)
}
#endif
+ // setup newuser
memset(&newuser, 0, sizeof(newuser));
+ newuser.version = PASSWD_VERSION;
+ newuser.userlevel = PERM_DEFAULT;
+ newuser.uflag = BRDSORT_FLAG | MOVIE_FLAG;
+ newuser.uflag2 = 0;
+ newuser.firstlogin = newuser.lastlogin = now;
+ newuser.money = 0;
+ newuser.pager = PAGER_ON;
+ strlcpy(newuser.lasthost, fromhost, sizeof(newuser.lasthost));
+
+#ifdef DBCSAWARE
+ if(u_detectDBCSAwareEvilClient())
+ newuser.uflag &= ~DBCSAWARE_FLAG;
+ else
+ newuser.uflag |= DBCSAWARE_FLAG;
+#endif
+
more("etc/register", NA);
try = 0;
while (1) {
@@ -253,16 +274,16 @@ new_register(void)
vmsg("您嘗試錯誤的輸入太多,請下次再來吧");
exit(1);
}
- move(18, 0); clrtoeol();
+ move(19, 0); clrtoeol();
outs(ANSI_COLOR(1;33) "為避免被偷看,您的密碼並不會顯示在畫面上,直接輸入完後按 Enter 鍵即可。" ANSI_RESET);
- if ((getdata(19, 0, "請設定密碼:", passbuf,
+ if ((getdata(18, 0, "請設定密碼:", passbuf,
sizeof(passbuf), NOECHO) < 3) ||
!strcmp(passbuf, newuser.userid)) {
outs("密碼太簡單,易遭入侵,至少要 4 個字,請重新輸入\n");
continue;
}
strlcpy(newuser.passwd, passbuf, PASSLEN);
- getdata(20, 0, "請檢查密碼:", passbuf, sizeof(passbuf), NOECHO);
+ getdata(19, 0, "請檢查密碼:", passbuf, sizeof(passbuf), NOECHO);
if (strncmp(passbuf, newuser.passwd, PASSLEN)) {
outs("密碼輸入錯誤, 請重新輸入密碼.\n");
continue;
@@ -271,21 +292,50 @@ new_register(void)
strlcpy(newuser.passwd, genpasswd(passbuf), PASSLEN);
break;
}
- newuser.version = PASSWD_VERSION;
- newuser.userlevel = PERM_DEFAULT;
- newuser.uflag = BRDSORT_FLAG | MOVIE_FLAG;
- newuser.uflag2 = 0;
- newuser.firstlogin = newuser.lastlogin = now;
- newuser.money = 0;
- newuser.pager = PAGER_ON;
- strlcpy(newuser.lasthost, fromhost, sizeof(newuser.lasthost));
+ // set-up more information.
-#ifdef DBCSAWARE
- if(u_detectDBCSAwareEvilClient())
- newuser.uflag &= ~DBCSAWARE_FLAG;
- else
- newuser.uflag |= DBCSAWARE_FLAG;
-#endif
+ // warning: because currutmp=NULL, we can simply pass newuser.* to getdata.
+ // DON'T DO THIS IF YOUR currutmp != NULL.
+ try = 0;
+ while (strlen(newuser.nickname) < 2)
+ {
+ if (++try > 10) {
+ vmsg("您嘗試錯誤的輸入太多,請下次再來吧");
+ exit(1);
+ }
+ getdata(19, 0, "綽號暱稱:", newuser.nickname,
+ sizeof(newuser.nickname), DOECHO);
+ }
+
+ try = 0;
+ while (strlen(newuser.realname) < 4)
+ {
+ if (++try > 10) {
+ vmsg("您嘗試錯誤的輸入太多,請下次再來吧");
+ exit(1);
+ }
+ getdata(20, 0, "真實姓名:", newuser.realname,
+ sizeof(newuser.realname), DOECHO);
+
+ if ((errmsg = isvalidname(newuser.realname)))
+ {
+ memset(newuser.realname, 0, sizeof(newuser.realname));
+ vmsg(errmsg);
+ }
+ }
+
+ try = 0;
+ while (strlen(newuser.address) < 8)
+ {
+ // do not use isvalidaddr to check,
+ // because that requires foreign info.
+ if (++try > 10) {
+ vmsg("您嘗試錯誤的輸入太多,請下次再來吧");
+ exit(1);
+ }
+ getdata(21, 0, "聯絡地址:", newuser.address,
+ sizeof(newuser.address), DOECHO);
+ }
setupnewuser(&newuser);
@@ -300,7 +350,6 @@ new_register(void)
void
check_register(void)
{
- char *ptr = NULL;
if (HasUserPerm(PERM_LOGINOK))
return;
@@ -312,25 +361,6 @@ check_register(void)
if (ISNEWMAIL(currutmp))
m_read();
- stand_title("請詳細填寫個人資料");
-
- while (strlen(cuser.nickname) < 2)
- getdata(2, 0, "綽號暱稱:", cuser.nickname,
- sizeof(cuser.nickname), DOECHO);
-
- for (ptr = cuser.nickname; *ptr; ptr++) {
- if (*ptr == 9) /* TAB convert */
- *ptr = ' ';
- }
- while (strlen(cuser.realname) < 4)
- getdata(4, 0, "真實姓名:", cuser.realname,
- sizeof(cuser.realname), DOECHO);
-
- while (strlen(cuser.address) < 8)
- getdata(6, 0, "聯絡地址:", cuser.address,
- sizeof(cuser.address), DOECHO);
-
-
if (!HasUserPerm(PERM_SYSOP)) {
/* 回覆過身份認證信函,或曾經 E-mail post 過 */
clear();
diff --git a/mbbsd/user.c b/mbbsd/user.c
index f04ee875..d8bc901d 100644
--- a/mbbsd/user.c
+++ b/mbbsd/user.c
@@ -1556,7 +1556,7 @@ static int HaveRejectStr(const char *s, const char **rej)
return 0;
}
-static char *isvalidname(char *rname)
+char *isvalidname(char *rname)
{
#ifdef FOREIGN_REG
return NULL;
@@ -1600,7 +1600,7 @@ static char *isvalidcareer(char *career)
return NULL;
}
-static char *isvalidaddr(char *addr)
+char *isvalidaddr(char *addr)
{
const char *rejectstr[] =
{"地球", "銀河", "火星", NULL};
@@ -2044,41 +2044,42 @@ int u_detectDBCSAwareEvilClient()
int ret = 0;
clear();
- move(1, 0);
+ stand_title("設定自動偵測雙位元字集 (全型中文)");
+ move(2, 0);
outs(ANSI_RESET
- "* 本站支援自動偵測中文字的移動與編輯,但有些連線程式(如xxMan)\n"
- " 會自行處理、多送按鍵,於是便會造成" ANSI_COLOR(1;37)
- "一次移動兩個中文字的現象。" ANSI_RESET "\n\n"
- "* 讓連線程式處理移動容易造成許\多"
- "顯示及移動上的問題,所以我們建議您\n"
- " 關閉該程式上的此項設定(通常叫「偵測(全型或雙位元組)中文」),\n"
- " 讓 BBS 系統可以正確的控制你的畫面。\n\n"
- ANSI_COLOR(1;33)
- "* 如果您看不懂上面的說明也無所謂,我們會自動偵測適合您的設定。"
- ANSI_RESET "\n"
- " 請在設定好連線程式成您偏好的模式後按" ANSI_COLOR(1;33)
- "一下" ANSI_RESET "您鍵盤上的" ANSI_COLOR(1;33)
- "←" ANSI_RESET "\n" ANSI_COLOR(1;36)
- " (另外左右方向鍵或寫 BS/Backspace 的倒退鍵與 Del 刪除鍵均可)\n"
+ "* 本站支援自動偵測中文字的移動與編輯,但有些連線程式 (如xxMan)\n"
+ " 也會自行試圖偵測、多送按鍵,於是便會造成" ANSI_COLOR(1;37)
+ "一次移動兩個中文字的現象。" ANSI_RESET "\n\n"
+ "* 讓連線程式處理移動容易造成顯示及移動上誤判的問題,所以我們建議您\n"
+ " 關閉該程式上的設定(通常叫「偵測(全型或雙位元組)中文」),\n"
+ " 讓 BBS 系統可以正確的控制你的畫面。\n\n"
+ ANSI_COLOR(1;33)
+ "* 如果您看不懂上面的說明也無所謂,我們會自動偵測適合您的設定。"
+ ANSI_RESET "\n"
+ " 請在設定好連線程式成您偏好的模式後按" ANSI_COLOR(1;33)
+ "一下" ANSI_RESET "您鍵盤上的" ANSI_COLOR(1;33)
+ "←" ANSI_RESET "\n" ANSI_COLOR(1;36)
+ " (左右方向鍵或寫 BS/Backspace 的倒退鍵與 Del 刪除鍵均可)\n"
ANSI_RESET);
/* clear buffer */
- while(num_in_buf() > 0)
- igetch();
+ peek_input(0.1, Ctrl('C'));
+ drop_input();
while (1)
{
int ch = 0;
- move(12, 0);
+ move(14, 0);
outs("這是偵測區,您的游標會出現在"
ANSI_COLOR(7) "這裡" ANSI_RESET);
- move(12, 15*2);
+ move(14, 15*2);
ch = igetch();
if(ch != KEY_LEFT && ch != KEY_RIGHT &&
ch != Ctrl('H') && ch != '\177')
{
- move(14, 0);
+ move(16, 0);
+ bell();
outs("請按一下上面指定的鍵! 你按到別的鍵了!");
} else {
move(16, 0);
@@ -2094,14 +2095,14 @@ int u_detectDBCSAwareEvilClient()
// if (num_in_buf() > 0)
{
/* evil dbcs aware client */
- outs("偵測到您的連線程式會自行處理游標移動。\n\n"
+ outs("偵測到您的連線程式會自行處理游標移動。\n"
// "若日後因此造成瀏覽上的問題本站恕不處理。\n\n"
"已設定為「讓您的連線程式處理游標移動」\n");
ret = 1;
} else {
/* good non-dbcs aware client */
outs("您的連線程式似乎不會多送按鍵,"
- "這樣 BBS 可以更精準的控制畫面。\n\n"
+ "這樣 BBS 可以更精準的控制畫面。\n"
"已設定為「讓 BBS 伺服器直接處理游標移動」\n");
ret = 0;
}
@@ -2112,6 +2113,7 @@ int u_detectDBCSAwareEvilClient()
break;
}
}
+ drop_input();
pressanykey();
return ret;
}