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))
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))
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))
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)))
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))
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))
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)))
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))
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))
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))
def insert(request, username, fmt): # permission check is_users_url(request.user, username) # main process return update(request, username, None, fmt)
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)))