--- sbbs/src/sbbs3/js_msg_area.c 2018/04/24 16:41:23 1.1 +++ sbbs/src/sbbs3/js_msg_area.c 2018/04/24 16:43:24 1.1.1.2 @@ -2,13 +2,13 @@ /* Synchronet JavaScript "Message Area" Object */ -/* $Id: js_msg_area.c,v 1.1 2018/04/24 16:41:23 root Exp $ */ +/* $Id: js_msg_area.c,v 1.1.1.2 2018/04/24 16:43:24 root Exp $ */ /**************************************************************************** * @format.tab-size 4 (Plain Text/Source Code File Header) * * @format.use-tabs true (see http://www.synchro.net/ptsc_hdr.html) * * * - * Copyright 2006 Rob Swindell - http://www.synchro.net/copyright.html * + * Copyright 2009 Rob Swindell - http://www.synchro.net/copyright.html * * * * This program is free software; you can redistribute it and/or * * modify it under the terms of the GNU General Public License * @@ -305,7 +305,7 @@ static struct JSPropertySpec js_sub_prop { "scan_ptr" ,SUB_PROP_SCAN_PTR ,JSPROP_ENUMERATE|JSPROP_SHARED }, { "scan_cfg" ,SUB_PROP_SCAN_CFG ,JSPROP_ENUMERATE|JSPROP_SHARED }, - { "lead_read" ,SUB_PROP_LAST_READ ,JSPROP_ENUMERATE|JSPROP_SHARED }, + { "last_read" ,SUB_PROP_LAST_READ ,JSPROP_ENUMERATE|JSPROP_SHARED }, {0} }; @@ -324,12 +324,14 @@ static JSClass js_sub_class = { }; JSObject* DLLCALL js_CreateMsgAreaObject(JSContext* cx, JSObject* parent, scfg_t* cfg - ,user_t* user, subscan_t* subscan) + ,user_t* user, client_t* client, subscan_t* subscan) { JSObject* areaobj; JSObject* allgrps; JSObject* allsubs; + JSObject* grpobj_proto; JSObject* grpobj; + JSObject* subobj_proto; JSObject* subobj; JSObject* grp_list; JSObject* sub_list; @@ -377,14 +379,18 @@ JSObject* DLLCALL js_CreateMsgAreaObject if(!JS_SetProperty(cx, areaobj, "grp_list", &val)) return(NULL); + if((grpobj_proto=JS_NewObject(cx, NULL, NULL, areaobj))==NULL) + return(NULL); + if((subobj_proto=JS_NewObject(cx, NULL, NULL, areaobj))==NULL) + return(NULL); for(l=0;ltotal_grps;l++) { - if((grpobj=JS_NewObject(cx, NULL, NULL, NULL))==NULL) + if((grpobj=JS_NewObject(cx, NULL, grpobj_proto, NULL))==NULL) return(NULL); val=OBJECT_TO_JSVAL(grpobj); grp_index=-1; - if(user==NULL || chk_ar(cfg,cfg->grp[l]->ar,user)) { + if(user==NULL || chk_ar(cfg,cfg->grp[l]->ar,user,client)) { if(!JS_GetArrayLength(cx, grp_list, &grp_index)) return(NULL); @@ -440,7 +446,7 @@ JSObject* DLLCALL js_CreateMsgAreaObject if(cfg->sub[d]->grp!=l) continue; - if((subobj=JS_NewObject(cx, &js_sub_class, NULL, NULL))==NULL) + if((subobj=JS_NewObject(cx, &js_sub_class, subobj_proto, NULL))==NULL) return(NULL); if(subscan!=NULL) @@ -448,7 +454,7 @@ JSObject* DLLCALL js_CreateMsgAreaObject val=OBJECT_TO_JSVAL(subobj); sub_index=-1; - if(user==NULL || chk_ar(cfg,cfg->sub[d]->ar,user)) { + if(user==NULL || can_user_access_sub(cfg,d,user,client)) { if(!JS_GetArrayLength(cx, sub_list, &sub_index)) return(NULL); @@ -472,38 +478,30 @@ JSObject* DLLCALL js_CreateMsgAreaObject if(!js_CreateMsgAreaProperties(cx, cfg, subobj, d)) return(NULL); - - if(user==NULL || chk_ar(cfg,cfg->sub[d]->read_ar,user)) + + if(user==NULL) val=BOOLEAN_TO_JSVAL(JS_TRUE); else - val=BOOLEAN_TO_JSVAL(JS_FALSE); + val=BOOLEAN_TO_JSVAL(can_user_read_sub(cfg,d,user,client)); if(!JS_SetProperty(cx, subobj, "can_read", &val)) return(NULL); if(user==NULL) val=BOOLEAN_TO_JSVAL(JS_TRUE); - else if(cfg->sub[d]->misc&(SUB_QNET|SUB_FIDO|SUB_PNET|SUB_INET) - && user->rest&FLAG('N')) /* network restriction? */ - val=BOOLEAN_TO_JSVAL(JS_FALSE); - else if(!chk_ar(cfg,cfg->sub[d]->post_ar,user) - || user->rest&FLAG('P')) /* post restriction? */ - val=BOOLEAN_TO_JSVAL(JS_FALSE); else - val=BOOLEAN_TO_JSVAL(JS_TRUE); + val=BOOLEAN_TO_JSVAL(can_user_post(cfg,d,user,client,/* reason: */NULL)); if(!JS_SetProperty(cx, subobj, "can_post", &val)) return(NULL); - if(user!=NULL && - (user->level>=SYSOP_LEVEL || - (cfg->sub[d]->op_ar[0]!=0 && chk_ar(cfg,cfg->sub[d]->op_ar,user)))) + if(user==NULL) val=BOOLEAN_TO_JSVAL(JS_TRUE); else - val=BOOLEAN_TO_JSVAL(JS_FALSE); + val=BOOLEAN_TO_JSVAL(is_user_subop(cfg,d,user,client)); if(!JS_SetProperty(cx, subobj, "is_operator", &val)) return(NULL); if(cfg->sub[d]->mod_ar[0]!=0 && user!=NULL - && chk_ar(cfg,cfg->sub[d]->mod_ar,user)) + && chk_ar(cfg,cfg->sub[d]->mod_ar,user,client)) val=BOOLEAN_TO_JSVAL(JS_TRUE); else val=BOOLEAN_TO_JSVAL(JS_FALSE);