From a73e9b55e7ea87215aefe7a6cbe3ab897410fe53 Mon Sep 17 00:00:00 2001
From: rswindell <>
Date: Sun, 15 Apr 2001 16:45:13 +0000
Subject: [PATCH] Separated stats and security properites into sub-objects.

---
 src/sbbs3/userobj.c | 127 +++++++++++++++++++++++++++++++++++---------
 1 file changed, 102 insertions(+), 25 deletions(-)

diff --git a/src/sbbs3/userobj.c b/src/sbbs3/userobj.c
index 69f7c3f5ef..b573329bb7 100644
--- a/src/sbbs3/userobj.c
+++ b/src/sbbs3/userobj.c
@@ -99,6 +99,25 @@ enum {
 	,USER_PROP_PROT		
 };
 
+static JSBool js_user_set(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
+{
+    jsint       tiny;
+	user_t*		user;
+
+	if((user=(user_t*)JS_GetPrivate(cx,obj))==NULL)
+		return JS_FALSE;
+
+    tiny = JSVAL_TO_INT(id);
+
+	switch(tiny) {
+		case USER_PROP_MISC:
+			JS_ValueToInt32(cx, *vp, &user->misc);
+			break;
+	}
+
+	return(TRUE);
+}
+
 static JSBool js_user_get(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
 {
 	char*		p=NULL;
@@ -283,6 +302,8 @@ static JSBool js_user_get(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
 		sprintf(tmp,"%c",user->prot);
 		p=tmp;
 		break;
+	default:
+		return(TRUE);
 	}
 	if(p!=NULL) 
 		*vp = STRING_TO_JSVAL(JS_NewStringCopyZ(cx, p));
@@ -295,26 +316,46 @@ static JSBool js_user_get(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
 #define USEROBJ_FLAGS JSPROP_ENUMERATE|JSPROP_READONLY
 
 static struct JSPropertySpec js_user_properties[] = {
-/*		 name			,tinyid						,flags,				getter,	setter	*/
+/*		 name				,tinyid					,flags,				getter,	setter	*/
 
 	{	"alias"				,USER_PROP_ALIAS 		,USEROBJ_FLAGS,		NULL,NULL},
 	{	"name"				,USER_PROP_NAME		 	,USEROBJ_FLAGS,		NULL,NULL},
 	{	"handle"			,USER_PROP_HANDLE	 	,USEROBJ_FLAGS,		NULL,NULL},
 	{	"note"				,USER_PROP_NOTE		 	,USEROBJ_FLAGS,		NULL,NULL},
+	{	"ip_address"		,USER_PROP_NOTE		 	,USEROBJ_FLAGS,		NULL,NULL},
 	{	"computer"			,USER_PROP_COMP		 	,USEROBJ_FLAGS,		NULL,NULL},
+	{	"host_name"			,USER_PROP_COMP		 	,USEROBJ_FLAGS,		NULL,NULL},
 	{	"comment"			,USER_PROP_COMMENT	 	,USEROBJ_FLAGS,		NULL,NULL},
 	{	"netmail"			,USER_PROP_NETMAIL	 	,USEROBJ_FLAGS,		NULL,NULL},
+	{	"email"				,USER_PROP_NETMAIL	 	,USEROBJ_FLAGS,		NULL,NULL},
 	{	"address"			,USER_PROP_ADDRESS	 	,USEROBJ_FLAGS,		NULL,NULL},
 	{	"location"			,USER_PROP_LOCATION	 	,USEROBJ_FLAGS,		NULL,NULL},
 	{	"zipcode"			,USER_PROP_ZIPCODE	 	,USEROBJ_FLAGS,		NULL,NULL},
-	{	"password"			,USER_PROP_PASS		 	,USEROBJ_FLAGS,		NULL,NULL},
 	{	"phone"				,USER_PROP_PHONE  	 	,USEROBJ_FLAGS,		NULL,NULL},
 	{	"birthdate"			,USER_PROP_BIRTH  	 	,USEROBJ_FLAGS,		NULL,NULL},
 	{	"modem"				,USER_PROP_MODEM      	,USEROBJ_FLAGS,		NULL,NULL},
+	{	"connection"		,USER_PROP_MODEM      	,USEROBJ_FLAGS,		NULL,NULL},
+	{	"screen_rows"		,USER_PROP_ROWS		 	,USEROBJ_FLAGS,		NULL,NULL},
+	{	"gender"			,USER_PROP_SEX		 	,USEROBJ_FLAGS,		NULL,NULL},
+	{	"cursub"			,USER_PROP_CURSUB	 	,USEROBJ_FLAGS,		NULL,NULL},
+	{	"curdir"			,USER_PROP_CURDIR	 	,USEROBJ_FLAGS,		NULL,NULL},
+	{	"editor"			,USER_PROP_XEDIT 	 	,USEROBJ_FLAGS,		NULL,NULL},
+	{	"command_shell"		,USER_PROP_SHELL 	 	,USEROBJ_FLAGS,		NULL,NULL},
+	{	"settings"			,USER_PROP_MISC		 	,USEROBJ_FLAGS,		NULL,NULL},
+	{	"qwk_settings"		,USER_PROP_QWK		 	,USEROBJ_FLAGS,		NULL,NULL},
+	{	"chat_settings"		,USER_PROP_CHAT		 	,USEROBJ_FLAGS,		NULL,NULL},
+	{	"temp_file_ext"		,USER_PROP_TMPEXT	 	,USEROBJ_FLAGS,		NULL,NULL},
+	{	"newscan_date"		,USER_PROP_NS_TIME	 	,USEROBJ_FLAGS,		NULL,NULL},
+	{	"download_protocol"	,USER_PROP_PROT		 	,USEROBJ_FLAGS,		NULL,NULL},
+	{0}
+};
+
+/* user.stats: These should be READ ONLY by nature */
+static struct JSPropertySpec js_user_stats_properties[] = {
+/*		 name				,tinyid					,flags,				getter,	setter	*/
+
 	{	"laston_date"		,USER_PROP_LASTON	 	,USEROBJ_FLAGS,		NULL,NULL},
 	{	"firston_date"		,USER_PROP_FIRSTON	 	,USEROBJ_FLAGS,		NULL,NULL},
-	{	"expiration_date"	,USER_PROP_EXPIRE     	,USEROBJ_FLAGS,		NULL,NULL},
-	{	"password_date"		,USER_PROP_PWMOD      	,USEROBJ_FLAGS,		NULL,NULL},
 	{	"total_logons"		,USER_PROP_LOGONS     	,USEROBJ_FLAGS,		NULL,NULL},
 	{	"logons_today"		,USER_PROP_LTODAY     	,USEROBJ_FLAGS,		NULL,NULL},
 	{	"total_timeon"		,USER_PROP_TIMEON     	,USEROBJ_FLAGS,		NULL,NULL},
@@ -330,8 +371,16 @@ static struct JSPropertySpec js_user_properties[] = {
 	{	"files_uploaded"	,USER_PROP_ULS        	,USEROBJ_FLAGS,		NULL,NULL},
 	{	"bytes_downloaded"	,USER_PROP_DLB        	,USEROBJ_FLAGS,		NULL,NULL},
 	{	"files_downloaded"	,USER_PROP_DLS        	,USEROBJ_FLAGS,		NULL,NULL},
-	{	"credits"			,USER_PROP_CDT		 	,USEROBJ_FLAGS,		NULL,NULL},
-	{	"minutes"			,USER_PROP_MIN		 	,USEROBJ_FLAGS,		NULL,NULL},
+	{	"leech_attempts"	,USER_PROP_LEECH 	 	,USEROBJ_FLAGS,		NULL,NULL},
+	{0}
+};
+
+/* user.security */
+static struct JSPropertySpec js_user_security_properties[] = {
+/*		 name				,tinyid					,flags,				getter,	setter	*/
+
+	{	"password"			,USER_PROP_PASS		 	,USEROBJ_FLAGS,		NULL,NULL},
+	{	"password_date"		,USER_PROP_PWMOD      	,USEROBJ_FLAGS,		NULL,NULL},
 	{	"level"				,USER_PROP_LEVEL 	 	,USEROBJ_FLAGS,		NULL,NULL},
 	{	"flags1"			,USER_PROP_FLAGS1	 	,USEROBJ_FLAGS,		NULL,NULL},
 	{	"flags2"			,USER_PROP_FLAGS2	 	,USEROBJ_FLAGS,		NULL,NULL},
@@ -339,20 +388,11 @@ static struct JSPropertySpec js_user_properties[] = {
 	{	"flags4"			,USER_PROP_FLAGS4	 	,USEROBJ_FLAGS,		NULL,NULL},
 	{	"exemptions"		,USER_PROP_EXEMPT	 	,USEROBJ_FLAGS,		NULL,NULL},
 	{	"restrictions"		,USER_PROP_REST		 	,USEROBJ_FLAGS,		NULL,NULL},
-	{	"screen_rows"		,USER_PROP_ROWS		 	,USEROBJ_FLAGS,		NULL,NULL},
-	{	"gender"			,USER_PROP_SEX		 	,USEROBJ_FLAGS,		NULL,NULL},
-	{	"settings"			,USER_PROP_MISC		 	,USEROBJ_FLAGS,		NULL,NULL},
-	{	"leech_attempts"	,USER_PROP_LEECH 	 	,USEROBJ_FLAGS,		NULL,NULL},
-	{	"cursub"			,USER_PROP_CURSUB	 	,USEROBJ_FLAGS,		NULL,NULL},
-	{	"curdir"			,USER_PROP_CURDIR	 	,USEROBJ_FLAGS,		NULL,NULL},
+	{	"credits"			,USER_PROP_CDT		 	,USEROBJ_FLAGS,		NULL,NULL},
 	{	"free_credits"		,USER_PROP_FREECDT	 	,USEROBJ_FLAGS,		NULL,NULL},
-	{	"editor"			,USER_PROP_XEDIT 	 	,USEROBJ_FLAGS,		NULL,NULL},
-	{	"command_shell"		,USER_PROP_SHELL 	 	,USEROBJ_FLAGS,		NULL,NULL},
-	{	"qwk_settings"		,USER_PROP_QWK		 	,USEROBJ_FLAGS,		NULL,NULL},
-	{	"temp_file_ext"		,USER_PROP_TMPEXT	 	,USEROBJ_FLAGS,		NULL,NULL},
-	{	"chat_settings"		,USER_PROP_CHAT		 	,USEROBJ_FLAGS,		NULL,NULL},
-	{	"newscan_date"		,USER_PROP_NS_TIME	 	,USEROBJ_FLAGS,		NULL,NULL},
-	{	"download_protocol"	,USER_PROP_PROT		 	,USEROBJ_FLAGS,		NULL,NULL},
+	{	"minutes"			,USER_PROP_MIN		 	,USEROBJ_FLAGS,		NULL,NULL},
+	{	"extra_time"		,USER_PROP_TEXTRA  	 	,USEROBJ_FLAGS,		NULL,NULL},
+	{	"expiration_date"	,USER_PROP_EXPIRE     	,USEROBJ_FLAGS,		NULL,NULL},
 	{0}
 };
 
@@ -362,20 +402,20 @@ static JSClass js_user_class = {
 	,JS_PropertyStub		/* addProperty	*/
 	,JS_PropertyStub		/* delProperty	*/
 	,js_user_get			/* getProperty	*/
-	,JS_PropertyStub		/* setProperty	*/
+	,js_user_set			/* setProperty	*/
 	,JS_EnumerateStub		/* enumerate	*/
 	,JS_ResolveStub			/* resolve		*/
 	,JS_ConvertStub			/* convert		*/
 	,JS_FinalizeStub		/* finalize		*/
 };
 
-static JSClass js_userstats_class = {
-     "Stats"				/* name			*/
+static JSClass js_user_stats_class = {
+     "UserStats"			/* name			*/
     ,JSCLASS_HAS_PRIVATE	/* flags		*/
 	,JS_PropertyStub		/* addProperty	*/
 	,JS_PropertyStub		/* delProperty	*/
-	,NULL /* js_sysstats_get		/* getProperty	*/
-	,JS_PropertyStub		/* setProperty	*/
+	,js_user_get			/* getProperty	*/
+	,js_user_set			/* setProperty	*/
 	,JS_EnumerateStub		/* enumerate	*/
 	,JS_ResolveStub			/* resolve		*/
 	,JS_ConvertStub			/* convert		*/
@@ -383,19 +423,56 @@ static JSClass js_userstats_class = {
 };
 
 
+static JSClass js_user_security_class = {
+     "UserSecurity"			/* name			*/
+    ,JSCLASS_HAS_PRIVATE	/* flags		*/
+	,JS_PropertyStub		/* addProperty	*/
+	,JS_PropertyStub		/* delProperty	*/
+	,js_user_get			/* getProperty	*/
+	,js_user_set			/* setProperty	*/
+	,JS_EnumerateStub		/* enumerate	*/
+	,JS_ResolveStub			/* resolve		*/
+	,JS_ConvertStub			/* convert		*/
+	,JS_FinalizeStub		/* finalize		*/
+};
+
 JSObject* DLLCALL CreateUserObject(scfg_t* cfg, JSContext* cx, JSObject* parent, char* name, user_t* user)
 {
 	JSObject*	userobj;
+	JSObject*	statsobj;
+	JSObject*	securityobj;
 
 	userobj = JS_DefineObject(cx, parent, name, &js_user_class, NULL, 0);
 
 	if(userobj==NULL)
 		return(NULL);
 
-	JS_SetPrivate(cx, userobj, user);	/* Store a pointer to scfg_t */
+	JS_SetPrivate(cx, userobj, user);	/* Store a pointer to user_t */
 
 	JS_DefineProperties(cx, userobj, js_user_properties);
 
+	/* user.stats */
+	statsobj = JS_DefineObject(cx, userobj, "stats"
+		,&js_user_stats_class, NULL, JSPROP_ENUMERATE);
+
+	if(statsobj==NULL)
+		return(NULL);
+
+	JS_SetPrivate(cx, statsobj, user);	/* Store a pointer to user_t */
+
+	JS_DefineProperties(cx, statsobj, js_user_stats_properties);
+
+	/* user.security */
+	securityobj = JS_DefineObject(cx, userobj, "security"
+		,&js_user_security_class, NULL, JSPROP_ENUMERATE);
+
+	if(securityobj==NULL)
+		return(NULL);
+
+	JS_SetPrivate(cx, securityobj, user);	/* Store a pointer to user_t */
+
+	JS_DefineProperties(cx, securityobj, js_user_security_properties);
+
 	return(userobj);
 }
 
-- 
GitLab