示例#1
0
def add_slots(request):
    table = Table('slots')
    email = getEmail(request.session['session_key'])
    days = ['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun']

    if request.method == 'POST':
        st_time = request.POST['st_time']
        end_time = request.POST['end_time']
        fees = request.POST['fees']
        dow = []
        for d in days:
            string = 'weekday-' + d
            if string in request.POST.keys():
                dow.append(d)
        data = table.scan(FilterExpression={}).values()
        items = data['Items']
        l = len(str(email))
        num = 0
        for it in items:
            c = int(it['slot_id'][l:])
            if (c > num):
                num = c
        num += 1
        num = email + str(num)
        table.insertValues(values=[{
            'slot_id': num,
            'doc_id': email,
            'start_time': st_time,
            'end_time': end_time,
            'fees': fees,
            'days': dow
        }])
        print(table.scan(FilterExpression={'doc_id': email}).values())
    response = redirect('/appointments/doc_slots/')
    return response
示例#2
0
def initiate_payment(request):
    if request.method == "POST":
        amount = int(request.POST['amount'])
        user = request.user.username
        made_on = datetime.datetime.utcnow()
        order_id = made_on.strftime('PAY2ME%Y%m%d_%H%M%S')
        table = Table('transaction')
        table.insertValues(values=[{
            'order_id': order_id,
            'made_by' : user,
            'amount' : amount,
        }])
        # transaction = Transaction.objects.create(made_by=user, amount=amount)
        # transaction.save()
        merchant_key = settings.PAYTM_SECRET_KEY

        param_dict = (
            ('MID', settings.PAYTM_MERCHANT_ID),
            ('ORDER_ID', str(table.scan().values()['Items'][-1]['order_id'])),
            ('CUST_ID', str(table.scan().values()['Items'][-1]['made_by'])),
            ('TXN_AMOUNT', str(table.scan().values()['Items'][-1]['amount'])),
            ('CHANNEL_ID', settings.PAYTM_CHANNEL_ID),
            ('WEBSITE', settings.PAYTM_WEBSITE),
            # ('EMAIL', request.user.email),
            # ('MOBILE_N0', '9911223388'),
            ('INDUSTRY_TYPE_ID', settings.PAYTM_INDUSTRY_TYPE_ID),
            ('CALLBACK_URL', 'http://127.0.0.1:8000/payment/callback/'),
            # ('PAYMENT_MODE_ONLY', 'NO'),
        )
        param_dict = dict(param_dict)
        param_dict['CHECKSUMHASH'] = paytm.generate_checksum(param_dict, merchant_key)
        print(param_dict)
        return render(request, 'payments/redirect.html', {'param_dict': param_dict})

    return render(request, 'payments/pay.html')
示例#3
0
def med_list(request):
    if is_authenticated != 0:
        table = Table('med')
        res = table.scan(FilterExpression={}).values()
        if request.method == "GET":
            for i in res['Items']:
                i['_id'] = str(i['_id'])
            return Response(res)

        elif request.method == 'POST':
            med_data = request.data
            if med_data['method'] == 'get_medications':
                res = table.scan(FilterExpression={
                    'med_id': med_data['med_id']
                }).values()
                for i in res['Items']:
                    i['_id'] = str(i['_id'])
                return Response(res)
            elif med_data['method'] == 'add_medications':
                for id in res['Items']:
                    # print(id, type(id))
                    mid = id['med_id']
                mid = int(mid) + 1
                table.insertValues(values=[{
                    'med_id': str(mid),
                    'med': med_data['med']
                }])
                return HttpResponse("Added Medicines")
            elif med_data['method'] == 'delete_medcations':
                table.delete(FilterExpression={'med_id': med_data['med_id']})
                return HttpResponse("Deleted that slot id")
示例#4
0
def symp_list(request):
    if is_authenticated != 0:
        table = Table('symp')
        res = table.scan(FilterExpression={}).values()
        if request.method == "GET":
            for i in res['Items']:
                i['_id'] = str(i['_id'])
            return Response(res)

        elif request.method == 'POST':
            symp_data = request.data
            if symp_data['method'] == 'get_symptoms':
                res = table.scan(FilterExpression={
                    'symp_id': symp_data['symp_id']
                }).values()
                for i in res['Items']:
                    i['_id'] = str(i['_id'])
                return Response(res)
            elif symp_data['method'] == 'add_symptoms':
                for id in res['Items']:
                    # print(id, type(id))
                    sid = id['symp_id']
                sid = int(sid) + 1
                table.insertValues(values=[{
                    'symp_id': str(sid),
                    'symp': symp_data['symp']
                }])
                return HttpResponse("Added Symptoms")
            elif symp_data['method'] == 'delete_symptoms':
                table.delete(
                    FilterExpression={'symp_id': symp_data['symp_id']})
                return HttpResponse("Deleted that slot id")
示例#5
0
def confirm(request):
    if 'doc_id' in request.GET and 'date' in request.GET and 'slot_id' in request.GET:
        
        user_id = getEmail(request.session['session_key'])
        
        docTable = Table('doctor')
        result = docTable.scan(FilterExpression={'doc_id':request.GET['doc_id']}).values()['Items'][0]
        date  = request.GET['date']
        
        appointement_helper = Table('appointement_helper')
        
        result3 = appointement_helper.scan(FilterExpression={
            'doc_id':result['doc_id'],
            'date': request.GET['date'],
        }).values()['Items'][0]['avilableSlots']
        
        slot = []
        
        for res in result3:
            if res['slot_id'] == request.GET['slot_id']:
                result3.remove(res)
                slot = res
        
        appointement_helper.delete(FilterExpression={'doc_id':result['doc_id'],
            'date': request.GET['date'],})
        
        appointement_helper.insertValues(values=[{
                    'id':result['doc_id']+date,
                    'date':date,
                    'doc_id':result['doc_id'],
                    'avilableSlots':result3,
                }])
        
        appointementTable = Table('appointments')
        
        appointementTable.insertValues(values=[{
            'id':"u"+user_id+'d'+result['doc_id']+'on'+date+'slot'+slot['slot_id'],
            'user_id':user_id,
            'doctor':result,
            'slot': slot,
            'date':date,
        }])
        
        return render(request,'book_appointement/confirm.html',{'doc': result,'slot':slot,'date':date})
        
    else:
        return render(request,'global/400.html')
        
        
        
        
        
        
        
        
        
        
        
        
示例#6
0
def verifyotp(request):
    email = getEmail(request.session['session_key'])
    if request.method == "GET":
        table = Table('otp')
        response = table.scan(FilterExpression={'email': email}).values()

        if response['Count'] == 0:
            sendOtp(email, 1)

        else:
            for x in response['Items']:
                date_time = datetime.strptime(x['timestamp'], "%Y%m%d%H%M%S")
                is4verify = 1 if 'isRegister' in x else 0
                if datetime.now() > date_time + timedelta(minutes=15):
                    sendOtp(email, 1)
                    table.delete(FilterExpression={'otp': x['otp']})
                    break
                if is4verify == 0:
                    sendOtp(email, 1)
        return render(request, 'accounts/verification.html')

    if request.method == "POST":
        form = OTPVerificationForm(request.POST)
        if form.is_valid():
            generatedotp = form.cleaned_data['o1'] + form.cleaned_data[
                'o2'] + form.cleaned_data['o3'] + form.cleaned_data[
                    'o4'] + form.cleaned_data['o5'] + form.cleaned_data['o6']
            generatedotp = hashlib.sha256(
                (generatedotp + SECRET_KEY).encode()).hexdigest()
            table = Table('otp')
            response = table.scan(FilterExpression={
                'otp': generatedotp
            }).values()

            if response['Count'] == 1:
                if response['Items'][0]['otp'] == generatedotp:
                    table.delete(FilterExpression={
                        'otp': generatedotp,
                    })

                    table0 = Table('users')
                    print("has Updated")
                    table0.update(
                        FilterExpression={
                            'email': email,
                        },
                        UpdateExpression={
                            "isVerified": 1,
                        },
                    )
                    del request.session['session_key']
                    return HttpResponseRedirect('/accounts/login/')
                return render(request, 'accounts/verification.html',
                              {'err': 'OTP not match'})
            return HttpResponseRedirect('/accounts/login/')
示例#7
0
    def wrapper_function(*args, **kwargs):
        print(args)
        if 'session_key' in args[0].session:

            session_key = args[0].session['session_key']
            table = Table("SessionStore")
            response = table.scan(FilterExpression={
                'session_key': session_key,
            }, ).values()

            if response['Count'] == 0:
                print(session_key)
                return HttpResponseRedirect("/accounts/login/")

            isVerified = response['Items'][0]['isVerified']
            timestamp = response['Items'][0]['timestamp']
            email = response['Items'][0]['email']

            if (datetime.strptime(timestamp, "%Y%m%d%H%M%S") +
                    timedelta(days=7) < datetime.now()):
                table.delete(FilterExpression={
                    'session_key': args[0].session['session_key']
                })
                del args[0].session['session_key']
                return HttpResponseRedirect("/accounts/login/")

            if isVerified == 0:

                print("isVerfied")
                return function(*args, **kwargs)

        print("not Found")
        return HttpResponseRedirect("/accounts/login/")
示例#8
0
    def wrapper_function(*args, **kwargs):

        if 'session_key' in args[0].session:
            session_key = args[0].session['session_key']
            table = Table("SessionStore")
            response = table.scan(FilterExpression={
                'session_key': session_key,
            }, ).values()

            if response['Count'] == 0:
                return function(*args, **kwargs)

            isDoctor0 = response['Items'][0]['isDoctor']
            isVerified = response['Items'][0]['isVerified']
            timestamp = response['Items'][0]['timestamp']
            email = response['Items'][0]['email']

            if (isVerified == 0):
                return HttpResponseRedirect('/accounts/verifyotp/')

            if (datetime.strptime(timestamp, "%Y%m%d%H%M%S") +
                    timedelta(days=7) < datetime.now()):
                return function(*args, **kwargs)

            if (isDoctor0 == 0):
                return HttpResponse("<H1> Patient HomePage </H1>")
            return HttpResponse("<H1> Doctor HomePage </H1>")

        return function(*args, **kwargs)
示例#9
0
def Appointemets(request):
    uid=getEmail(request.session['session_key'])
    table = Table('appointments')
    appointments = table.scan(FilterExpression={'user_id':uid}).values()
    rdict={}
    if appointments['Count']!=0:
        rdict={'appointements':appointments['Items']}
    return render(request,'book_appointement/pat_Appointement.html',rdict)
示例#10
0
def getEmail(session_key):
    table = Table("SessionStore")
    response = table.scan(FilterExpression={
        'session_key': session_key,
    },
                          Projection=['email']).values()

    return response['Items'][0]['email']
示例#11
0
def dropdown_med(request):
    if request.method == "POST":
        send_list = []
        word = request.POST['word']
        table = Table('med')
        res = table.scan({})
        for dude in res.values()['Items']:
            if word in dude['med']:
                send_list.append(dude['med'])
        return render(None,'prescription/dropdown_med.html',{'items' : send_list})
示例#12
0
def dashboard(request):
    email = getEmail(request.session['session_key'])
    Date = str(date.today())
    today = Date[8:10] + Date[5:7] + Date[0:4]
    table = Table('appointments')
    result = table.scan(FilterExpression={
        'date': today,
        'doc_id': email
    }).values()
    return render(request, 'appointments/dashboard.html',
                  {'app': result['Items']})
示例#13
0
def appoint_list(request):
    if is_authenticated != 0:
        table = Table('appointments')
        res = table.scan(FilterExpression={}).values()
        if request.method == "GET":
            for i in res['Items']:
                i['_id'] = str(i['_id'])
            return Response(res)

        elif request.method == 'POST':
            appoint_data = request.data
            if appoint_data['method'] == 'get_appointments':
                res = table.scan(FilterExpression={
                    'doc_id': appoint_data['doc_id']
                }).values()
                for i in res['Items']:
                    i['_id'] = str(i['_id'])
                return Response(res)
            elif appoint_data['method'] == 'add_appointments':
                for id in res['Items']:
                    # print(id, type(id))
                    aid = id['app_id']
                aid = int(aid) + 1
                table.insertValues(
                    values=[{
                        'app_id': str(aid),
                        'doc_id': appoint_data['doc_id'],
                        'spec': appoint_data['spec'],
                        'pat_id': appoint_data['pat_id'],
                        'start_time': appoint_data['start_time'],
                        'end_time': appoint_data['end_time'],
                        'fees': appoint_data['fees'],
                        'date': appoint_data['date']
                    }])
                return HttpResponse("Added Appointments")
            elif appoint_data['method'] == 'delete_appointments':
                table.delete(
                    FilterExpression={'app_id': appoint_data['app_id']})
                return HttpResponse("Deleted that slot id")
示例#14
0
def getSpecialization(request):
    if 'spec' in request.GET:
        table = Table('Specilizations')
        spec0 = request.GET['spec']
        specs = table.scan().values()['Items']
        res = []
        for spec1 in specs:
            if spec0.lower() in spec1['spec'].lower():
                res.append(spec1['spec'], )
        return Response({
            "code": 0,
            "results": res,
        })
    return Response({"code": "404", "message": "invalid request"})
示例#15
0
def getCities(request):
    if 'city' in request.GET:
        table = Table('Cities')
        spec0 = request.GET['city']
        specs = table.scan().sort("city_id")['Items']
        res = []
        for spec1 in specs:
            if spec0.lower() in spec1['city'].lower():
                res.append({"city": spec1['city'], "state": spec1['state']})
        return Response({
            "code": 0,
            "results": res,
        })
    return Response({"code": "404", "message": "invalid request"})
示例#16
0
def check_avail(request):
    if request.method == "POST":
        table = Table('slots')
        city = request.POST['city_name']
        locality = request.POST['locality']
        spec = request.POST['spec']
        date = request.POST['date_app']
        info = table.scan(FilterExpression={'spec': spec}).sort("start_time")
        doc_info = info['Items']
        print(info)
        return render(request, "appointments/pat_book.html",
                      {'doc_info': doc_info})
    else:
        return render(request, "appointments/pat_slots.html")
示例#17
0
def pres_table_list(request):
    if is_authenticated != 0:
        table = Table('pres_table')
        res = table.scan(FilterExpression={}).values()
        if request.method == "GET":
            for i in res['Items']:
                i['_id'] = str(i['_id'])
            return Response(res)

        elif request.method == 'POST':
            pres_table_data = request.data
            if pres_table_data['method'] == 'get_prescriptions':
                res = table.scan(FilterExpression={
                    'app_id': pres_table_data['app_id']
                }).values()
                for i in res['Items']:
                    i['_id'] = str(i['_id'])
                return Response(res)
            elif pres_table_data['method'] == 'add_prescriptions':
                for id in res['Items']:
                    # print(id, type(id))
                    pid = id['app_id']
                pid = int(pid) + 1
                table.insertValues(
                    values=[{
                        'app_id': str(pid),
                        'doc_id': pres_table_data['doc_id'],
                        'pat_id': pres_table_data['pat_id'],
                        'symptoms': pres_table_data['symptoms'],
                        'notes': pres_table_data['notes'],
                        'tabs': pres_table_data['tabs']
                    }])
                return HttpResponse("Added prescription")
            elif pres_table_data['method'] == 'delete_prescriptions':
                table.delete(
                    FilterExpression={'app_id': pres_table_data['app_id']})
                return HttpResponse("Deleted that slot id")
示例#18
0
def doc_home(request):
    table = Table('slots')
    email = getEmail(request.session['session_key'])
    response = table.scan(FilterExpression={'doc_id': email}).values()
    items = response['Items']
    c = 1
    for item in items:
        item['num'] = c
        item['start_time'] = str(item['start_time'][0:2]) + ":" + str(
            item['start_time'][2:4])
        item['end_time'] = str(item['end_time'][0:2]) + ":" + str(
            item["end_time"][2:4])
        item['fees'] = str(item['fees'])
        c += 1
    return render(request, "appointments/doc_slots.html", {'items': items})
示例#19
0
def slots_Available(request):
    if 'doc_id' in request.GET and 'date' in request.GET:
        docTable = Table('doctor')
        result = docTable.scan(FilterExpression={'doc_id':request.GET['doc_id']}).values()['Items'][0]
        
        doc = {
                'doc_id':  result['doc_id'],
                'name': "Dr."+result['first_name']+" "+result['last_name'],
                'address': result['address']+","+result['city'],
                'spec': result['spec'],
                "slotAvailabe":slots_Available,
                'experience':'9+ year Experience',
                'rating':96,
                'fee':300,         
            }
        
        appointement_helper = Table('appointement_helper')
        
        result2 = appointement_helper.scan(FilterExpression={
            'doc_id':result['doc_id'],
            'date': request.GET['date'],
        }).values()['Items'][0]['avilableSlots']
        
        return render(request,'book_appointement/select_slot.html',{'slots':result2,'doc':doc,'date':request.GET['date'],})
示例#20
0
def forgot(request):
    if request.method == "GET":
        return render(request, 'accounts/forgot_password.html')
    if request.method == "POST":
        form = FindAccountForm(request.POST)
        if form.is_valid():
            user = form.cleaned_data['user']
            table = Table('users')
            if (isValidEmail(user)):
                response = table.scan(FilterExpression={
                    'email': user
                }).values()

                if response['Count'] == 1:
                    timestamp0 = datetime.now().strftime('%Y%m%d%H%M%S')
                    signature = hashlib.sha256(
                        (user + timestamp0 + SECRET_KEY).encode()).hexdigest()
                    table = Table('forgototpsignatures')
                    table.insertValues(values=[{
                        'signature': signature,
                    }])

                    tk = jwt.encode(
                        {
                            'email': user,
                            'timestamp': timestamp0,
                            'signature': signature
                        },
                        SECRET_KEY,
                        algorithm='HS256')
                    tk = tk.decode('utf8')
                    sendLink(user, tk)
                    return HttpResponse(
                        "We have sent link to your email check it")
                return render(request, 'accounts/forgot_password.html',
                              {'err': 'Account not found'})
            return render(request, 'accounts/forgot_password.html',
                          {'err': 'Invalid Email Address'})
        return render(request, 'accounts/forgot_password.html',
                      {'err': 'Something went wrong'})
示例#21
0
def login(request):
    if request.method == "GET":
        return render(request, 'accounts/login.html')
    if request.method == "POST":
        form = LoginForm(request.POST)
        if form.is_valid():
            user = form.cleaned_data['user']
            password = form.cleaned_data['password']
            table = Table('users')
            if (isValidEmail(user) and isvalidPassword(password)):
                password = hashlib.sha256((password + SECRET_KEY).encode())
                password = password.hexdigest()
                response = table.scan(FilterExpression={
                    'email': user
                }).values()

                if response['Count'] == 0:
                    return render(
                        request, 'accounts/login.html', {
                            "err":
                            "Invalid Email address/UserName or Password",
                            "user": user
                        })

                password0 = response['Items'][0]['password']
                if (password == password0):
                    table = Table('SessionStore')
                    tkey = response['Items'][0]['email'] + datetime.now(
                    ).strftime("%Y%m%d%H%M%S") + SECRET_KEY
                    tkey = str(hashlib.sha256(tkey.encode()).hexdigest())
                    table.insertValues(values=[{
                        "session_key":
                        tkey,
                        "email":
                        response['Items'][0]['email'],
                        "timestamp":
                        datetime.now().strftime("%Y%m%d%H%M%S"),
                        "isVerified":
                        response['Items'][0]['isVerified'],
                        "isDoctor":
                        1 if 'isDoctor' in response['Items'][0] else 0,
                    }])
                    request.session['session_key'] = tkey

                    if response['Items'][0]['isVerified'] == 0:
                        return HttpResponseRedirect('/accounts/verifyotp/')

                    if 'isDoctor' not in response['Items'][0]:
                        return HttpResponseRedirect('/accounts/pHome/')
                    return HttpResponse(
                        "<H1> Doctor HomePage </H1>"
                    )  #render(request,'appointments/dashboard')

                else:
                    return render(
                        request, 'accounts/login.html', {
                            "err":
                            "Invalid Email address/UserName or Password",
                            "userI": user
                        })
            else:

                return render(
                    request, 'accounts/login.html',
                    {"err": "Invalid Email address/UserName or Password"})

        return render(request, 'accounts/login.html')
示例#22
0
def SearchDoctor(request):
    
    if "spec" in request.GET and "city" in request.GET and 'date' in request.GET:
        specialization = request.GET['spec']
        city = request.GET['city']
        date0 = request.GET['date']
        
        date = datetime.strptime(date0, '%Y-%m-%d')
        
        table = Table('doctor')
        
        results = table.scan(FilterExpression={"spec":specialization,'city':city}).values()
        
        data=[]
        
        for result in results['Items']:
            weekdays = ['mon','tue','wed','thu','fri','sat','sun']
            slotTable = Table('slots')
            
            appointement_helper = Table('appointement_helper')
            slots_Available = 0
            result2 = appointement_helper.scan(FilterExpression={
                'doc_id':result['doc_id'],
                'date': date0,
            }).values()
            
            if result2['Count'] == 0:
                results0 = slotTable.scan(FilterExpression={
                    'doc_id': result['doc_id'],
                    }).values()
                scount = 0
                availableSlots=[]
                for day in results0['Items']:
                    print(weekdays[date.weekday()-1])
                    print(day)
                    if weekdays[date.weekday()] in day['days']:
                        availableSlots.append({
                            "slot_id": day['slot_id'],
                            "start_time":day['start_time'],
                            "end_time":day["end_time"],
                            "fee":day['fees']
                        })
                        scount+=1;
                slots_Available = scount
                
                appointement_helper.insertValues(values=[{
                    'id':result['doc_id']+date0,
                    'date':date0,
                    'doc_id':result['doc_id'],
                    'avilableSlots':availableSlots,
                }])
            else:
               slots_Available  = len(result2['Items'][0]['avilableSlots'])
               
               
                
                
            data.append({
                'doc_id':  result['doc_id'],
                'name': "Dr."+result['first_name']+" "+result['last_name'],
                'address': result['address']+","+result['city'],
                'spec': result['spec'],
                "slotAvailabe":slots_Available,
                'experience':'9+ year Experience',
                'rating':96,
                'fee':300,         
            })
            
        print(data)
               
        return render(request,'book_appointement/doctor_list.html',{'doctors':data,'date':date0})
    
    else:
        return render(request,'book_appointement/b_app_find.html')
示例#23
0
def appoint(request):
    table = Table('appointments')
    table2 = Table('slots')
    data = table.scan(FilterExpression={}).values()
    email = getEmail(request.session['session_key'])
    # print(data)
    # print(request.POST['slot_id'])
    # email = "*****@*****.**"
    if request.method == "POST":
        num = 0
        items = data['Items']
        for it in items:
            c = int(it['app_id'])
            if (c > num):
                num = c
        num += 1
        # print(num)
        d = table2.scan(FilterExpression={
            'slot_id': request.POST['slot_id']
        }).values()
        for it in d['Items']:
            print(it)
            doc_id = it['doc_id']
            spec = it['spec']
            start_time = it['start_time']
            end_time = it['end_time']
            fees = it['fees']
        d1 = table.scan(
            FilterExpression={
                'doc_id': doc_id,
                'spec': spec,
                'pat_id': email,
                'start_time': start_time,
                'end_time': end_time
            }).values()
        if d1['Count'] == 0:
            table.insertValues(values=[{
                'app_id': str(num),
                'doc_id': doc_id,
                'spec': spec,
                'pat_id': email,
                'start_time': start_time,
                'end_time': end_time,
                'fees': fees,
                'date': '30072020'
            }])
            # return render(request, "p/", {'app_id':str(num)})
            return HttpResponse("Appointment Added")
        else:
            for item in d1['Items']:
                sst = int(start_time)
                snt = int(end_time)
                ist = int(item['start_time'])
                iet = int(item['end_time'])
                if ist < sst < iet:
                    return HttpResponse(
                        "New appointment can't be created due to clashing of appointment times"
                    )
                elif ist < snt < iet:
                    return HttpResponse(
                        "New appointment can't be created due to clashing of appointment times"
                    )
                elif (sst == ist) & (snt == iet):
                    return HttpResponse(
                        "New appointment can't be created due to clashing of appointment times"
                    )
                else:
                    table.insertValues(values=[{
                        'app_id': str(num),
                        'doc_id': doc_id,
                        'spec': spec,
                        'pat_id': email,
                        'start_time': start_time,
                        'end_time': end_time,
                        'fees': fees,
                        'date': '30072020'
                    }])
                    return HttpResponse("Appointment Added")
示例#24
0
def changePassword(request):
    if request.method == "GET":
        if 'tk' in request.GET:
            tk = request.GET['tk']
            tk = tk.encode('utf-8')
            jdata = jwt.decode(tk, SECRET_KEY, algorithms=['HS256'])

            if 'timestamp' not in jdata or 'email' not in jdata or 'signature' not in jdata:
                return render(request, 'global/400.html')

            if datetime.strptime(
                    jdata['timestamp'],
                    "%Y%m%d%H%M%S") + timedelta(minutes=5) < datetime.now():
                return render(request, 'global/400.html')

            email = jdata['email']
            timestamp0 = jdata['timestamp']
            signature = jdata['signature']
            genSignature = hashlib.sha256(
                (email + timestamp0 + SECRET_KEY).encode()).hexdigest()
            if signature != genSignature:
                return render(request, 'global/400.html')
            table = Table('forgototpsignatures')
            resp = table.scan(FilterExpression={
                'signature': signature
            }).values()

            if resp['Count'] != 1:
                return render(request, 'global/400.html')
            return render(request, 'accounts/change_password.html',
                          {'tk': tk.decode('utf-8')})
        return render(request, 'global/400.html')

    if request.method == "POST":
        form = ChangePasswordForm(request.POST)
        err = ""
        if form.is_valid():
            tk = form.cleaned_data['tk']
            paswd = form.cleaned_data['new_paswd']
            cpaswd = form.cleaned_data['cnfrm_paswd']
            if isvalidPassword(paswd) == False or isvalidPassword(
                    cpaswd) == False:
                err += "password should contain one Capital letter on small letter and one Number"
            if cpaswd != paswd:
                err += "password not matched"

            if err == "":
                tk = tk.encode('utf-8')
                jdata = jwt.decode(tk, SECRET_KEY, algorithms=['HS256'])

                if 'timestamp' not in jdata or 'email' not in jdata or 'signature' not in jdata:
                    return render(request, 'global/400.html')

                if datetime.strptime(jdata['timestamp'], "%Y%m%d%H%M%S"
                                     ) + timedelta(minutes=5) < datetime.now():
                    return render(request, 'global/400.html')

                email = jdata['email']
                timestamp0 = jdata['timestamp']
                signature = jdata['signature']
                genSignature = hashlib.sha256(
                    (email + timestamp0 + SECRET_KEY).encode()).hexdigest()
                if signature != genSignature:
                    return render(request, 'global/400.html')
                table = Table('forgototpsignatures')
                resp = table.scan(FilterExpression={
                    'signature': signature
                }).values()
                if resp['Count'] != 1:
                    return render(request, 'global/400.html')
                table.delete(FilterExpression={'signature': signature})
                hasedpassword = hashlib.sha256(
                    (paswd + SECRET_KEY).encode()).hexdigest()
                table = Table('users')
                table.update(
                    FilterExpression={'email': email},
                    UpdateExpression={'password': hasedpassword},
                )
                return HttpResponse("Password Changed Successfully")
            return render(request, 'accounts/change_password.html', {
                'err': err,
                'tk': tk
            })
        return render(request, 'accounts/change_password.html', {'err': err})
示例#25
0
def getTokenPair(request):
    print(request.POST)
    if 'user' in request.POST and 'password' in request.POST:
        user = request.POST['user']
        password = request.POST['password']
        table = Table("users")
        if (isValidEmail(user) and isvalidPassword(password)):
            password = hashlib.sha256((password + SECRET_KEY).encode())
            password = password.hexdigest()
            response = table.scan(FilterExpression={'email': user}).values()
            if response['Count'] == 0:
                return Response({
                    "code":
                    "1",
                    "message":
                    "Incorrect Username/email address or password"
                })

            password0 = response['Items'][0]['password']
            if (password == password0):
                if response['Items'][0]['isVerified'] == 0:
                    return Response({
                        "code":
                        "2",
                        "message":
                        "please verify your email id first",
                    })
                isDoctor = 1 if 'isDoctor' in response['Items'][0] else 0
                if isDoctor == 0:
                    primary_token = jwt.encode(
                        {
                            "email":
                            user,
                            "timestamp":
                            (datetime.now() +
                             timedelta(minutes=15)).strftime("%Y%m%d%H%M%S"),
                        },
                        SECRET_KEY2,
                        algorithm="HS256")
                    refresh_token = jwt.encode(
                        {
                            "email":
                            user,
                            "timestamp":
                            (datetime.now() +
                             timedelta(days=7)).strftime("%Y%m%d%H%M%S"),
                        },
                        SECRET_KEY,
                        algorithm="HS256")

                    return Response({
                        "code": "0",
                        "refresh_token": refresh_token,
                        "primary_token": primary_token,
                    })

        elif (isvalidUserName(user) and isvalidPassword(password)):
            password = hashlib.sha256((password + SECRET_KEY).encode())
            password = password.hexdigest()
            response = table.scan(FilterExpression={'username': user}).values()
            if response['Count'] == 0:
                return Response({
                    "code":
                    "1",
                    "message":
                    "Incorrect Username/email address or password"
                })
            user = response['Items'][0]['email']
            password0 = response['Items'][0]['password']
            if (password == password0):
                if response['Items'][0]['isVerified'] == 0:
                    return Response({
                        "code":
                        "2",
                        "message":
                        "please verify your email id first",
                    })
                isDoctor = 1 if 'isDoctor' in response['Items'][0] else 0
                if isDoctor == 0:
                    primary_token = jwt.encode(
                        {
                            "email":
                            user,
                            "timestamp":
                            (datetime.now() +
                             timedelta(minutes=15)).strftime("%Y%m%d%H%M%S"),
                        },
                        SECRET_KEY2,
                        algorithm="HS256")
                    refresh_token = jwt.encode(
                        {
                            "email":
                            user,
                            "timestamp":
                            (datetime.now() +
                             timedelta(days=7)).strftime("%Y%m%d%H%M%S"),
                        },
                        SECRET_KEY,
                        algorithm="HS256")

                    return Response({
                        "code": "0",
                        "refresh_token": refresh_token,
                        "primary_token": primary_token,
                    })

    return Response({
        "code": "1",
        "message": "Incorrect Username/email address or password"
    })
示例#26
0
def slots_list(request):
    if is_authenticated != 0:
        table = Table('slots')
        res = table.scan(FilterExpression={}).values()
        if request.method == "GET":
            for i in res['Items']:
                i['_id'] = str(i['_id'])
            return Response(res)

        elif request.method == 'POST':
            slots_data = request.data
            # print(slots_data)
            if slots_data['method'] == "get_slots":
                res = table.scan(FilterExpression={
                    'spec': slots_data['spec']
                }).values()
                for i in res['Items']:
                    i['_id'] = str(i['_id'])
                return Response(res)

            elif slots_data['method'] == "add_slots":
                d1 = table.scan(
                    FilterExpression={
                        'doc_id': slots_data['doc_id'],
                        'spec': slots_data['spec'],
                        'lon': slots_data['lon'],
                        'lat': slots_data['lat']
                    }).values()
                if d1['Count'] == 0:
                    l = slots_data['doc_id']
                    sid = 0
                    for i in res['Items']:
                        if int(i['slot_id'][l:]) > sid:
                            sid = i['slot_id'][l:]
                    sid = int(sid) + 1
                    table.insertValues(
                        values=[{
                            'slot_id': slots_data['doc_id'] + str(sid),
                            'doc_id': slots_data['doc_id'],
                            'spec': slots_data['spec'],
                            'start_time': slots_data['start_time'],
                            'end_time': slots_data['end_time'],
                            'fees': slots_data['fees'],
                            'days': slots_data['days'],
                            'lon': slots_data['lon'],
                            'lat': slots_data['lat']
                        }])
                    return HttpResponse("Added new value")
                else:
                    for item in d1['Items']:
                        sst = int(slots_data['start_time'])
                        snt = int(slots_data['end_time'])
                        ist = int(item['start_time'])
                        iet = int(item['end_time'])
                        if ist < sst < iet:
                            return HttpResponse(
                                "New slot can't be created due to clashing of slot times"
                            )
                        elif ist < snt < iet:
                            return HttpResponse(
                                "New slot can't be created due to clashing of slot times"
                            )
                        elif (sst == ist) & (snt == iet):
                            return HttpResponse(
                                "New slot can't be created due to clashing of slot times"
                            )
                        else:
                            l = slots_data['doc_id']
                            sid = 0
                            for i in res['Items']:
                                if int(i['slot_id'][l:]) > sid:
                                    sid = i['slot_id'][l:]
                            sid = int(sid) + 1
                            table.insertValues(values=[
                                {
                                    'slot_id': slots_data['doc_id'] + str(sid),
                                    'doc_id': slots_data['doc_id'],
                                    'spec': slots_data['spec'],
                                    'start_time': slots_data['start_time'],
                                    'end_time': slots_data['end_time'],
                                    'fees': slots_data['fees'],
                                    'days': slots_data['days'],
                                    'lon': slots_data['lon'],
                                    'lat': slots_data['lat']
                                }
                            ])
                            return HttpResponse("Added new value")

            elif slots_data['method'] == "delete_slots":
                table.delete(
                    FilterExpression={'slot_id': slots_data['slot_id']})
                return HttpResponse("Deleted that slot id")