+ return HttpResponse (json_answer, content_type="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, content_type="application/json")
+
+def get_current_site(request):
+ if request.is_secure():
+ current_site = 'https://'
+ else:
+ current_site = 'http://'
+ current_site += request.META['HTTP_HOST']
+ return current_site
+
+def portal_reject_request(wsgi_request, request_ids):
+ status = {}
+ current_site = get_current_site(wsgi_request)
+ 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 = {}
+
+ try:
+ if request['type'] == 'user':
+ 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 * FROM portal_pendinguser WHERE id = %s', [request['id']]):
+ user_email= user.email
+ first_name = user.first_name
+ last_name = user.last_name
+
+ ctx = {
+ 'first_name' : first_name,
+ 'last_name' : last_name,
+ 'email' : user_email,
+ 'portal_url' : current_site,
+ }
+
+ # removing from Django portal_pendinguser
+ PendingUser.objects.get(id=request['id']).delete()
+
+ delete_local_user(wsgi_request, user_email)
+
+ elif request['type'] == 'slice':
+ request_status['SFA slice'] = {'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 PendingSlice.objects.raw('SELECT * FROM portal_pendingslice WHERE id = %s', [request['id']]):
+ user_email= user.type_of_nodes # XXX type_of_nodes field contains the email [shd be renamed in DB]
+ slice_name = user.slice_name
+ purpose = user.purpose
+ url = user.number_of_nodes
+
+ ctx = {
+ 'slice_name': slice_name,
+ 'purpose': purpose,
+ 'url': url,
+ 'portal_url': current_site,
+ }
+
+ PendingSlice.objects.get(id=request['id']).delete()
+
+ elif request['type'] == 'authority':
+ request_status['SFA authority'] = {'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 PendingAuthority.objects.raw('SELECT * FROM portal_pendingauthority WHERE id = %s', [request['id']]):
+ user_email= user.address_line1 # XXX address_line1 field contains the email [shd be renamed in DB]
+ site_name = user.site_name
+ city = user.address_city
+ country = user.address_country
+ short_name = user.site_abbreviated_name
+ url = user.site_url
+
+ ctx = {
+ 'site_name': site_name,
+ 'short_name': short_name,
+ 'url': url,
+ 'city': city,
+ 'country': country,
+ 'portal_url' : current_site,
+ }
+
+ PendingAuthority.objects.get(id=request['id']).delete()
+
+ # XXX TMP we should send an email to the user to inform him/her
+ elif request['type'] == 'project':
+ request_status['SFA project'] = {'status': True }
+ p = PendingProject.objects.get(id=request['id'])
+ ctx = {
+ 'project_name' : p.project_name,
+ 'authority_hrn' : p.authority_hrn,
+ 'email' : p.email,
+ 'purpose' : p.purpose,
+ }
+ user_email = p.email
+ PendingProject.objects.get(id=request['id']).delete()
+
+ elif request['type'] == 'join':
+ request_status['SFA join'] = {'status': True }
+ j = PendingJoin.objects.get(id=request['id'])
+ ctx = {
+ 'project_name' : j.project_name,
+ 'authority_hrn' : j.authority_hrn,
+ 'email' : j.email,
+ 'user_hrn' : j.user_hrn,
+ }
+
+ user_email = j.email
+ PendingJoin.objects.get(id=request['id']).delete()
+ else:
+ raise Exception, 'unknown type of request %s' % request['type']
+
+ send_status_email(wsgi_request, ctx, user_email, request['type'], 'denied')
+ except Exception, e:
+ request_status['SFA '+request['type']] = {'status': False, 'description': str(e)}
+ logger.error('ERROR - actions.py - portal_reject_request: %s' % e)
+ import traceback
+ logger.error(traceback.format_exc())
+
+ status['%s__%s' % (request['type'], request['id'])] = request_status
+
+ return status
+
+def send_status_email(request, ctx, user_email, obj_type, status):
+ try:
+ ctx['current_site'] = get_current_site(request)
+ ctx['theme'] = theme
+
+ theme.template_name = obj_type + '_request_' + status + '.txt'
+ text_content = render_to_string(theme.template, ctx)
+ theme.template_name = obj_type + '_request_' + status + '.html'
+ html_content = render_to_string(theme.template, ctx)
+ theme.template_name = 'email_default_sender.txt'
+
+ sender = render_to_string(theme.template, ctx)
+ sender = sender.replace('\n', '')
+
+ subject = obj_type.title() + ' request '+ status
+
+ msg = EmailMultiAlternatives(subject, text_content, sender, [user_email])
+ msg.attach_alternative(html_content, "text/html")
+ msg.send()
+ except Exception as e:
+ print e
+ logger.error("Failed to send email, please check the mail templates and the SMTP configuration of your server")
+