from portal.models import PendingUser, PendingSlice, PendingAuthority
import json
-from django.contrib.auth.models import User
+from django.contrib.auth.models import User
+from django.contrib.sites.models import Site
+from django.contrib.auth import get_user_model
from django.template.loader import render_to_string
from django.core.mail import EmailMultiAlternatives, send_mail
results = execute_admin_query(request,query)
return results
+def manifold_delete_user(request, user_id, user_params):
+ query = Query.delete('local:user').filter_by('user_id', '==', user_id).set(user_params).select('user_id')
+ results = execute_admin_query(request,query)
+ return results
+
#not tested
def manifold_add_platform(request, platform_params):
return status
-
def validate_action(request, **kwargs):
ids = filter(None, kwargs['id'].split('/'))
status = portal_validate_request(request, ids)
json_answer = json.dumps(status)
return HttpResponse (json_answer, mimetype="application/json")
+
+def reject_action(request, **kwargs):
+ ids = filter(None, kwargs['id'].split('/'))
+ status = portal_reject_request(request, ids)
+ json_answer = json.dumps(status)
+ return HttpResponse (json_answer, mimetype="application/json")
+
+
+def portal_reject_request(wsgi_request, request_ids):
+ status = {}
+
+ if not isinstance(request_ids, list):
+ request_ids = [request_ids]
+
+ requests = get_request_by_id(request_ids)
+ for request in requests:
+ # type, id, timestamp, details, allowed -- MISSING: authority_hrn
+ # CAREFUL about details
+ # user : first name, last name, email, password, keypair
+ # slice : number of nodes, type of nodes, purpose
+
+ request_status = {}
+
+ if request['type'] == 'user':
+ try:
+ request_status['SFA user'] = {'status': True }
+ # getting user email based on id
+ ## RAW SQL queries on Django DB- https://docs.djangoproject.com/en/dev/topics/db/sql/
+ for user in PendingUser.objects.raw('SELECT id,email FROM portal_pendinguser WHERE id = %s', [request['id']]):
+ user_email= user.email
+
+ # get the domain url
+ current_site = Site.objects.get_current()
+ current_site = current_site.domain
+
+ subject = 'User validation denied.'
+ msg = 'You have recently registered to ' + current_site + '. We are sorry to inform you that, a manager of your institution has rejected your request. Please contact the manager of your institution for further information. For any other queries, contact us by replying to this email.'
+ send_mail(subject, msg, 'support@onelab.eu',[user_email], fail_silently=False)
+ # removing from Django auth_user
+ UserModel = get_user_model()
+ UserModel._default_manager.filter(email__iexact = user_email).delete()
+ # removing from Django portal_pendinguser
+ PendingUser.objects.get(id=request['id']).delete()
+ # removing from manifold
+ # removing manifold account
+ user_query = Query().get('local:user') \
+ .filter_by('email', '==', user_email) \
+ .select('user_id')
+ user = execute_admin_query(wsgi_request, user_query)
+ user_id = user[0]['user_id']
+
+ platform_query = Query().get('local:platform') \
+ .filter_by('platform', '==', 'myslice') \
+ .select('platform_id')
+ platform = execute_admin_query(wsgi_request, platform_query)
+ platform_id = platform[0]['platform_id']
+ account_params = {'user_id':user_id}
+ manifold_delete_account(request, platform_id, user_id, account_params)
+
+ # removing manifold user
+ user_params = {'user_id':user_id}
+ manifold_delete_user(request, user_id, user_params)
+ except Exception, e:
+ request_status['SFA authority'] = {'status': False, 'description': str(e)}
+
+ elif request['type'] == 'slice':
+ request_status['SFA slice'] = {'status': True }
+ PendingSlice.objects.get(id=request['id']).delete()
+ elif request['type'] == 'authority':
+ request_status['SFA authority'] = {'status': True }
+ PendingAuthority.objects.get(id=request['id']).delete()
+
+ status['%s__%s' % (request['type'], request['id'])] = request_status
+
+ return status
+
# Django and ajax
# http://djangosnippets.org/snippets/942/
for user in user_details_sfa:
user_email = user['user_email']
+ # XXX LOIC Quick fix because this is totally inconsistent
+ if not 'number_of_nodes' in request:
+ request['number_of_nodes']=""
+
# XXX We should create a slice with Manifold terminology
slice_params = {
'slice_hrn' : hrn,