Esempio n. 1
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. 2
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. 3
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. 4
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. 5
0
def accounts_delete(request):
    """
        Function to manage the deletion of the accounts
    """
    # Creating the default value
    account = None

    # If not declared in settings, configuring a default value
    # http://www.django-rest-framework.org/api-guide/exceptions/#exception-handling-in-rest-framework-views
    try:
        nfe = settings.NON_FIELD_ERRORS_KEY
    except AttributeError:
        nfe = 'non_field_errors'

    # Parsing data from the request and changing the creator field for the user who did the request
    data = JSONParser().parse(request)
    data['creator'] = request.user.pk

    # Check if all the data is valid to be used
    serializer = AccountSerializer(data=data)
    if serializer.is_valid():
        # If valid, try to get the model instance to check if already exists
        try:
            account = Account.objects.get(id=serializer.validated_data['id'])

            # Check if the creator is who did the request
            if request.user.pk == account.creator.pk:
                account.delete()
                return Response({
                    'status': 'ok',
                    'message': 'deleted'
                })
            else:
                return Response(
                    {
                        'errors': {
                            nfe: 'No permissions',
                        }
                    },
                    status=status.HTTP_400_BAD_REQUEST,
                )
        except Account.DoesNotExist:
            return Response(
                {
                    'errors': {
                        nfe: 'Not exists',
                    }
                },
                status=status.HTTP_400_BAD_REQUEST,
            )
    else:
        return Response(
            {
                'errors': {
                    'data_validation_error': 'Error validating data',
                }
            },
            status=status.HTTP_400_BAD_REQUEST,
        )
Esempio n. 6
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. 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(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. 10
0
def add(request):
    data = AccountSerializer(data=request.data)
    if not data.is_valid():
        return Response({
            'status': 400,
            'result': False
        },
                        status=resp_status.HTTP_404_NOT_FOUND)
    uuid = data.validated_data['uuid']
    value = data.validated_data['value']
    try:
        model = Account.objects.get(pk=uuid)
    except ObjectDoesNotExist:
        return Response({
            'status': 400,
            'result': False
        },
                        status=resp_status.HTTP_404_NOT_FOUND)
    if not model.status:
        return Response(
            {
                'status': 405,
                'result': False,
                'addition': {
                    'uuid': model.uuid,
                    'name': model.name,
                    'balance': model.balance,
                    'status': model.status
                },
                'description': {
                    'status': 'Счет закрыт'
                }
            },
            status=resp_status.HTTP_405_METHOD_NOT_ALLOWED)
    model.balance += value
    model.save()
    return Response(
        {
            'status': 200,
            'result': True,
            'addition': {
                'uuid': model.uuid,
                'name': model.name,
                'balance': model.balance,
                'status': model.status
            },
            'description': {
                'status': 'Счет пополнен'
            }
        },
        status=resp_status.HTTP_200_OK)
Esempio n. 11
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. 12
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. 13
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. 14
0
def accounts_add(request):
    """
        Function to manage the addition of new accounts
    """
    # Creating the default value
    response = {}

    # If not declared in settings, configuring a default value
    # http://www.django-rest-framework.org/api-guide/exceptions/#exception-handling-in-rest-framework-views
    try:
        nfe = settings.NON_FIELD_ERRORS_KEY
    except AttributeError:
        nfe = 'non_field_errors'

    # Parsing data from the request and changing the creator field for the user who did the request
    data = JSONParser().parse(request)
    data['creator'] = request.user.pk

    # Check if all the data is valid to be used
    serializer = AccountSerializer(data=data)
    if serializer.is_valid():
        # If valid, create it and notify
        try:
            Account.objects.get(iban=serializer.validated_data['iban'])
            response = {
                'errors': {
                    nfe: 'iban already exists',
                }
            }
            return Response(response, status=status.HTTP_400_BAD_REQUEST)

        except Account.DoesNotExist:
            serializer.create(serializer.validated_data)
            response = {
                'status': 'ok',
                'message': 'created'
            }
            return Response(response, status=status.HTTP_201_CREATED)
    else:
        # If not valid, raise an error for data_validation
        response = {
            {'errors': {'data_validation_error': 'Error validating data'}}
        }
        return Response(response, status=status.HTTP_400_BAD_REQUEST)
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)
Esempio n. 16
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. 17
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. 18
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. 19
0
def substract(request):
    data = AccountSerializer(data=request.data)
    if not data.is_valid():
        return Response({
            'status': 400,
            'result': False
        },
                        status=resp_status.HTTP_404_NOT_FOUND)
    uuid = data.validated_data['uuid']
    value = data.validated_data['value']
    try:
        model = Account.objects.get(pk=uuid)
    except ObjectDoesNotExist:
        return Response({
            'status': 400,
            'result': False
        },
                        status=resp_status.HTTP_404_NOT_FOUND)
    if not model.status:
        return Response(
            {
                'status': 405,
                'result': False,
                'addition': {
                    'uuid': model.uuid,
                    'name': model.name,
                    'balance': model.balance,
                    'status': model.status
                },
                'description': {
                    'status': 'Счет закрыт'
                }
            },
            status=resp_status.HTTP_405_METHOD_NOT_ALLOWED)
    result = model.balance - model.hold - value
    is_possible = True if result >= 0 else False
    if not is_possible:
        return Response(
            {
                'status': 405,
                'result': False,
                'addition': {
                    'uuid': model.uuid,
                    'name': model.name,
                    'balance': model.balance,
                    'status': model.status
                },
                'description': {
                    'status': 'Недостаточно средств'
                }
            },
            status=resp_status.HTTP_405_METHOD_NOT_ALLOWED)
    model.balance = result
    model.save()
    return Response(
        {
            'status': 200,
            'result': True,
            'addition': {
                'uuid': model.uuid,
                'name': model.name,
                'balance': model.balance,
                'status': model.status
            },
            'description': {
                'status': 'Списание произведено'
            }
        },
        status=resp_status.HTTP_200_OK)