diff options
author | piaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2008-01-30 18:34:45 +0800 |
---|---|---|
committer | piaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2008-01-30 18:34:45 +0800 |
commit | 5abb8fa043dfbff8cb1077e98f1ee9a2d20d17b3 (patch) | |
tree | 796a5b4bf60316ce07c81cd291c294eb1bc10773 /mbbsd | |
parent | 6e8189ed25ad5beb1c5ad390af988403f0b4402a (diff) | |
download | pttbbs-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
Diffstat (limited to 'mbbsd')
-rw-r--r-- | mbbsd/more.c | 24 | ||||
-rw-r--r-- | mbbsd/pmore.c | 19 | ||||
-rw-r--r-- | mbbsd/register.c | 106 | ||||
-rw-r--r-- | mbbsd/user.c | 50 |
4 files changed, 121 insertions, 78 deletions
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; } |