From d78f33807940313ea5738a9d7704a2cd9c85be00 Mon Sep 17 00:00:00 2001
From: rswindell <>
Date: Thu, 29 Oct 2009 23:06:48 +0000
Subject: [PATCH] Create a bbs.compare_ars() method which is just a tad smarter
 than the User.compare_ars() method, e.g. it knows the BBS node's current
 system status (e.g. temp sysop), but can only be used for the current user
 online.

---
 src/sbbs3/js_bbs.cpp | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/src/sbbs3/js_bbs.cpp b/src/sbbs3/js_bbs.cpp
index 4136b73833..e8ca43dacd 100644
--- a/src/sbbs3/js_bbs.cpp
+++ b/src/sbbs3/js_bbs.cpp
@@ -2909,6 +2909,32 @@ js_get_time_left(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *r
 	return(JS_TRUE);
 }
 
+static JSBool
+js_chk_ar(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
+{
+	uchar*		ar;
+	JSString*	js_str;
+	sbbs_t*		sbbs;
+	jsrefcount	rc;
+
+	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
+		return JS_FALSE;
+
+	if((js_str=JS_ValueToString(cx, argv[0]))==NULL)
+		return JS_FALSE;
+
+	rc=JS_SUSPENDREQUEST(cx);
+	ar = arstr(NULL,JS_GetStringBytes(js_str),&sbbs->cfg);
+
+	*rval = BOOLEAN_TO_JSVAL(sbbs->chk_ar(ar,&sbbs->useron,&sbbs->client));
+
+	if(ar!=NULL && ar!=nular)
+		free(ar);
+	JS_RESUMEREQUEST(cx, rc);
+
+	return JS_TRUE;
+}
+
 static jsSyncMethodSpec js_bbs_functions[] = {
 	{"atcode",			js_atcode,			1,	JSTYPE_STRING,	JSDOCSTR("code_string")
 	,JSDOCSTR("returns @-code value, specified <i>code</i> string does not include @ character delimiters")
@@ -3271,6 +3297,10 @@ static jsSyncMethodSpec js_bbs_functions[] = {
 	"This method will inform (and disconnect) the user when they are out of time")
 	,31401
 	},
+	{"compare_ars",		js_chk_ar,			1,	JSTYPE_BOOLEAN,	JSDOCSTR("string ars")
+	,JSDOCSTR("verify the current user online meets the specified Access Requirements String")
+	,315
+	},		
 	{0}
 };
 
-- 
GitLab