import json
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
from myslice.theme import ThemeView
from myslice.configengine import ConfigEngine
-from myslice.settings import logger
+
+from myslice.settings import logger
+
+from rest.sfa_api import sfa_client
theme = ThemeView()
print e
return None
+def getAuthorities(request, admin = False):
+ # XXX theme has to be the same as the root authority
+ result = sfa_client(request,'List',hrn=theme.theme,object_type='authority',platforms=['myslice'],admin=admin)
+ authorities = list()
+ for item in result['myslice']:
+ t_hrn = item['hrn'].split('.')
+ if 'name' in item:
+ authorities.append({'authority_hrn':item['hrn'], 'name':item['name'], 'shortname':t_hrn[-1].upper()})
+ else:
+ authorities.append({'authority_hrn':item['hrn']})
+ return sorted(authorities)
+
+
# Get the list of pis in a given authority
def authority_get_pis(request, authority_hrn):
# CACHE PB with fields
if not results:
raise Exception, "Failed creating manifold user: %s" % user_params['email']
result = results[0]
- return result['email']
+ return result['user_id']
def manifold_update_user(request, email, user_params):
# user_params: password, config e.g.,
user_config = json.loads(user[0]['config'])
authority_hrn = user_config.get('authority', None)
- if is_pi(wsgi_request, '$user_hrn', authority_hrn):
+ #if is_pi(wsgi_request, '$user_hrn', authority_hrn):
+ try:
# removing from Django auth_user
UserModel = get_user_model()
UserModel._default_manager.filter(email__iexact = user_email).delete()
# removing manifold user
manifold_delete_user(wsgi_request, user_id)
- else:
- return False
- #raise Exception, "No sufficient rights on authority = ",authority_hrn
+ except Exception, e:
+ #return False
+ print "No sufficient rights on authority = ",authority_hrn
return True
elif request['type'] == 'authority':
#hrn = "%s.%s" % (request['authority_hrn'], request['site_authority'])
hrn = request['site_authority']
+ name = request['site_name']
# XXX tmp sfa dependency
from sfa.util.xrn import Xrn
urn = Xrn(hrn, request['type']).get_urn()
# Only hrn is required for Manifold Query
sfa_authority_params = {
- 'authority_hrn' : hrn,
- #'authority_urn' : urn,
- #'type' : request['type'],
- #'pi' : None,
- #'enabled' : True
+ 'authority_hrn' : hrn,
+ 'name' : name
}
- logger.info("ADD Authority")
+ #logger.info("ADD Authority")
sfa_add_authority(wsgi_request, sfa_authority_params)
request_status['SFA authority'] = {'status': True }
a = PendingAuthority.objects.get(id=request['id'])
ctx = {
'site_name' : a.site_name,
- 'short_name' : a.short_name,
- 'url' : a.url,
- 'city' : a.city,
- 'country' : a.country,
- 'portal_url' : a.current_site,
+ #'short_name' : a.short_name,
+ #'url' : a.url,
+ 'city' : a.address_city,
+ 'country' : a.address_country,
+ #'portal_url' : a.current_site,
}
- user_email = a.email
+ # address_line1 contains the email of the user in pending_authority table
+ user_email = a.address_line1
PendingAuthority.objects.get(id=request['id']).delete()
raise Exception, 'unknown type of request %s' % request['type']
# XXX Remove from Pendings in database
- send_status_email(ctx, user_email, request['type'], 'validated')
+ send_status_email(wsgi_request, ctx, user_email, request['type'], 'validated')
except Exception, e:
request_status['SFA '+request['type']] = {'status': False, 'description': str(e)}
+ logger.error('ERROR - actions.py - portal_validate_request: %s' % e)
+ import traceback
+ logger.error(traceback.format_exc())
status['%s__%s' % (request['type'], request['id'])] = request_status
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 = {}
- # get the domain url
- current_site = Site.objects.get_current()
- current_site = current_site.domain
-
-
+ current_site = get_current_site(wsgi_request)
if not isinstance(request_ids, list):
request_ids = [request_ids]
else:
raise Exception, 'unknown type of request %s' % request['type']
- send_status_email(ctx, user_email, request['type'], 'denied')
+ 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(ctx, user_email, obj_type, 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 + ' request '+ status +'.'
+ 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")
# SEND EMAILS
#-------------------------------------------------------------------------------
-def send_email_to_pis(wsgi_request, request, obj_type):
+def send_email_to_pis(request, context, obj_type):
try:
+ context['current_site'] = get_current_site(request)
+ context['theme'] = theme
# Send an email: the recipients are the PIs of the authority
- recipients = authority_get_pi_emails(wsgi_request, request['authority_hrn'])
+ recipients = authority_get_pi_emails(request, context['authority_hrn'])
theme.template_name = obj_type + '_request_email.txt'
- text_content = render_to_string(theme.template, request)
+ text_content = render_to_string(theme.template, context)
theme.template_name = obj_type + '_request_email.html'
- html_content = render_to_string(theme.template, request)
+ html_content = render_to_string(theme.template, context)
- theme.template_name = obj_type + '_request_email_subject.txt'
- subject = render_to_string(theme.template, request)
- subject = subject.replace('\n', '')
+ #theme.template_name = obj_type + '_request_email_subject.txt'
+ #subject = render_to_string(theme.template, request)
+ #subject = subject.replace('\n', '')
+ subject = "New "+obj_type+" request"
theme.template_name = 'email_default_sender.txt'
- sender = render_to_string(theme.template, request)
+ sender = render_to_string(theme.template, context)
+ sender = sender.replace('\n', '')
msg = EmailMultiAlternatives(subject, text_content, sender, recipients)
msg.attach_alternative(html_content, "text/html")
msg.send()
except Exception, e:
+ print e
print "Failed to send email, please check the mail templates and the SMTP configuration of your server"
)
b.save()
# sends email to user to activate the email
+ request['current_site'] = get_current_site(wsgi_request)
+ request['theme'] = theme
theme.template_name = 'activate_user.html'
html_content = render_to_string(theme.template, request)
theme.template_name = 'activate_user.txt'
if request['private_key']:
account_config['user_private_key'] = request['private_key']
- user_id = user_detail['user_id'] + 1 # the user_id for the newly created user in local:user
-
# XXX TODO: Require a myslice platform
# ALERT: this will disapear with ROUTERV2 of Manifold
# We have to consider the case where several registries can be used