def deleteTier(request): if request.method == "GET" and "id" in request.GET: apicall = requests.get('http://127.0.0.1:8080/tier', params={"id": request.GET.get('id')}).json() if apicall['length']: form = DeleteTierForm({ 'id': request.GET.get('id'), }) return render(request, 'staff/deletetier.html', { 'form': form, 'item': apicall['items'][0], }) else: messages(request, f"Transaction Tier with id = {request.GET.get('id')} is not found") return redirect(reverse('staff:tier')) elif request.method == "POST": form = DeleteTierForm(request.POST) if form.is_valid(): s = f"{form.cleaned_data.get('id')}{12345}" apicall = requests.delete(f"http://127.0.0.1:8080/tier?id={form.cleaned_data.get('id')}&signature={hashlib.sha256(s.encode()).hexdigest()}") if apicall.json(): messages.success(request, f"Successfully deleted Tier with id = {form.cleaned_data.get('id')}") return redirect(reverse("staff:tier")) else: messages.error(request, f"Delete unsuccessful, Tier with id = {form.cleaned_data.get('id')}") return redirect(reverse("staff:tier")) else: messages.error(request, "There's an unknown error, please contact Dev") return redirect(reverse("staff:tier")) else: return redirect(reverse("user:redirect"))
def register(request): if request.method == 'POST': first_name = request.POST['first_name'] last_name = request.POST['last_name'] username = request.POST['username'] password1 = request.POST['password1'] password2 = request.POST['password2'] email = request.POST['email'] if password1 == password2: if User.objects.filter(username=username).exists(): messages.info(request, 'username taken') return redirect('register') elif User.objects.filter(email=email).exists(): messages.info(request, "Email has been taken") return redirect('register') else: user = User.objects.create_user(username=username, password=password1, email=email, first_name=first_name, last_name=last_name) user.save() messages(request, 'user created') return redirect('login') else: print('user not created sry Bhai :(') return redirect('/') else: return render(request, 'register.html')
def new_chapter(request): if request.method == 'POST': class_name = request.POST.get('class_id_for_new_chapter') new_chapter = request.POST.get('new_chapter') new_chapter_desc = request.POST.get('new_chapter_desc') try: class_name = Class.objects.get(id=class_name) except Class.DoesNotExist: messages.error(request, "Class Does not exist") print('Class Does not exist') return redirect('class:index') print(class_name.classmaterialschapter_set.filter(name=new_chapter)) if class_name.classmaterialschapter_set.filter(name=new_chapter): messages.warning(request, "Chapter name: \'" + str(new_chapter) + "\' already exists in this class") return redirect('class:add_new_mat') else: if class_name.teacher.user == request.user: new_chap = ClassMaterialsChapter(name=new_chapter, className=class_name, description=new_chapter_desc) new_chap.save() class_name = class_name.name messages.success(request, str(new_chapter) + " Added successfully to " + str(class_name)) return redirect('class:add_new_mat') else: messages(request, 'You do not have access to this class') return redirect('class:add_new_mat') else: return redirect('class:add_new_mat')
def updateTier(request): if request.method == "GET" and "id" in request.GET: apicall = requests.get('http://127.0.0.1:8080/tier', params={"id": request.GET.get('id')}).json() if apicall['length']: form = UpdateTierForm(apicall['items'][0]) return render(request, 'staff/updatetier.html', {'form': form}) else: messages(request, f"Transaction Tier with id = {request.GET.get('id')} is not found") return redirect(reverse('staff:tier')) elif request.method == "POST": form = UpdateTierForm(request.POST) if form.is_valid(): data = {**form.cleaned_data,} s = f"{data.get('id')}{data.get('minimumTransaction')}{data.get('maximumTransaction')}{data.get('probability')}{data.get('discount')}{12345}" data = { **form.cleaned_data, 'signature': hashlib.sha256(s.encode()).hexdigest() } apicall = requests.put('http://127.0.0.1:8080/tier', json=data) if apicall.status_code == 201: messages.success(request, f"Transaction Tier with id = {form.cleaned_data.get('id')} successfully updated") return redirect(reverse('staff:tier')) else: messages.error(request, "There's an error on the Server") return render(request, 'staff/updatetier.html', {'form': form}) else: messages.error(request, "Please correct the field below") return render(request, 'staff/updatetier.html', {'form': form}) else: return redirect(reverse('staff:tier'))
def cancel_withdrawal(modelAdmin, request, queryset): if request.path == "/admin/main/withdrawal/": queryset.update(status="cancelled") else: messages( request, messages.ERROR, "Oga, no dey try deadly things. go to the withdrawal model and do this stuff" )
def comment_delete_question(request, comment_id): """ 질문 댓글 삭제 """ comment = get_object_or_404(Comment, pk=comment_id) if request.user != comment.author: messages(request, '삭제권한이 없습니다.') else: comment.delete() return redirect('pybo:detail', question_id=comment.question.id)
def activate(request, key): user = models.User.objects.filter(label=key) if not user: messages(request, _("User not found!")) return redirect("home") else: if user[0].active: raise Http404 user.update(active=True) return redirect("user_page")
def login(request): if request.method == 'POST': username = request.POST['username'] password = request.POST['password'] user = auth.authenticate(username=username, password=password) if user is not None: auth.login(request, user) return redirect('login') else: messages(request, 'User not found') return redirect('login') return render(request, 'login.html')
def form_valid(self, form): self.object = form.save(commit=False) width = self.object.width if width == 0.8: width = 1.0 self.object.seonr = SEONR.objects.filter(color=self.object.color).latest('date') self.object.efflorescence = Efflorescence.objects.filter().latest('date') self.object.heatconduction = HeatConduction.objects.filter(width=width).latest('date') self.object.frost_resistance = FrostResistance.objects.filter(color=self.object.color).latest('date') self.object.water_absorption = WaterAbsorption.objects.filter().latest('date') self.object.save() messages(self.request, u'Партия созданна') return redirect(self.get_success_url())
def register_customer_view(request): form = register_customer_form(request.POST) if form.is_valid(): u_name = form.cleaned_data.get('username') email = form.cleaned_data.get('email') print(form.cleaned_data) profile_object = Profile.objects.filter(email__exact=email) print(profile_object) flag = False for i in profile_object: if (i[email] == email): flag = True flag2 = False for i in User.objects.filter(username__iexact=u_name): if (i.username == u_name): flag2 = True if flag: print('Email taken already.') messages.info(request, 'Email taken already.') form = register_restaurant_form() elif flag2: print('User Name Aready Taken') messages(request, 'User Name Aready Taken') form = register_restaurant_form() elif form.cleaned_data.get('password1') != form.cleaned_data.get( 'password2'): print('Password did not match.') messages(request, 'Password did not match.') form = register_restaurant_form() else: user = form.save() user.refresh_from_db() user.profile.name = form.cleaned_data.get('name') user.profile.email = form.cleaned_data.get('email') user.profile.contact_no = form.cleaned_data.get('contact_no') user.profile.is_customer = True user.save() # username = form.cleaned_data.get('username') # password = form.cleaned_data.get('password1') # user = authenticate(username=username, password=password) # login(request, user) return redirect('index') else: form = register_restaurant_form() return render(request, 'users/restaurant_registration.html', {'form': form})
def addquestion(request): if request.user.is_authenticated: obj=question() obj.writer=request.user obj.content=request.GET['content'] obj.date=datetime.date.today() obj.save() tag=request.GET['hashtag'] tag=tag.replace(" ","") print(tag) tag=re.split("#",tag) taglist=tag[1:-1] taglist+=[tag[-1]] print(taglist) for k in taglist: if len(k)<50: try: temp=hashtag.objects.get(name=k) temp.used_count+=1 temp.save() except hashtag.DoesNotExist: temp=hashtag() temp.name=k temp.creator=request.user temp.save() try: newtag=usershashtag() newtag.user=request.user newtag.hashtag=temp newtag.save() temp.followers+=1 temp.save() except IntegrityError: print("already added") objtemp=tag_in_question() objtemp.hashtag=temp objtemp.question=obj objtemp.save() else: e="one hash(#) tag length should not exceed 50" messages.add_message(request,messages.ERROR,e) e="Article posted " messages.add_message(request,messages.SUCCESS,e) return HttpResponseRedirect("/community") else: messages(request,messages.INFO,"please login to post a question") return render(request,'account/notauthorised.html')
def reset_password(request): try: if request.method == 'POST': User = get_user_model() old_password = request.POST['old_password'] new_password = request.POST['new_password1'] confirm_new_password = request.POST['new_password2'] if new_password == confirm_new_password: if new_password.strip() == '': return messages.success(request, 'La contraseña no puede estar vacia') else: if len(new_password) < 6: return JsonResponse({'error': 'La contraseña debe contener mínimo 6 caracteres'}) else: usr = User.objects.get(id = request.session['_auth_user_id']) if(usr.check_password(old_password)): usr.set_password(new_password) usr.save() return JsonResponse({'message': 'Las contraseñas ha sido cambiada exitosamente'}) return JsonResponse({'message': 'Contraseña antigua incorrecta'}) else: return messages(request, 'Las contraseñas no coinciden') return redirect('dashboard') except EOFError as identifier: return JsonResponse({'error': 'Ha ocurrido un error en el servidor, intentelo nuevamente.'})
def returnBook(request, pk): issue = Issue.objects.get(id=pk) penalty = calculate_penalty(issue) book = issue.book book.available_copies = book.available_copies + 1 book.save() student = Student.objects.get(first_name=issue.student_name.first_name) student.no_of_issued_books = student.no_of_issued_books - 1 student.save() messages(request, 'You have returned the book') return redirect('lms-library')
def deletenewsolution(request, pk): if request.method == 'POST': solution = Solution.objects.get(pk=pk) if solution: problem = CodingProblem.objects.get(pk=solution.problem_id.pk) solutions = Solution.objects.filter(problem_id=problem) if len(solutions) == 1: problem.status = False problem.save() solution.delete() messages.success(request, 'Solution deletion successful') path = '/'.join(['', 'codingproblems', 'problem', str(problem.pk)]) return redirect(path) messages(request, 'Solution not found') return redirect('/') return redirect('/')
def change_admin_pw(request): if request.method == 'POST': name = request.user.username user = get_object_or_404(User, username=name) form = UserForm(request.POST or None) if form.is_valid(): user.password = make_password(form.cleaned_data['password']) user.save() messages.success(request, 'Password has been updated!') return redirect('admin_login') else: messages(request, 'Failed to change password!') return redirect('change_admin_pw') return redirect('dashboard') elif request.method == 'GET': return render(request, 'auth/change_password.html')
def userlogin(request): if not request.user.is_authenticated: if request.method == 'POST': fm = AuthenticationForm(request=request, data=request.Post) if fm.is_valid(): uname = fm.cleaned_data['username'] upass = fm.cleaned_data['password'] user = authenticate(username=uname, password=upass) if user is not None: login(request, user) messages(request, "login successfully!!") return HttpResponseRedirect('/profile/') else: fm = AuthenticationForm() return render(request, 'userlogin.html', {'form': fm}) else: return HttpResponseRedirect('/profile/')
def confirm_withdrawal(modelAdmin, request, queryset): if request.path == "/admin/main/withdrawal/": queryset.update(status="completed") for obj in queryset: if obj.amount <= obj.user.account_balance: obj.user.account_balance -= obj.amount obj.user.save() else: messages( request, messages.ERROR, "Withdrawal amount is_less than the user's account balance" ) else: messages( request, messages.ERROR, "Oga, no dey try deadly things. go to the withdrawal model and do this stuff" )
def contactpage(request): if request.method == 'POST': name = request.POST['name'] email = request.POST['email'] message = request.POST['message'] context = messages(name=name, number=number) context.save() return redirect('home/Apply.html')
def add_group(request): message = None if request.POST: group, message = handle_add_group_form(request, request.POST) if group: addition(request, group) return redirect('todo:conversation', group.pk) return messages(request, error=message)
def submit_password_reset(request, email): try: user = User.objects.get(email=email) except Exception: messages(request, 'Invalid access.', extra_tags='login') return HttpResponseRedirect(reverse('c3:index')) else: errors = {} User.objects.check_pwd_confirm(request.POST, errors) if errors: for key, value in errors.items(): messages.error(request, value, extra_tags='reset') return HttpResponseRedirect(reverse('c3:passwordreset', args=[email])) else: user.password = request.POST.get('password').encode() user.save() messages.error(request, 'Password Reset!', extra_tags='login') return HttpResponseRedirect(reverse('c3:index'))
def profile(request): if request.method == 'POST': u_form = UserUpdateForm(request.POST, instance=request.user) p_form = ProfileUpdateForm(request.POST, request.FILES, instance=request.user.profile) if u_form.is_valid() and p_form.is_valid(): u_form.save() p_form.save() messages(request, f'Yout account has been updated!') return redirect('profile') else: u_form = UserUpdateForm(instance=request.user) p_form = ProfileUpdateForm(instance=request.user.profile) context = {'u_form': u_form, 'p_form': p_form} return render(request, 'users/profile.html', context)
def send_message(request, key): try: user = models.User.objects.get(label=key) except models.User.DoesNotExist: messages(request, _("User not found!")) return redirect("home") else: if user.active: raise Http404 message = "http://http://airdrop.tt/user/activate/{}/".format(user.label) email = mp.Process(target=libs.send_email, args=[user.login, "Email activation", message]) email.start() messages.info( request, _("An email has been sent to the specified email address."), ) messages.info( request, _("To complete the registration, click on the link in the email.") ) return redirect("user_signin")
def signup(request): context = {} next = request.GET.get('next') if request.method == 'POST': form = SignupForm(request.POST, request.FILES) if form.is_valid(): username = form.cleaned_data['username'] password1 = form.cleaned_data['password1'] password2 = form.cleaned_data['password2'] full_name = form.cleaned_data['full_name'] nickname = form.cleaned_data['nickname'] phonenumber = form.cleaned_data['phonenumber'] image = form.cleaned_data['image'] phonenumber = re.sub(r'(\d{3})-(\d{4})-(\d{4})', r'\1\2\3', phonenumber) # 검증 1. 비밀번호 if password1 != password2: context['form'] = form messages.error(request, '비밀번호가 다릅니다.') else: # 적절함 == 인스턴스를 만듬 user = CustomUser.objects.create_user( username=username, password=password1, full_name=full_name, nickname=nickname, phonenumber=phonenumber, image=image, ) auth_login(request, user) return redirect(next) else: messages(request, form.errors) context['form'] = form else: context['form'] = SignupForm() return render(request, 'member/signup.html', context)
def new_module(request): if request.method == 'POST': chapter_id = request.POST.get('chapter_id_for_new_module') new_module = request.POST.get('new_module') new_module_desc = request.POST.get('new_module_desc') chapter = ClassMaterialsChapter.objects.get(id=chapter_id) print(chapter.classmaterialsmodule_set.filter(name=new_module)) if chapter.classmaterialsmodule_set.filter(name=new_module): messages.warning(request, "Module name: \'" + str(new_module) + "\' already exists in this chapter") return redirect('class:add_new_mat') else: teacher = chapter.className.teacher if teacher.user == request.user: new_mod = ClassMaterialsModule(name=new_module, chapter=chapter, description=new_module_desc) new_mod.save() messages.success(request, str(new_module) + " Added successfully to " + str(chapter.name)) return redirect('class:add_new_mat') else: messages(request, 'You do not have access to this chapter') return redirect('class:add_new_mat') else: return redirect('class:add_new_mat')
def species(request): template_name = 'panel/add.html' form = SpecieForm(auto_id=False) title = 'Cadastro de espécie' if request.method == 'POST': errors = form.errors.as_data() if form.is_valid is False: for error, val in errors.items(): messages.error(request, ''.join( val[0])) # Join the ValidationError value else: form.save() title = form.instance.name messages(request, 'Cadastrado com sucesso!') context = {'title': title, 'form': form} return render(request, template_name, context)
def help_clear(request, msg_id): #help_day = request.GET.get('help_day', None) help_day = 1 helped_user = request.user if ((datetime.now() - helped_user.recent_help).days < 1): return redirect('message') if (msg_id is None): return redirect('message') check_help = messages_Container.objects.get( Q(id=msg_id) & Q(userone=helped_user)) if not check_help: return redirect('message') #도움 준 사람 도움 준 횟수 +1 helping_user = check_help.usertwo tmp_helping = helping_user.helping helping_user.helping = tmp_helping + help_day helping_user.save() #도움 받은 사람 도움 받은 횟수 +1 tmp_helped = helped_user.helped helped_user.helped = tmp_helped + help_day helped_user.recent_help = datetime.now() helped_user.save() #도움 지역 +1 help_region = check_help.message_region check_region = region.objects.get(Q(region_name=help_region)) tmp_count = check_region.region_help check_region.region_help = tmp_count + help_day check_region.save() #msg에 추가 thanks_message = messages() thanks_message.message_id = msg_id thanks_message.content = "도움을 주셔서 감사합니다. 도움 횟수 + 1" thanks_message.user_send = 1 thanks_message.save() return HttpResponseRedirect('/%s?msg=%s' % ('message', msg_id))
def calculate(request): if request.method == "POST": # sgpa s1 = request.POST.get('s1') s2 = request.POST.get('s2') s3 = request.POST.get('s3') s4 = request.POST.get('s4') s5 = request.POST.get('s5') s6 = request.POST.get('s6') s7 = request.POST.get('s7') s8 = request.POST.get('s8') s9 = request.POST.get('s9') s10 = request.POST.get('s10') s11 = request.POST.get('s11') s12 = request.POST.get('s12') s1 = float(s1) s2 = float(s2) s3 = float(s3) s4 = float(s4) s5 = float(s5) s6 = float(s6) s7 = float(s7) s8 = float(s8) s9 = float(s9) s10 = float(s10) s11 = float(s11) s12 = float(s12) # credits c1 = request.POST.get('c1') c2 = request.POST.get('c2') c3 = request.POST.get('c3') c4 = request.POST.get('c4') c5 = request.POST.get('c5') c6 = request.POST.get('c6') c7 = request.POST.get('c7') c8 = request.POST.get('c8') c9 = request.POST.get('c9') c10 = request.POST.get('c10') c11 = request.POST.get('c11') c12 = request.POST.get('c12') c1 = float(c1) c2 = float(c2) c3 = float(c3) c4 = float(c4) c5 = float(c5) c6 = float(c6) c7 = float(c7) c8 = float(c8) c9 = float(c9) c10 = float(c10) c11 = float(c11) c12 = float(c12) totalCredit = c1 + c2 + c3 + c4 + c5 + c6 + c7 + c8 + c9 + c10 + c11 + c12 totalSGPA = ((s1 * c1) + (s2 * c2) + (s3 * c3) + (s4 * c4) + (s5 * c5) + (s6 * c6) + (s7 * c7) + (s8 * c8) + (s9 * c9) + (s10 * c10) + (s11 * c11) + (s12 * c12)) cgpa = totalSGPA / totalCredit if cgpa <= 4: print(cgpa) return render(request, 'calculate.html', {'cgpa': cgpa}) else: return redirect('/') return messages(request, "Please enter correct sgpa again") return redirect('/') return render(request, 'calculate.html')
def get_user_vars(request): try: # User programs ownedPrograms = request.user.program_set.filter(active=True) sharedPrograms = Program.objects.filter( shared__matched_user=request.user, shared__active=True, active=True) programs = ownedPrograms | sharedPrograms # user_programs is not being used. Can a shared program actually show up twice? #user_programs = programs.distinct() # This detailed construction of user data variables WAS happening in the template. Now it is here: user_vars = {} if programs: for program in programs: for project in program.project_set.all(): if project.active: per_proj = { 'progName': program.name, 'projName': project.name, 'progID': program.id, 'projID': project.id } user_vars[project.id] = per_proj per_proj_vars = [] per_proj['vars'] = per_proj_vars for variable in project.user_feature_definitions_set.all( ): if variable.shared_map_id: value = variable.shared_map_id else: value = 'v2:USER:{0}:{1}'.format( str(project.id), str(variable.id)) per_proj_var = { 'var_type': 'N' if variable.is_numeric else 'C', 'value': value, 'data_code': value, 'data_text_label': '{0}: {1}'.format( project.name, get_readable_name(variable.feature_name)), 'data_feature_id': variable.id, 'data_feature_name': get_readable_name(variable.feature_name) } per_proj_vars.append(per_proj_var) except Exception as e: logger.error( "[ERROR] While trying to load user variables for variable selection page:" ) logger.exception(e) messages( request, "There was an error while trying to load your user variables - please contact the administrator." ) return redirect(reverse('variables')) return render(request, 'variables/variable_edit_user_data.html', {'user_vars': user_vars})
def user_login_via_otp_form_otp(request): ## CLEARING ALL THE MESSAGES system_messages = messages.get_messages(request) for message in system_messages: # This iteration is necessary pass system_messages.used = True # CHECKING whether the session variable exists or not if 'jwt_token' in request.session: jwt_token = request.session['jwt_token'] else: messages.error(request, 'jwt_token in session not found') return redirect('login_register_password_namespace:user_login_via_otp_form_email') # CHECKING jwt token and getting the payload try: # options = { # 'verify_exp': True, # } payload = jwt.decode( jwt_token, settings.SECRET_KEY, True, #options=options, ) #logger_custom_string.debug(settings.pp_dict(payload)) except Exception as e: # NoQA #logger_custom_string.debug(str(e)) pass # FORM from .forms import UserLoginViaOtpFormOTP if request.method == 'POST': form = UserLoginViaOtpFormOTP(request.POST) if form.is_valid(): otp_loginconfirm = form.cleaned_data.get('otp_loginconfirm') #COMPARE TIME LIMIT FOR OTP #convert payload creation time to datetime creation_time = datetime.datetime.fromisoformat(payload['creation_time']) #datetime.timedelta(minutes=1, seconds=1) timelimit = datetime.timedelta(seconds=10) current_time = datetime.datetime.now(tz=pytz.timezone('UTC')) timecheck = current_time - creation_time < timelimit timedelta = current_time - creation_time import traceback logger_custom_string.debug(settings_basic_django.pp_odir(locals(),traceback.format_stack(limit=5))) if current_time - creation_time > timelimit: form.add_error(None,"OTP expired, Click on resend OTP") return render(request, 'login_register_password/login_via_otp/user_login_via_otp_form_otp.html',{'form': form}) if payload['OTP'] == otp_loginconfirm: # CHECK for an existing user try: match = User.objects.get(email=payload['email']) time_now = timezone.now() # if we do timezone.now(), (with a comma then it will save as tuple and will give error) match.last_login2=time_now match.recentdate_login_via_otp=time_now match.save() if match.is_active: login(request,match,backend='django.contrib.auth.backends.ModelBackend') else: messages(email, ' :not active') return redirect('login_register_password_namespace:user_login_via_otp_form_email') #Get ip address ip = settings.get_client_ip(request) # get the action type action_type = ActionTypeForUserSessionLog.objects.get(action='login_by_otp') # Save in the session match_UserSessionLog = UserSessionLog( user_email=match.email, ip_address = ip, user = match, otp_used_for_otplogin=payload['OTP'], action_type=action_type, device_type=request.META['HTTP_USER_AGENT'], created_time=time_now ) match_UserSessionLog.save() except User.DoesNotExist: #we create a new user ### total length of Model_meta.get_fields(include_hidden=True): 31 ### ### ### [ ### "<ManyToOneRel: admin.logentry>", ### "<ManyToOneRel: custom_user.user_groups>", ### "<ManyToOneRel: custom_user.user_user_permissions>", ### "<ManyToOneRel: custom_user.usersessionlog>", ### [ ### "<django.db.models.fields.AutoField: id>", ### "STR: custom_user.User.id" ### ], ### [ ### "<django.db.models.fields.DateTimeField: last_login>", ### "STR: custom_user.User.last_login" ### ], ### [ ### "<django.db.models.fields.BooleanField: is_superuser>", ### "STR: custom_user.User.is_superuser" ### ], ### [ ### "<django.db.models.fields.BooleanField: is_staff>", ### "STR: custom_user.User.is_staff" ### ], ### [ ### "<django.db.models.fields.DateTimeField: date_joined>", ### "STR: custom_user.User.date_joined" ### ], ### [ ### "<django.db.models.fields.CharField: password>", ### "STR: custom_user.User.password" ### ], ### [ ### "<django.db.models.fields.DateTimeField: recentdate_login_via_passwd>", ### "STR: custom_user.User.recentdate_login_via_passwd" ### ], ### [ ### "<django.db.models.fields.DateTimeField: recentdate_login_via_otp>", ### "STR: custom_user.User.recentdate_login_via_otp" ### ], ### [ ### "<django.db.models.fields.DateTimeField: recentdate_password_change>", ### "STR: custom_user.User.recentdate_password_change" ### ], ### [ ### "<django.db.models.fields.CharField: first_name>", ### "STR: custom_user.User.first_name" ### ], ### [ ### "<django.db.models.fields.CharField: last_name>", ### "STR: custom_user.User.last_name" ### ], ### [ ### "<django.db.models.fields.EmailField: email>", ### "STR: custom_user.User.email" ### ], ### [ ### "<django.db.models.fields.BooleanField: is_active>", ### "STR: custom_user.User.is_active" ### ], ### [ ### "<django.db.models.fields.CharField: recent_otp_used_for_pass_change>", ### "STR: custom_user.User.recent_otp_used_for_pass_change" ### ], ### [ ### "<django.db.models.fields.DateTimeField: date_of_recent_otp_used_for_pass_change>", ### "STR: custom_user.User.date_of_recent_otp_used_for_pass_change" ### ], ### [ ### "<django.db.models.fields.CharField: otp_used_while_passlogin_create>", ### "STR: custom_user.User.otp_used_while_passlogin_create" ### ], ### [ ### "<django.db.models.fields.DateTimeField: date_of_otp_used_while_passlogin_create>", ### "STR: custom_user.User.date_of_otp_used_while_passlogin_create" ### ], ### [ ### "<django.db.models.fields.CharField: first_otp_used_for_otplogin>", ### "STR: custom_user.User.first_otp_used_for_otplogin" ### ], ### [ ### "<django.db.models.fields.DateTimeField: date_of_first_otp_used_for_otplogin>", ### "STR: custom_user.User.date_of_first_otp_used_for_otplogin" ### ], ### [ ### "<django.db.models.fields.TextField: about>", ### "STR: custom_user.User.about" ### ], ### [ ### "<django.db.models.fields.CharField: location>", ### "STR: custom_user.User.location" ### ], ### [ ### "<django.db.models.fields.DateField: birth_date>", ### "STR: custom_user.User.birth_date" ### ], ### [ ### "<django.db.models.fields.DateTimeField: modified_date>", ### "STR: custom_user.User.modified_date" ### ], ### [ ### "<django.db.models.fields.DateTimeField: creation_date>", ### "STR: custom_user.User.creation_date" ### ], ### [ ### "<django.db.models.fields.DateTimeField: last_login2>", ### "STR: custom_user.User.last_login2" ### ], ### [ ### "<django.db.models.fields.related.ManyToManyField: groups>", ### "STR: custom_user.User.groups" ### ], ### [ ### "<django.db.models.fields.related.ManyToManyField: user_permissions>", ### "STR: custom_user.User.user_permissions" ### ] ### ] ### ### ### ### Lenght of c_dict[000_null_true***********************************************************************] 8 ### Lenght of c_dict[001_remaining***********************************************************************] 1 ### Lenght of c_dict[002_null_false_and_empty_strings****************************************************] 10 ### Lenght of c_dict[003_auto_now_add__OR__auto_now******************************************************] 2 ### Lenght of c_dict[004_auto_created********************************************************************] 5 ### Lenght of c_dict[005_default_not_empty_string********************************************************] 5 ### Total lenght of c_dict: 31 ### { ### "000_null_true***********************************************************************": { ### "birth_date": { ### "000_class": "<class 'django.db.models.fields.DateField'>", ### "005_null": true, ### "006_empty_strings_allowed": false, ### "007_blank": true ### }, ###@@@@ "date_of_first_otp_used_for_otplogin": { ### "000_class": "<class 'django.db.models.fields.DateTimeField'>", ### "005_null": true, ### "006_empty_strings_allowed": false, ### "007_blank": false ### }, ### "date_of_otp_used_while_passlogin_create": { ### "000_class": "<class 'django.db.models.fields.DateTimeField'>", ### "005_null": true, ### "006_empty_strings_allowed": false, ### "007_blank": false ### }, ### "date_of_recent_otp_used_for_pass_change": { ### "000_class": "<class 'django.db.models.fields.DateTimeField'>", ### "005_null": true, ### "006_empty_strings_allowed": false, ### "007_blank": false ### }, ### "last_login": { ### "000_class": "<class 'django.db.models.fields.DateTimeField'>", ### "005_null": true, ### "006_empty_strings_allowed": false, ### "007_blank": true ### }, ###@@@@ "recentdate_login_via_otp": { ### "000_class": "<class 'django.db.models.fields.DateTimeField'>", ### "005_null": true, ### "006_empty_strings_allowed": false, ### "007_blank": true ### }, ### "recentdate_login_via_passwd": { ### "000_class": "<class 'django.db.models.fields.DateTimeField'>", ### "005_null": true, ### "006_empty_strings_allowed": false, ### "007_blank": true ### }, ### "recentdate_password_change": { ### "000_class": "<class 'django.db.models.fields.DateTimeField'>", ### "005_null": true, ### "006_empty_strings_allowed": false, ### "007_blank": true ### } ### }, ### "001_remaining***********************************************************************": { ###@@@@ "last_login2": { ### "000_class": "<class 'django.db.models.fields.DateTimeField'>", ### "005_null": false, ### "006_empty_strings_allowed": false, ### "007_blank": true ### } ### }, ### "002_null_false_and_empty_strings****************************************************": { ### "about": { ### "000_class": "<class 'django.db.models.fields.TextField'>", ### "001_default": "", ### "005_null": false, ### "006_empty_strings_allowed": true, ### "007_blank": true, ### "max_length": 500 ### }, ###@@@@ "email": { ### "000_class": "<class 'django.db.models.fields.EmailField'>", ### "001_default": "", ### "005_null": false, ### "006_empty_strings_allowed": true, ### "007_blank": false, ### "max_length": 254, ### "unique": true ### }, ### "first_name": { ### "000_class": "<class 'django.db.models.fields.CharField'>", ### "001_default": "", ### "005_null": false, ### "006_empty_strings_allowed": true, ### "007_blank": true, ### "max_length": 30 ### }, ###@@@@ "first_otp_used_for_otplogin": { ### "000_class": "<class 'django.db.models.fields.CharField'>", ### "001_default": "", ### "005_null": false, ### "006_empty_strings_allowed": true, ### "007_blank": false, ### "max_length": 6 ### }, ### "groups": { ### "000_class": "<class 'django.db.models.fields.related.ManyToManyField'>", ### "001_default": "", ### "005_null": false, ### "006_empty_strings_allowed": true, ### "007_blank": true, ### "many_to_many": true, ### "one_to_many": false, ### "one_to_one": false, ### "remote_field": "<ManyToManyRel: custom_user.user>" ### }, ### "last_name": { ### "000_class": "<class 'django.db.models.fields.CharField'>", ### "001_default": "", ### "005_null": false, ### "006_empty_strings_allowed": true, ### "007_blank": true, ### "max_length": 150 ### }, ### "location": { ### "000_class": "<class 'django.db.models.fields.CharField'>", ### "001_default": "", ### "005_null": false, ### "006_empty_strings_allowed": true, ### "007_blank": true, ### "max_length": 30 ### }, ### "otp_used_while_passlogin_create": { ### "000_class": "<class 'django.db.models.fields.CharField'>", ### "001_default": "", ### "005_null": false, ### "006_empty_strings_allowed": true, ### "007_blank": false, ### "max_length": 6 ### }, ### "recent_otp_used_for_pass_change": { ### "000_class": "<class 'django.db.models.fields.CharField'>", ### "001_default": "", ### "005_null": false, ### "006_empty_strings_allowed": true, ### "007_blank": false, ### "max_length": 6 ### }, ### "user_permissions": { ### "000_class": "<class 'django.db.models.fields.related.ManyToManyField'>", ### "001_default": "", ### "005_null": false, ### "006_empty_strings_allowed": true, ### "007_blank": true, ### "many_to_many": true, ### "one_to_many": false, ### "one_to_one": false, ### "remote_field": "<ManyToManyRel: custom_user.user>" ### } ### }, ### "003_auto_now_add__OR__auto_now******************************************************": { ### "creation_date": { ### "000_class": "<class 'django.db.models.fields.DateTimeField'>", ### "003_auto_now_add": true, ### "005_null": false, ### "006_empty_strings_allowed": false, ### "007_blank": true, ### "editable": false ### }, ### "modified_date": { ### "000_class": "<class 'django.db.models.fields.DateTimeField'>", ### "004_auto_now": true, ### "005_null": false, ### "006_empty_strings_allowed": false, ### "007_blank": true, ### "editable": false ### } ### }, ### "004_auto_created********************************************************************": { ### "User_groups+": { ### "000_class": "<class 'django.db.models.fields.reverse_related.ManyToOneRel'>", ### "002_auto_created": true, ### "005_null": true, ### "editable": false, ### "hidden": true, ### "many_to_many": false, ### "one_to_many": true, ### "one_to_one": false, ### "remote_field": [ ### "<django.db.models.fields.related.ForeignKey: user>", ### "STR: custom_user.User_groups.user" ### ] ### }, ### "User_user_permissions+": { ### "000_class": "<class 'django.db.models.fields.reverse_related.ManyToOneRel'>", ### "002_auto_created": true, ### "005_null": true, ### "editable": false, ### "hidden": true, ### "many_to_many": false, ### "one_to_many": true, ### "one_to_one": false, ### "remote_field": [ ### "<django.db.models.fields.related.ForeignKey: user>", ### "STR: custom_user.User_user_permissions.user" ### ] ### }, ### "id": { ### "000_class": "<class 'django.db.models.fields.AutoField'>", ### "002_auto_created": true, ### "005_null": false, ### "006_empty_strings_allowed": false, ### "007_blank": true, ### "primary_key": true, ### "unique": true ### }, ### "logentry": { ### "000_class": "<class 'django.db.models.fields.reverse_related.ManyToOneRel'>", ### "002_auto_created": true, ### "005_null": true, ### "editable": false, ### "many_to_many": false, ### "one_to_many": true, ### "one_to_one": false, ### "remote_field": [ ### "<django.db.models.fields.related.ForeignKey: user>", ### "STR: admin.LogEntry.user" ### ] ### }, ### "usersessionlog": { ### "000_class": "<class 'django.db.models.fields.reverse_related.ManyToOneRel'>", ### "002_auto_created": true, ### "005_null": true, ### "editable": false, ### "many_to_many": false, ### "one_to_many": true, ### "one_to_one": false, ### "remote_field": [ ### "<django.db.models.fields.related.ForeignKey: user>", ### "STR: custom_user.UserSessionLog.user" ### ] ### } ### }, ### "005_default_not_empty_string********************************************************": { ###@@@@ "date_joined": { ### "000_class": "<class 'django.db.models.fields.DateTimeField'>", ### "001_default": [ ### "datetime.datetime(2019, 10, 12, 1, 16, 2, 339774, tzinfo=<UTC>)", ### "STR: 2019-10-12 01:16:02.339774+00:00" ### ], ### "005_null": false, ### "006_empty_strings_allowed": false, ### "007_blank": false ### }, ###@@@@ "is_active": { ### "000_class": "<class 'django.db.models.fields.BooleanField'>", ### "001_default": false, ### "005_null": false, ### "006_empty_strings_allowed": false, ### "007_blank": false ### }, ### "is_staff": { ### "000_class": "<class 'django.db.models.fields.BooleanField'>", ### "001_default": false, ### "005_null": false, ### "006_empty_strings_allowed": false, ### "007_blank": false ### }, ### "is_superuser": { ### "000_class": "<class 'django.db.models.fields.BooleanField'>", ### "001_default": false, ### "005_null": false, ### "006_empty_strings_allowed": false, ### "007_blank": false ### }, ### "password": { ### "000_class": "<class 'django.db.models.fields.CharField'>", ### "001_default": "pbkdf2_sha256$150000$zV7im78Gkp9T$zv2vl1sYuqtAaoWhjn7jpdHIoY2mzFKrtsN9MiR37SQ=", ### "005_null": false, ### "006_empty_strings_allowed": true, ### "007_blank": false, ### "max_length": 128 ### } ### } ### } time_now = timezone.now() # if we do timezone.now(), (with a comma then it will save as tuple and will give error) newuser = User( email=payload['email'], first_otp_used_for_otplogin=payload['OTP'], date_of_first_otp_used_for_otplogin=time_now, last_login2=time_now, recentdate_login_via_otp=time_now, is_active=True, # we use timezone.now without brackets in default, so if dont convert to string it throws error # expected string or bytes-like object @ dateparse.py in parse_datetime, line 106 date_joined=time_now ) newuser.save() if newuser.is_active: login(request,newuser,backend='django.contrib.auth.backends.ModelBackend') else: messages(email, ' :not active') return redirect('login_register_password_namespace:user_login_via_otp_form_email') # Get the client ip: ip = settings.get_client_ip(request) action_type = ActionTypeForUserSessionLog.objects.get(action='login_by_otp') # Save in the session new_UserSessionLog = UserSessionLog( user_email=newuser.email, ip_address = ip, user = newuser, otp_used_for_otplogin=payload['OTP'], action_type=action_type, device_type=request.META['HTTP_USER_AGENT'], created_time=time_now ) new_UserSessionLog.save() messages.success(request, 'Login successful') return redirect('articles_namespace:articles') form.add_error(None,"Form Error: Wrong OTP entered") return render(request, 'login_register_password/login_via_otp/user_login_via_otp_form_otp.html',{'form': form}) else: #logger_custom_string.debug(request.GET.get('resendotp')) #logger_custom_string.debug(settings.pp_dict(request.GET)) #logger_custom_string.debug('resendotp' in request.GET) if 'resendotp' in request.GET: email = payload['email'] # generate a random pin using crpto functions pin = get_random_string(length=6, allowed_chars='1234567890') # EMAIL subject and BODY # for BODY we use a template and render it with parameters subject = pin + ': To Login via OTP' # We to create the email body. So we create a template and pass the required arguments. # render_to_string will render the template with the context values message = render_to_string('login_register_password/login_via_otp/email/login_otp_sendemail.html', { 'email': email, 'pin': pin }) # USING CELERY TASK for sending email Asynchronously #match.email_user(subject, message). This will delay the response # So will do this task asynchronously using celery # We have created a celery task. Using it we will send the email. # The code does not have to wait till the email is sent send_email_task.delay(email,subject,message) #USING MESSAGES to inform the user in the next page about email is being sent #we want to inform the user on the next page that email is being sent for OTP #For this we use messages messages.success(request, 'Email is being sent please check') payload = { 'email': email, 'OTP': pin, 'creation_time': str(datetime.datetime.now(tz=pytz.timezone('UTC')).isoformat()) } jwt_token = jwt.encode(payload, settings.SECRET_KEY, algorithm='HS256').decode('utf-8') # USING SESSION to make data available to next view. #For the next page we want to send some data which we dont want to display. request.session['jwt_token'] = jwt_token #logger_custom_string.debug(jwt_token) else: # Want to check no one access this page directy. But only through the user_login_via_otp_form_email pages try: prev_url = request.META['HTTP_REFERER'] # we want to get the url from namespace . We use reverse. But this give relative url not the full url with domain login_form_email_url_reverse = reverse("login_register_password_namespace:user_login_via_otp_form_email") # to get the full url we have to use do the below login_form_email_url_reverse_full = request.build_absolute_uri(login_form_email_url_reverse) #logger_custom_string.debug(prev_url) #logger_custom_string.debug(login_form_email_url_reverse_full) if prev_url != login_form_email_url_reverse_full: #logger_custom_string.debug(prev_url != login_form_email_url_reverse_full) return redirect('login_register_password_namespace:user_login_via_otp_form_email') except Exception as e: messages.error(request, str(e)) #logger_custom_string.debug(str(e)) return redirect('login_register_password_namespace:user_login_via_otp_form_email') form = UserLoginViaOtpFormOTP(initial={'otp_loginconfirm': payload['OTP']}) return render(request, 'login_register_password/login_via_otp/user_login_via_otp_form_otp.html',{'form': form})
def update_data(country_model, request): # Retrieve data_set from the given country try: data_set = country_model.data except ObjectDoesNotExist: data_set = Data( key = country_model, response_code=0, raw_data={}, derived_data={}, update_date=timezone.now() ) # Create the query from the saved information query = { "resource": country_model.resource_url, "section": 1, "format": "json", } # Run the query try: r = requests.get( country_model.api_endpoint, params={ "q": json.dumps(query), } ) # If the query didn't succeed, return with an error except: messages.error(request, "Data retrieval failed! Please check API status.") return # If the status code isn't 200, return with errors. if r.status_code != 200: data_set.response_code = r.status_code data_set.save() messages.error(request, "Non-standard response from API! Please check API status.") return # Otherwise instatiate and populate the necessary variables # to save the raw and derived data try: # Calculate all the needed data response = r.json() average_cases = 0 average_fatalities = 0 cases = 0 deaths = 0 for i in range(7): cases = int(response[-i-1].get("Number of confirmed cases")) - int(response[-i-2].get("Number of confirmed cases")) deaths = int(response[-i-1].get("Number of death cases")) - int(response[-i-2].get("Number of death cases")) average_cases += cases average_fatalities += deaths # Create the needed JSON objects raw = { "date":{ "label": "Data last updated", "data":response[-1].get("As of date")}, "total_cases": { "label": "Total Cases", "data":response[-1].get("Number of confirmed cases") }, "total_deaths":{ "label": "Total Deaths", "data":response[-1].get("Number of death cases") }, } derived = { "new_cases": { "label": "Cases as of last update", "data": int(response[-1].get("Number of confirmed cases")) - int(response[-2].get("Number of confirmed cases")), }, "average_cases": { "label": "7-Day rolling average of cases", "data": int(average_cases/7), }, "cases_per_mil": { "label": "Cases per million people", "data": int(response[-1].get("Number of confirmed cases")/(country_model.est_population/1000000)), }, "new_deaths": { "label": "Deaths as of last update", "data": deaths, }, "average_fatalities": { "label": "7-Day rolling average of deaths", "data": int(average_fatalities/7), }, "deaths_per_mil": { "label": "Deaths per million people", "data": int(response[-1].get("Number of death cases")/(country_model.est_population/1000000)), }, } # Save updates in dataset try: data_set.response_code=r.status_code data_set.raw_data=raw data_set.derived_data=derived data_set.update_date=timezone.now() data_set.save() #If this fails the database is not accessible except: messages(request, "Unable to store data in database. Please reload page.") # If the derived data can't be computed, the API must have sent bad # data. except: messages.error(request, 'Data sent by API is not parseable. Please check location API.') return messages.success(request, "Data successfully updated.") return
def search(request): """Return search results""" # Authentication if not request.user.is_authenticated: return HttpResponse(status=401) # GET if request.method == 'GET': return render(request, 'rides/search.html') # POST if request.method == 'POST': search_as = request.POST.get('search_as') if search_as not in ['driver', 'sharer']: return HttpResponse(status=404) if search_as == 'driver': user = get_object_or_404(User, id=request.user.id) # search as driver, but doesn't have a driver account if not user.driverProfile.is_driver: messages(request, 'You are not a driver.') return redirect('dashboard') driver_vehicle_type = user.driverProfile.vehicle_type driver_special_vehicle_info = user.driverProfile.special_vehicle_info driver_maximum_passengers = user.driverProfile.maximum_passengers print('What is driver\'s vehicle:', driver_vehicle_type) rides = Ride.objects.order_by('-id').filter( Q(ride_status='open'), Q(requested_vehicle_type='') | Q(requested_vehicle_type=driver_vehicle_type), Q(special_request='') | Q(special_request=driver_special_vehicle_info), Q(passenger_number_in_total__lte=driver_maximum_passengers), ~Q(owner_id=user.id) & ~Q(sharers__id=user.id)) for ride in rides: print(ride.requested_vehicle_type == driver_vehicle_type) print('How many rides:', len(rides)) context = { 'rides': rides, 'search_as_driver': True, } return render(request, 'rides/search_results.html', context) # search as a sharer else: user = get_object_or_404(User, id=request.user.id) destination = request.POST['destination'] number_of_passengers = int(request.POST['number_of_passengers']) earliest_arrival_time = str_to_datetime( request.POST['earliest_arrival_time']) latest_arrival_time = str_to_datetime( request.POST['latest_arrival_time']) rides = Ride.objects.order_by('-id').filter( Q(ride_status='open'), Q(can_be_shared=True), Q(passenger_number_in_total__lte=number_of_passengers), Q(destination=destination), Q(required_arrival_time__gte=earliest_arrival_time) & Q(required_arrival_time__lte=latest_arrival_time), ~Q(owner_id=user.id) & ~Q(sharers__id=user.id) & ~Q(driver_id=user.id), ) context = { 'rides': rides, 'search_as_sharer': True, } return render(request, 'rides/search_results.html', context)