示例#1
0
def phonenumdeleteconfirm(request, username, phonenumid, fmt):
    # permission check
    is_users_url(request.user, username)

    # prepare decryption
    user = get_object_or_404(Acclistuser, Q(accup_user_name=username))
    try:
        enc = get_encryptor(request, user)
    except (KeyError, BadSignature, SignatureExpired):
        return failure(request)
    except AcccryptoDecryptException as e:
        #return failure(request)
        raise e

    # main process
    # get account object
    phonenum = get_object_or_404(Phonenum,
                                 Q(accup_user_id__accup_user_name=username),
                                 Q(id=phonenumid))
    # related accounts
    related_account_list = []
    linked_tmp = Account.objects.filter(
        Q(phonenum__id=phonenum.id),
        Q(accup_user_id__accup_user_name=username)).order_by(
            'service__service_name')
    related_account_list.extend(linked_tmp)
    # decrypt
    phonenum.decrypt(enc)
    related_account_list = obj_sort_by_lambda(
        obj_list_decrypt(related_account_list, enc),
        lambda x: x.service.service_name)
    # delete information
    msg_template = loader.get_template('acclist/linkedinfodeleteconfirm.html')
    msg_context = {
        'info_id':
        phonenum.id,
        'info_delete_url_key':
        'acclist:phonenumdelete',
        'kind_of_info_text':
        KIND_OF_INFO_TEXT['phonenum'],
        'target_info':
        phonenum.phonenum_text,
        'related_acounts':
        (None if len(related_account_list) == 0 else related_account_list),
        'username':
        username,
    }
    relay = msg_template.render(msg_context, request)
    # response
    template = loader.get_template('acclist/acclist.html')
    context = {
        'rendered': relay,
        'description': DESCRIPTION_MESSAGE['phonenumlinkedlist'],
        'key_value': phonenum.phonenum_text,
        'count': len(related_account_list),
        'account_list': related_account_list,
        'username': username,
    }
    return HttpResponse(template.render(context, request))
示例#2
0
def phonenumdeletesuccess(request, username, fmt):
    # permission check
    is_users_url(request.user, username)

    # main process
    template = loader.get_template('acclist/linkedinfodeletesuccess.html')
    context = {
        'title_text': 'Phonenum has been deleted.',
        'message': RESPONSE_MESSAGE['phonenum_delete_success'],
        'username': username,
    }
    return HttpResponse(template.render(context, request))
示例#3
0
def insertsuccess(request, username, accid, fmt):
    # permission check
    is_users_url(request.user, username)

    # main process
    template = loader.get_template('common/success.html')
    context = {
        'message': RESPONSE_MESSAGE['insert_success'],
    }
    return accdetail(request,
                     username,
                     accid,
                     fmt,
                     rendered=template.render(context, request))
示例#4
0
def phonenumdelete(request, username, phonenumid, fmt):
    # permission check
    is_users_url(request.user, username)

    # prepare decryption
    user = get_object_or_404(Acclistuser, Q(accup_user_name=username))
    try:
        enc = get_encryptor(request, user)
    except (KeyError, BadSignature, SignatureExpired):
        return failure(request)
    except AcccryptoDecryptException as e:
        #return failure(request)
        raise e

    # main process
    phonenum = get_object_or_404(Phonenum,
                                 Q(accup_user_id_id__accup_user_name=username),
                                 Q(id=phonenumid))
    # delete account record
    result = None
    try:
        with transaction.atomic():
            phonenum.delete()
        result = LINKED_INFO_DELETE_RESPONSE['ok']
    except IntegrityError as e:
        print(sys.exc_info())
        result = LINKED_INFO_DELETE_RESPONSE['transaction_error']
    except Exception as e:
        print(sys.exc_info())
        result = LINKED_INFO_DELETE_RESPONSE['unexpected_error']
        # for test, raise it again
        raise e

    # return response
    if fmt == 'html':
        if result['code'] != 0:
            errmsg = loader.get_template('acclist/linkedinfoerrormsg.html')
            context = {
                'relay': result['message'],
            }
            return phonenumlinkedlist_render(request,
                                             phonenum.decrypt(enc),
                                             enc,
                                             username,
                                             relay=errmsg.render(
                                                 context, request))
        else:
            return HttpResponseRedirect(
                reverse('acclist:phonenumdeletesuccess', args=(fmt, username)))
示例#5
0
def alllist(request, username, fmt):
    # permission check
    is_users_url(request.user, username)

    # prepare decryption
    user = get_object_or_404(Acclistuser, Q(accup_user_name=username))
    try:
        enc = get_encryptor(request, user)
    except (KeyError, BadSignature, SignatureExpired):
        return failure(request)
    except AcccryptoDecryptException as e:
        #return failure(request)
        raise e

    # prepare lists (decryption and sort)
    mail_list = Mailaddr.objects.filter(
        accup_user_id__accup_user_name=username)
    mail_list = obj_sort_by_property_name(obj_list_decrypt(mail_list, enc),
                                          'mailaddr_text')
    address_list = Address.objects.filter(
        accup_user_id__accup_user_name=username)
    address_list = obj_sort_by_property_name(
        obj_list_decrypt(address_list, enc), 'address_text')
    phonenum_list = Phonenum.objects.filter(
        accup_user_id__accup_user_name=username)
    phonenum_list = obj_sort_by_property_name(
        obj_list_decrypt(phonenum_list, enc), 'phonenum_text')
    service_list = Service.objects.filter(
        accup_user_id__accup_user_name=username)
    service_list = obj_sort_by_property_name(
        obj_list_decrypt(service_list, enc), 'service_name')
    account_list = Account.objects.filter(
        accup_user_id__accup_user_name=username)
    account_list = obj_sort_by_lambda(obj_list_decrypt(account_list, enc),
                                      lambda x: x.service.service_name)

    # set view arguments
    template = loader.get_template('acclist/accandmaillist.html')
    context = {
        'title_text': 'Account list',
        'account_list': account_list,
        'mail_list': mail_list,
        'address_list': address_list,
        'phonenum_list': phonenum_list,
        'service_list': service_list,
        'username': username,
    }
    return HttpResponse(template.render(context, request))
示例#6
0
def updateform(request, username, accid, fmt):
    # permission check
    is_users_url(request.user, username)

    # prepare decryption
    user = get_object_or_404(Acclistuser, Q(accup_user_name=username))
    try:
        enc = get_encryptor(request, user)
    except (KeyError, BadSignature, SignatureExpired):
        return failure(request)
    except AcccryptoDecryptException as e:
        #return failure(request)
        raise e

    # main process
    return HttpResponse(updateform_render(request, username, accid, fmt, enc))
示例#7
0
def delete(request, username, accid, fmt):
    # permission check
    is_users_url(request.user, username)

    # prepare decryption
    user = get_object_or_404(Acclistuser, Q(accup_user_name=username))
    try:
        enc = get_encryptor(request, user)
    except (KeyError, BadSignature, SignatureExpired):
        return failure(request)
    except AcccryptoDecryptException as e:
        #return failure(request)
        raise e

    # main process
    # validate params
    params = None
    account = get_object_or_404(Account,
                                Q(accup_user_id__accup_user_name=username),
                                Q(id=accid))
    # delete account record
    result = None
    acc = None
    try:
        with transaction.atomic():
            account.delete()
        result = DELETE_RESPONSE['ok']
    except IntegrityError as e:
        print(sys.exc_info())
        result = DELETE_RESPONSE['transaction_error']
    except Exception as e:
        result = DELETE_RESPONSE['unexpected_error']
        print(sys.exc_info())
        # for test, raise it again
        raise e

    # return response
    if fmt == 'html':
        if result['code'] != 0:
            return accdetail_render(request,
                                    username,
                                    account.decrypt(enc),
                                    relay={'result': result})
        else:
            return HttpResponseRedirect(
                reverse('acclist:accdeletesuccess', args=(fmt, username)))
示例#8
0
def phonenumlinkedlist(request, username, phonenumid, fmt, relay=None):
    # permission check
    is_users_url(request.user, username)

    # prepare decryption
    user = get_object_or_404(Acclistuser, Q(accup_user_name=username))
    try:
        enc = get_encryptor(request, user)
    except (KeyError, BadSignature, SignatureExpired):
        return failure(request)
    except AcccryptoDecryptException as e:
        #return failure(request)
        raise e

    # main process
    phonenum_obj = get_object_or_404(
        Phonenum, Q(accup_user_id__accup_user_name=username), Q(id=phonenumid))
    return HttpResponse(
        phonenumlinkedlist_render(request, phonenum_obj.decrypt(enc), enc,
                                  username, relay))
示例#9
0
def accdetail(request, username, accid, fmt, relay=None, rendered=None):
    # permission check
    is_users_url(request.user, username)

    # prepare decryption
    user = get_object_or_404(Acclistuser, Q(accup_user_name=username))
    try:
        enc = get_encryptor(request, user)
    except (KeyError, BadSignature, SignatureExpired):
        return failure(request)
    except AcccryptoDecryptException as e:
        #return failure(request)
        raise e

    # main process
    account = get_object_or_404(Account,
                                Q(accup_user_id__accup_user_name=username),
                                Q(id=accid))

    return HttpResponse(
        accdetail_render(request, username, account.decrypt(enc), relay,
                         rendered))
示例#10
0
def deleteconfirm(request, username, accid, fmt):
    # permission check
    is_users_url(request.user, username)

    # prepare decryption
    user = get_object_or_404(Acclistuser, Q(accup_user_name=username))
    try:
        enc = get_encryptor(request, user)
    except (KeyError, BadSignature, SignatureExpired):
        return failure(request)
    except AcccryptoDecryptException as e:
        #return failure(request)
        raise e

    # main process
    # get account object
    account = get_object_or_404(Account,
                                Q(accup_user_id__accup_user_name=username),
                                Q(id=accid))
    # related accounts
    related_account_list = []
    linked_tmp = Account.objects.filter(
        Q(link1__id=account.id),
        Q(accup_user_id__accup_user_name=username)).order_by(
            'service__service_name')
    related_account_list.extend(linked_tmp)
    linked_tmp = Account.objects.filter(
        Q(link2__id=account.id),
        Q(accup_user_id__accup_user_name=username)).order_by(
            'service__service_name')
    related_account_list.extend(linked_tmp)
    linked_tmp = Account.objects.filter(
        Q(link3__id=account.id),
        Q(accup_user_id__accup_user_name=username)).order_by(
            'service__service_name')
    related_account_list.extend(linked_tmp)
    # decrypt
    account.decrypt(enc)
    related_account_list = obj_sort_by_lambda(
        obj_list_decrypt(related_account_list, enc),
        lambda x: x.service.service_name)
    # delete information
    msg_template = loader.get_template('acclist/deleteconfirm.html')
    msg_context = {
        'service':
        account.service.service_name,
        'accname':
        account.name,
        'accid':
        accid,
        'username':
        username,
        'related_acounts':
        (related_account_list if len(related_account_list) > 0 else None),
    }
    relay = msg_template.render(msg_context, request)
    # response
    template = loader.get_template('acclist/accdetail.html')
    context = {
        'title_text': 'Delete account',
        'account': account,
        'key_string': KEY_STRING,
        'rendered': relay,
        'username': username,
        'delete': True,
    }
    return HttpResponse(template.render(context, request))
示例#11
0
def insert(request, username, fmt):
    # permission check
    is_users_url(request.user, username)

    # main process
    return update(request, username, None, fmt)
示例#12
0
def update(request, username, accid, fmt):
    # permission check
    is_users_url(request.user, username)

    # prepare decryption
    user = get_object_or_404(Acclistuser, Q(accup_user_name=username))
    try:
        enc = get_encryptor(request, user)
    except (KeyError, BadSignature, SignatureExpired):
        return failure(request)
    except AcccryptoDecryptException as e:
        #return failure(request)
        raise e

    # main process
    # validate params
    params = None
    if fmt == 'html':
        params = UpdateAccountForm(request.POST)
    # only html format request is allowed, at least for now..
    #elif fmt == 'json':
    #    params = UpdateAccountForm(json.loads(request.body))
    else:
        raise Http404
    # main processing
    if not params.is_valid():
        # todo
        if fmt == 'html':
            result = UPDATE_RESPONSE['update_parameter_error']
            return updateform_render(request,
                                     username,
                                     accid,
                                     fmt,
                                     enc,
                                     False,
                                     relay={'result': result},
                                     validate=params)
        # only html format request is allowed, at least for now..
        #elif fmt == 'json':
        #    HttpResponseBadRequest(json.dumps(params.errors))
    if accid is None:
        account = None
    else:
        account = get_object_or_404(Account,
                                    Q(accup_user_id__accup_user_name=username),
                                    Q(id=accid))
        account.decrypt(enc)
    # save updated information
    result = None
    acc = None
    try:
        with transaction.atomic():
            acc = update_account(user.id, account, params, user, enc)
        result = UPDATE_RESPONSE['ok']
    except IntegrityError as e:
        print(sys.exc_info())
        result = UPDATE_RESPONSE['transaction_error']
    except AcclistException as e:
        print(sys.exc_info())
        result = e.acclist_err_dict
    except Exception as e:
        result = UPDATE_RESPONSE['unexpected_error']
        print(sys.exc_info())
        # for test, raise it again
        raise e

    # return response
    if fmt == 'html':
        if result['code'] != 0:
            if accid is None:
                return updateform_render(request,
                                         username,
                                         accid,
                                         fmt,
                                         enc,
                                         True,
                                         relay={'result': result})
            else:
                return updateform_render(request,
                                         username,
                                         accid,
                                         fmt,
                                         enc,
                                         False,
                                         relay={'result': result})
        if accid is None:
            return HttpResponseRedirect(
                reverse('acclist:accinsertsuccess',
                        args=(fmt, username, acc.id)))
        else:
            return HttpResponseRedirect(
                reverse('acclist:accupdatesuccess',
                        args=(fmt, username, accid)))