pttbbs.conf
/* 若定義, 在使用者註冊之前, 會先顯示出該檔案, 經使用者確認後才能註冊 */
#define HAVE_USERAGREEMENT "etc/UserAgreement"
#define HAVE_USERAGREEMENT_VERSION "etc/UserAgreementVersion"
#define HAVE_USERAGREEMENT_ACCEPTABLE "etc/UserAgreementAcceptable"
pttstruct.h
uint8_t ua_version; /* Applicable user agreement version */
register.c
static uint8_t
get_system_user_agreement_version()
{
unsigned int version = 0;
#ifdef HAVE_USERAGREEMENT_VERSION
FILE *fp = fopen(HAVE_USERAGREEMENT_VERSION, "r");
if (fp != NULL) {
fscanf(fp, "%u", &version);
fclose(fp);
}
if (version > 255)
version = 0;
#endif
return version;
}
#define UAVER_OK (0)
#define UAVER_UNKNOWN (-1)
#define UAVER_OUTDATED (-2)
static int
check_user_agreement_version(uint8_t version)
{
#ifdef HAVE_USERAGREEMENT_ACCEPTABLE
FILE *fp = fopen(HAVE_USERAGREEMENT_ACCEPTABLE, "r");
if (fp == NULL)
return UAVER_UNKNOWN;
int result = UAVER_OUTDATED;
unsigned int acceptable;
while (fscanf(fp, "%u", &acceptable) == 1) {
if (version == acceptable) {
result = UAVER_OK;
break;
}
}
fclose(fp);
return result;
#else
return UAVER_OK;
#endif
}
static int
accept_user_aggrement()
{
#ifdef HAVE_USERAGREEMENT
int haveag = more(HAVE_USERAGREEMENT, YEA);
while (haveag != -1) {
int c = vans("請問您接受這份使用者條款嗎? (yes/no) ");
if (c == 'y')
break;
else if (c == 'n')
return 0;
vmsg("請輸入 y表示接受, n表示不接受");
}
#endif
return 1;
}
void
ensure_user_agreement_version()
{
switch (check_user_agreement_version(cuser.ua_version)) {
case UAVER_OK:
return;
case UAVER_UNKNOWN:
vmsg("系統錯誤, 暫時無法登入");
break;
case UAVER_OUTDATED:
vmsg("使用者條款已經更新, 請重新檢視.");
uint8_t version = get_system_user_agreement_version();
if (!accept_user_aggrement()) {
vmsg("抱歉, 您須要接受使用者條款才能繼續使用我們的服務唷!");
break;
}
pwcuSetUserAgreementVersion(version);
return;
}
exit(1);
}
/////////////////////////////////////////////////////////////////////////////
// New Registration (Phase 1: Create Account)
/////////////////////////////////////////////////////////////////////////////
void
new_register(void)
{
userec_t newuser;
char passbuf[STRLEN];
int try, id, uid;
char *errmsg = NULL;
uint8_t ua_version = get_system_user_agreement_version();
if (!accept_user_aggrement()) {
vmsg("抱歉, 您須要接受使用者條款才能註冊帳號享受我們的服務唷!");
exit(1);
}
// setup newuser
memset(&newuser, 0, sizeof(newuser));
newuser.version = PASSWD_VERSION;
newuser.userlevel = PERM_DEFAULT;
newuser.uflag = UF_BRDSORT | UF_ADBANNER | UF_CURSOR_ASCII;
newuser.firstlogin = newuser.lastlogin = now;
newuser.pager = PAGER_ON;
newuser.numlogindays = 1;
newuser.ua_version = ua_version;
strlcpy(newuser.lasthost, fromhost, sizeof(newuser.lasthost));
#ifdef DBCSAWARE
newuser.uflag |= UF_DBCS_AWARE | UF_DBCS_DROP_REPEAT;
#endif
2015/02/08 定期更新
1. [使用者條款] 因應新使用者條款實施,登入後必須同意過一次才能使用服務。
這個流程可能造成手機 APP 出現無法登入之情形,請嘗試使用一般
telnet 程式登入操作。