# XXX tmp sfa dependency, should be moved to SFA gateway
#from sfa.util.xrn import Xrn
+def get_myslice_platform(request):
+ platform_query = Query().get('local:platform').select('platform_id','platform','gateway_type','disabled','config').filter_by('platform','==','myslice')
+ platform_details = execute_query(request, platform_query)
+ for platform_detail in platform_details:
+ return platform_detail
+
+def get_myslice_account(request):
+ platform_myslice = get_myslice_platform(request)
+ account_query = Query().get('local:account').select('user_id','platform_id','auth_type','config').filter_by('platform_id','==',platform_myslice['platform_id'])
+ account_details = execute_query(request, account_query)
+ for account_detail in account_details:
+ return account_detail
+
+def get_registry_url(request):
+ try:
+ platform_detail = get_myslice_platform(request)
+ platform_config = json.loads(platform_detail['config'])
+ import socket
+ hostname = socket.gethostbyaddr(socket.gethostname())[0]
+ registry = platform_config.get('registry','N/A')
+ if 'localhost' in registry:
+ port = registry.split(':')[-1:][0]
+ registry = "http://" + hostname +':'+ port
+ return registry
+ except Exception as e:
+ print e
+ return None
+
+def get_jfed_identity(request):
+ try:
+ account_detail = get_myslice_account(request)
+ account_config = json.loads(account_detail['config'])
+ if 'user_private_key' in account_config:
+ private_key = account_config['user_private_key']
+ user_hrn = account_config.get('user_hrn','N/A')
+ platform_detail = get_myslice_platform(request)
+ #registry = get_registry_url(request)
+ registry = 'http://sfa-fed4fire.pl.sophia.inria.fr:12345/'
+ jfed_identity = user_hrn + '\n' + registry + '\n' + private_key
+ return jfed_identity
+ else:
+ return None
+ except Exception as e:
+ print e
+ return None
# Get the list of pis in a given authority
def authority_get_pis(request, authority_hrn):
query = Query().get('myslice:user').select(user_fields).filter_by('user_hrn','==',user_hrn)
#query = Query.get('myslice:user').filter_by('user_hrn', '==', user_hrn).select('pi_authorities')
results = execute_query(wsgi_request, query)
- print "is_pi results = ", results
+ #print "is_pi results = ", results
for user_detail in results:
if authority_hrn in user_detail['pi_authorities']:
return True
return results
#explicitly mention the platform_id
-def manifold_delete_account(request, platform_id, user_id, account_params):
- query = Query.delete('local:account').filter_by('platform_id', '==', platform_id).filter_by('user_id', '==', user_id).set(account_params).select('user_id')
+def manifold_delete_account(request, user_id, platform_id = None):
+ query = Query.delete('local:account').filter_by('user_id', '==', user_id)
+ if platform_id is not None:
+ query.filter_by('platform_id', '==', platform_id)
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')
+def manifold_delete_user(request, user_id):
+ query = Query.delete('local:user').filter_by('user_id', '==', user_id).select('user_id')
results = execute_admin_query(request,query)
return results
result, = results
return result['platform_id']
+def delete_local_user(wsgi_request, user_email):
+ user_query = Query().get('local:user') \
+ .filter_by('email', '==', user_email) \
+ .select('user_id','config')
+ user = execute_admin_query(wsgi_request, user_query)
+ if len(user) == 0:
+ return False
+ #raise Exception, "User not found, check local DB"
+ else:
+ user_id = user[0]['user_id']
+ user_config = json.loads(user[0]['config'])
+ authority_hrn = user_config.get('authority', None)
+
+ if is_pi(wsgi_request, '$user_hrn', authority_hrn):
+ # removing from Django auth_user
+ UserModel = get_user_model()
+ UserModel._default_manager.filter(email__iexact = user_email).delete()
+
+ # removing manifold account
+ manifold_delete_account(wsgi_request, user_id)
+
+ # removing manifold user
+ manifold_delete_user(wsgi_request, user_id)
+ else:
+ return False
+ #raise Exception, "No sufficient rights on authority = ",authority_hrn
+
+ return True
+
def make_request_user(user):
request = {}
msg.send()
except Exception, e:
print "Failed to send email, please check the mail templates and the SMTP configuration of your server"
-
- # 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)
+
+ delete_local_user(wsgi_request, user_email)
except Exception, e:
request_status['SFA authority'] = {'status': False, 'description': str(e)}
sender = sender.replace('\n', '')
- subject = 'User validated'
+ subject = 'Account validated'
msg = EmailMultiAlternatives(subject, text_content, sender, [request['email']])
msg.attach_alternative(html_content, "text/html")
import requests
import time
from requests.auth import HTTPBasicAuth
-
- URL_REST = ConfigEngine.iotlab_url
- LOGIN_ADMIN = ConfigEngine.iotlab_admin_user
- PASSWORD_ADMIN = ConfigEngine.iotlab_admin_password
+
+ engine = ConfigEngine()
+ URL_REST = engine.iotlab_url()
+ LOGIN_ADMIN = engine.iotlab_admin_user()
+ PASSWORD_ADMIN = engine.iotlab_admin_password()
auth = HTTPBasicAuth(LOGIN_ADMIN,PASSWORD_ADMIN)
headers = {'content-type': 'application/json'}