Esempio n. 1
0
    def post(self, request, format=None):
        serializer = AccountSerializer(data=request.data)
        if serializer.is_valid():
            try:
                if Account.objects.filter(productType=request.data['productType'], instanceId=request.data['instanceId']):
                    print ("  [ERROR] There is an entry already with that InstanceId (%s) for the same ProductType (%s)" % (request.data['instanceId'], request.data['productType']))
                    return Response(status=status.HTTP_400_BAD_REQUEST)
                serializer.save()
                #prepares and sends the message to the queue
                message = {}
                message['instanceId'] = request.data['instanceId']
                message['event'] = request.data['status']
                #send_msg(str(message))
                send_msg(json.dumps(serializer.data))

                #create the SLA agreements in the SLA module based on the already created templates
                templateId = request.data['productType']+request.data['productId']+request.data['flavour']
                createAgreement(templateId, request.data['clientId'], request.data['agreementId'])
                #start the Agreement enforcement
                f = restclient.Factory(settings.SLA_URL)
                a_enforcement = f.enforcements()
                a_enforcement.start(request.data['agreementId']) 

            except ReferenceError:
                print "  [ERROR] Could not update the messages queue"
                return Response(status=status.HTTP_408_REQUEST_TIMEOUT)
            except Exception as e:
                print "DEBUG: ", e
                return Response(status=status.HTTP_400_BAD_REQUEST)
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Esempio n. 2
0
def user_list(request, pk=None):
    """
    List all required messages, or create a new message.
    """
    if request.method == 'GET':
        if pk:  # If PrimaryKey (id) of the user is specified in the url
            users = Account.objects.filter(
                id=pk)  # Select only that particular user
        else:
            users = Account.objects.all()  # Else get all user list
        serializer = AccountSerializer(users,
                                       many=True,
                                       context={'request': request})
        return JsonResponse(serializer.data,
                            safe=False)  # Return serialized data
    elif request.method == 'POST':
        data = JSONParser().parse(
            request
        )  # On POST, parse the request object to obtain the data in json
        serializer = AccountSerializer(data=data)  # Seraialize the data
        if serializer.is_valid():
            serializer.save()  # Save it if valid
            return JsonResponse(serializer.data,
                                status=201)  # Return back the data on success
        return JsonResponse(serializer.errors,
                            status=400)  # Return back the errors  if not valid
Esempio n. 3
0
 def get(self, request, vnf_instance, new_status, format=None):
     queryset = Account.objects.filter(productType=settings.VNF,
                                       instanceId=vnf_instance)
     if queryset.exists():
         jsonStatus = '{"status":"' + new_status + '"}'
         for account in queryset:
             serializer = AccountSerializer(account,
                                            data=json.loads(jsonStatus))
             try:
                 if serializer.is_valid():
                     #saves the new status
                     serializer.save()
                     print "status changed "
                     #prepares and sends the message to the queue
                     message = {}
                     message['instanceId'] = vnf_instance
                     message['event'] = new_status
                     #send_msg(json.dumps(serializer.data))
                     return Response(serializer.data,
                                     status=status.HTTP_201_CREATED)
             except ReferenceError:
                 print "  [ERROR] Could not update the messages queue"
                 return Response(status=status.HTTP_408_REQUEST_TIMEOUT)
             except Exception:
                 return Response(status=status.HTTP_400_BAD_REQUEST)
     return Response(queryset, status=status.HTTP_404_NOT_FOUND)
Esempio n. 4
0
 def put(self, request, pk, format=None):    
     account = self.get_object(pk)
     serializer = AccountSerializer(account, data=request.data)
     print "request: ", request.data
     if serializer.is_valid():
         serializer.save()
         return Response(serializer.data)
     return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
 def post(self, request):
     if request.user.is_authenticated:
         serializer = AccountSerializer(data=request.data)
         if serializer.is_valid():
             serializer.save(owner=request.user)
             return JsonResponse(serializer.data,
                                 status=status.HTTP_201_CREATED)
         return Response(serializer.errors,
                         status=status.HTTP_400_BAD_REQUEST)
     return Response(status=status.HTTP_401_UNAUTHORIZED)
Esempio n. 6
0
    def post(self, request, ns_instance, new_status, format=None):
        """
        ---
        response_serializer: AccountSerializer
        """
        queryset = Account.objects.filter(productType=settings.NETWORK_SERVICE, instanceId=ns_instance)
        if queryset.exists():
            jsonStatus='{"status":"' + new_status + '"}' 
            service = queryset[0]
            serializer = AccountSerializer(service, data=json.loads(jsonStatus))
            try:
                if serializer.is_valid():
                    #saves the new status
                    serializer.save()
                    print "status changed "
                    #start/stop the SLA enforcement accordingly
                    if (new_status == settings.STATUS_RUNNING):
                        self.startEnforcement(service.agreementId)
                    if (new_status == settings.STATUS_STOPPED):
                        self.stopEnforcement(service.agreementId)

                    #prepares and sends the message to the queue
                    message = {}
                    message['instanceId'] = ns_instance
                    message['event'] = new_status
                    #print (json.dumps(serializer.data))
                    send_msg(json.dumps(serializer.data))

                    #update the status of the participant VNFs
                    vnf_list = service.relatives.replace(" ", "").split(",")
                    print "VNF list: ", vnf_list
                    for vnfInstance in vnf_list:
                        time.sleep(1)
                        print "VNF: ", vnfInstance
                        vnfquery = Account.objects.filter(productType=settings.VNF, instanceId=vnfInstance)    
                        vnf = vnfquery[0]
                        vnfserializer = AccountSerializer(vnf, many=False, data=json.loads(jsonStatus))
                        if vnfserializer.is_valid():
                            #print "VNF2: ", json.dumps(vnfserializer.data)
                            vnfserializer.save()
                            #start/stop the SLA enforcement accordingly
                            if (new_status == settings.STATUS_RUNNING):
                                self.startEnforcement(vnf.agreementId)
                            if (new_status == settings.STATUS_STOPPED):
                                self.stopEnforcement(vnf.agreementId)
                    return Response(serializer.data, status=status.HTTP_201_CREATED)
            except ReferenceError:
                print "  [ERROR] Could not update the messages queue"
                return Response(status=status.HTTP_408_REQUEST_TIMEOUT)
            except Exception as e:
                print "  [ERROR] ", e
                return Response(status=status.HTTP_400_BAD_REQUEST)
        return Response(queryset, status=status.HTTP_404_NOT_FOUND)
Esempio n. 7
0
 def post(self, request):
     data = request.data.copy()
     data['password'] = gen_password(len_to=10)
     serializer = AccountSerializer(data=data)
     if serializer.is_valid():
         serializer.save()
         threading.Thread(target=self._send_credentials,
                          kwargs=data).start()
         return Response({'detail': 'account has been created'},
                         status=status.HTTP_201_CREATED)
     else:
         return Response(serializer.errors,
                         status=status.HTTP_400_BAD_REQUEST)
Esempio n. 8
0
 def post(request):
     account = Account.get_by_pk(request.user.username)
     if account is None:
         return Response({'detail': 'account is not found'},
                         status=status.HTTP_404_NOT_FOUND)
     serializer = AccountSerializer(instance=account, data=request.data)
     if serializer.is_valid():
         serializer.save()
         return Response({'detail': 'account has been edited'},
                         status=status.HTTP_201_CREATED)
     else:
         return Response(serializer.errors,
                         status=status.HTTP_400_BAD_REQUEST)
Esempio n. 9
0
    def post(request):
        email = request.data.get('email')
        if email is None:
            return Response({'detail': 'email was not provided'},
                            status=status.HTTP_400_BAD_REQUEST)
        account = Account.objects.filter(email=email).first()
        if account is None:
            return Response({'detail': 'account is not found'},
                            status=status.HTTP_404_NOT_FOUND)
        if 'confirmation_code' not in request.data:
            return Response({'detail': 'missing verification code'},
                            status=status.HTTP_400_BAD_REQUEST)

        session = SessionStore(session_key=account.session_key)

        if request.data.get('confirmation_code', '-1') == session['v_code']:
            new_password = request.data.get('new_password', None)
            new_password_confirm = request.data.get('new_password_confirm',
                                                    None)
            if new_password is None or new_password_confirm is None:
                return Response(
                    {'detail': 'missing new password or its confirmation'},
                    status=status.HTTP_400_BAD_REQUEST)
            if new_password != new_password_confirm:
                return Response({'detail': 'password confirmation failed'},
                                status=status.HTTP_400_BAD_REQUEST)
            data = request.data.copy()
            data['username'] = account.username
            data['password'] = new_password
            serializer = AccountSerializer(instance=account, data=data)
            if serializer.is_valid():
                serializer.save()
                session.delete()
                account.session_key = None
                account.save()

                try:
                    request.user.auth_token.delete()
                except (AttributeError, ObjectDoesNotExist):
                    pass

                logout(request)

                return Response({'detail': 'password has been changed'},
                                status=status.HTTP_201_CREATED)
            else:
                return Response(serializer.errors,
                                status=status.HTTP_400_BAD_REQUEST)
        else:
            return Response({'detail': 'verification code is incorrect'},
                            status=status.HTTP_400_BAD_REQUEST)
Esempio n. 10
0
 def stopVNF(self, vnfInstance, jsonStatus, new_status):
     vnfquery = Account.objects.filter(productType=settings.VNF, instanceId=vnfInstance) 
     vnf = vnfquery[0]
     vnfSerializer = AccountSerializer(vnf, many=False, data=json.loads(jsonStatus))
     if vnfSerializer.is_valid():
         #print "VNF2: ", json.dumps(vnfserializer.data)
         vnfSerializer.save()
         #Send the message to the billing module
         send_msg(json.dumps(vnfSerializer.data))
         #start/stop the SLA enforcement accordingly
         if (new_status == settings.STATUS_RUNNING):
             self.startEnforcement(vnf.agreementId)
         if (new_status == settings.STATUS_STOPPED):
             self.stopEnforcement(vnf.agreementId)
Esempio n. 11
0
def account_list(request):
    if request.method == 'GET':
        account = Account.objects.all()
        account_serializer = AccountSerializer(account, many=True)
        return JSONResponse(account_serializer.data)
    elif request.method == 'POST':
        account_data = JSONParser().parse(request)
        account_serializer = AccountSerializer(data=account_data)
        if account_serializer.is_valid():
            account_serializer.save()
            return JSONResponse(account_serializer.data,
                                status=status.HTTP_201_CREATED)
        return JSONResponse(account_serializer.errors,
                            status=status.HTTP_400_BAD_REQUEST)
Esempio n. 12
0
    def post(self, request, format=None):
        serializer = AccountSerializer(data=request.data)
        if serializer.is_valid():
            try:
                if Account.objects.filter(
                        productType=request.data['productType'],
                        instanceId=request.data['instanceId']):
                    print(
                        "  [ERROR] There is an entry already with that InstanceId (%s) for the same ProductType (%s)"
                        % (request.data['instanceId'],
                           request.data['productType']))
                    return Response(status=status.HTTP_400_BAD_REQUEST)
                serializer.save()

                #create the SLA agreements in the SLA module based on the already created templates
                #templateId = request.data['productType']+request.data['productId']+request.data['flavour']
                templateId = request.data[
                    'productType'] + "@" + settings.DOMAIN_ID + "*" + request.data[
                        'productId'] + request.data['flavour']
                createAgreement(templateId, request.data['clientId'],
                                request.data['agreementId'])
                #start the Agreement enforcement
                f = restclient.Factory(settings.SLA_URL)
                a_enforcement = f.enforcements()
                a_enforcement.start(request.data['agreementId'])
                #triggers IMoS monitoring sending the NS instance ID
                if (request.data['agreementId'].startswith('ns')):
                    print("  [INFO] Contacting IMoS with url: %s" %
                          (settings.IMOS_URL + request.data['instanceId']))
                    requests.put(str(settings.IMOS_URL) +
                                 str(request.data['instanceId']),
                                 data=None)
                    #Virtual Links agreements:

            except Exception as e:
                print "DEBUG: ", e
                return Response(status=status.HTTP_400_BAD_REQUEST)
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Esempio n. 13
0
def account_detail(request, pk):
    try:
        account = Account.objects.get(pk=pk)
    except Account.DoesNotExist:
        return HttpResponse(status=status.HTTP_400_BAD_REQUEST)

    if request.method == 'GET':
        account_serializer = AccountSerializer(account)
        return JSONResponse(account_serializer.data)

    elif request.method == 'PUT':
        account_data = JSONParser().parse(request)
        account_serializer = AccountSerializer(account, data=account_data)
        if account_serializer.is_valid():
            account_serializer.save()
            return JSONResponse(account_serializer.data)
        return JSONResponse(account_serializer.errors,
                            status=status.HTTP_400_BAD_REQUEST)

    elif request.method == 'DELETE':
        account.delete()
        return HttpResponse(status=status.HTTP_204_NO_CONTENT)
Esempio n. 14
0
 def get(self, request, vnf_instance, new_status, format=None):
     queryset = Account.objects.filter(productType=settings.VNF, instanceId=vnf_instance)
     if queryset.exists():
         jsonStatus='{"status":"' + new_status + '"}' 
         for account in queryset:
             serializer = AccountSerializer(account, data=json.loads(jsonStatus))
             try:
                 if serializer.is_valid():
                     #saves the new status
                     serializer.save()
                     print "status changed "
                     #prepares and sends the message to the queue
                     message = {}
                     message['instanceId'] = vnf_instance
                     message['event'] = new_status
                     #send_msg(str(message))
                     send_msg(json.dumps(serializer.data))
                     return Response(serializer.data, status=status.HTTP_201_CREATED)
             except ReferenceError:
                 print "  [ERROR] Could not update the messages queue"
                 return Response(status=status.HTTP_408_REQUEST_TIMEOUT)
             except Exception:
                 return Response(status=status.HTTP_400_BAD_REQUEST)
     return Response(queryset, status=status.HTTP_404_NOT_FOUND)
Esempio n. 15
0
def registration_admin_view(request):
    if request.method == 'POST':
        data = {}
        email = request.data.get('email', '0').lower()
        if validate_email(email) != None:
            data['error_message'] = 'That email is already in use.'
            data['response'] = 'Error'
            return Response(data)

        serializer = AccountSerializer(data=request.data)

        if serializer.is_valid():
            account = serializer.save()
            data['response'] = 'successfully registered new user.'
            data['email'] = account.email
            data['pk'] = account.pk
            token = Token.objects.get(user=account).key
            data['token'] = token
        else:
            data = serializer.errors
        return Response(data)