def get_analytics_alerts(discussion, user_id, types, all_users=False): from assembl.semantic.virtuoso_mapping import (AssemblQuadStorageManager, AESObfuscator) settings = get_config() metrics_server_endpoint = settings.get( 'metrics_server_endpoint', 'https://discussions.bluenove.com/analytics/accept') verify_metrics = False # weird SNI bug on some platforms protocol = 'https' if asbool( settings.get('accept_secure_connection', False)) else 'http' host = settings.get('public_hostname') if settings.get('public_port', 80) != 80: # TODO: public_secure_port? host += ':' + str(settings.get('public_port')) seed = urandom(8) obfuscator = AESObfuscator(seed) token = permission_token(user_id, discussion.id, [P_READ_PUBLIC_CIF], seed) metrics_requests = [{"metric": "alerts", "types": types}] if user_id != Everyone and not all_users: obfuscated_userid = "local:AgentProfile/" + obfuscator.encrypt( str(user_id)) metrics_requests[0]['users'] = [obfuscated_userid] mapurl = '%s://%s/data/Discussion/%d/jsonld?token=%s' % ( protocol, host, discussion.id, token) alerts = requests.post(metrics_server_endpoint, data=dict(mapurl=mapurl, requests=json.dumps(metrics_requests), recency=60), verify=verify_metrics) result = AssemblQuadStorageManager.deobfuscate(alerts.text, obfuscator.decrypt) # AgentAccount is a pseudo for AgentProfile result = re.sub(r'local:AgentAccount\\/', r'local:AgentProfile\\/', result) return result
def get_analytics_alerts(discussion, user_id, types, all_users=False): from assembl.semantic.virtuoso_mapping import AssemblQuadStorageManager, AESObfuscator settings = get_config() metrics_server_endpoint = settings.get( "metrics_server_endpoint", "https://discussions.bluenove.com/analytics/accept" ) verify_metrics = False # weird SNI bug on some platforms protocol = "https" if asbool(settings.get("accept_secure_connection", False)) else "http" host = settings.get("public_hostname") if settings.get("public_port", 80) != 80: # TODO: public_secure_port? host += ":" + str(settings.get("public_port")) seed = urandom(8) obfuscator = AESObfuscator(seed) token = permission_token(user_id, discussion.id, [P_READ_PUBLIC_CIF], seed) metrics_requests = [{"metric": "alerts", "types": types}] if user_id != Everyone and not all_users: obfuscated_userid = "local:AgentProfile/" + obfuscator.encrypt(str(user_id)) metrics_requests[0]["users"] = [obfuscated_userid] mapurl = "%s://%s/data/Discussion/%d/jsonld?token=%s" % (protocol, host, discussion.id, token) alerts = requests.post( metrics_server_endpoint, data=dict(mapurl=mapurl, requests=json.dumps(metrics_requests), recency=60), verify=verify_metrics, ) result = AssemblQuadStorageManager.deobfuscate(alerts.text, obfuscator.decrypt) # AgentAccount is a pseudo for AgentProfile result = re.sub(r"local:AgentAccount\\/", r"local:AgentProfile\\/", result) return result
def get_alerts(request): from assembl.semantic.virtuoso_mapping import (AssemblQuadStorageManager, AESObfuscator) discussion = request.context._instance user_id = authenticated_userid(request) or Everyone settings = request.registry.settings metrics_server_endpoint = settings.get( 'metrics_server_endpoint', 'https://discussions.bluenove.com/analytics/accept') verify_metrics = False # weird SNI bug on some platforms discussion = request.context._instance protocol = 'https' if asbool( request.registry.settings.get('accept_secure_connection', False)) else 'http' host = settings.get('public_hostname') if settings.get('public_port', 80) != 80: # TODO: public_secure_port? host += ':' + str(settings.get('public_port')) seed = urandom(8) obfuscator = AESObfuscator(seed) token = permission_token(user_id, discussion.id, [P_READ_PUBLIC_CIF], seed) metrics_requests = [{ "metric": "alerts", "types": ["lurking_user", "inactive_user", "user_gone_inactive"] }] mapurl = '%s://%s/data/Discussion/%d/jsonld?token=%s' % ( protocol, host, discussion.id, token) alerts = requests.post(metrics_server_endpoint, data=dict(mapurl=mapurl, requests=json.dumps(metrics_requests), recency=60), verify=verify_metrics) result = AssemblQuadStorageManager.deobfuscate(alerts.text, obfuscator.decrypt) # AgentAccount is a pseudo for AgentProfile result = re.sub(r'local:AgentAccount\\/', r'local:AgentProfile\\/', result) return Response(body=result, content_type='application/json')