/* ** Sub-impl of /json/artifact for checkins. */ static cson_value * json_artifact_ci( cson_object * zParent, int rid ){ if(!g.perm.Read){ json_set_err( FSL_JSON_E_DENIED, "Viewing checkins requires 'o' privileges." ); return NULL; }else{ cson_value * artV = json_artifact_for_ci(rid, 1); cson_object * art = cson_value_get_object(artV); if(art){ cson_object_merge( zParent, art, CSON_MERGE_REPLACE ); cson_free_object(art); } return cson_object_value(zParent); } }
/* ** Impl of /json/user/save. */ static cson_value * json_user_save(){ /* try to get user info from GET/CLI args and construct a JSON form of it... */ cson_object * u = cson_new_object(); char const * str = NULL; char b = -1; int i = -1; int uid = -1; cson_value * payload = NULL; /* String properties... */ #define PROP(LK,SK) str = json_find_option_cstr(LK,NULL,SK); \ if(str){ cson_object_set(u, LK, json_new_string(str)); } (void)0 PROP("name","n"); PROP("password","p"); PROP("info","i"); PROP("capabilities","c"); #undef PROP /* Boolean properties... */ #define PROP(LK,DFLT) b = json_find_option_bool(LK,NULL,NULL,DFLT); \ if(DFLT!=b){ cson_object_set(u, LK, cson_value_new_bool(b)); } (void)0 PROP("forceLogout",-1); #undef PROP #define PROP(LK,DFLT) i = json_find_option_int(LK,NULL,NULL,DFLT); \ if(DFLT != i){ cson_object_set(u, LK, cson_value_new_integer(i)); } (void)0 PROP("uid",-99); #undef PROP if( g.json.reqPayload.o ){ cson_object_merge( u, g.json.reqPayload.o, CSON_MERGE_NO_RECURSE ); } json_user_update_from_json( u ); if(!g.json.resultCode){ uid = cson_value_get_integer( cson_object_get(u, "uid") ); assert((uid>0) && "Something went wrong in json_user_update_from_json()"); payload = json_load_user_by_id(uid); } cson_free_object(u); return payload; }