Example #1
0
def test_bases():
    b36 = base36()
    b52 = base52()
    b56 = base56()
    b58 = base58()
    b62 = base62()
    b94 = base94()
Example #2
0
 def make_hash(cls, object_pk, klass):
     base36 = basehash.base36()
     content_type = ContentType.objects.get_for_model(klass, for_concrete_model=False)
     return base36.hash('%(contenttype_pk)03d%(object_pk)06d' % {
         'contenttype_pk': content_type.pk,
         'object_pk': object_pk
     })
Example #3
0
def user_application(request):
    # getting form
    form_id = basehash.base36().unhash(request.GET['application'])
    form_fields = FormFields.objects.filter(form_id=form_id)
    if request.method == 'POST':
        data = request.POST
        # list of all form tegs
        tegs = []
        for field in form_fields:
            # all fields for tegs to be fill
            if field.field_title not in data or len(data[field.field_title]) < 0:
                return render(request, 'form/user_application.html', {"form_fields": form_fields,
                                                                      "error": "заполните все поля"})
            else:
                # object for each teg for processing application and creating user application text
                tag = {
                    "key": field.teg,
                    "value": data[field.field_title]
                }
                tegs.append(tag)
        # getting form text
        form = Form.objects.get(id=form_id)
        text = form.text
        title = form.title
        # processing form text, replacing all tegs with user data
        for teg in tegs:
            text = text.replace('#{}'.format(teg['key']), '{}'.format(teg['value']))
            title = title.replace('#{}'.format(teg['key']), '{}'.format(teg['value']))
        # generating user unique key for signature, checking it to be unique
        number = random.randint(1000, 9999)
        key_exist = Application.objects.filter(key=number)
        if key_exist:
            while key_exist:
                number = random.randint(1000, 9999)
                key_exist = Application.objects.get(key=number)
        else:
            # if key unique registering user application
            key = str(number)
            date = datetime.datetime.now()
            new_application = Application(form_id=form_id, title=title, user_id=request.user.id, text=text, key=key,
                                          date=date)
            new_application.save()
            application = Application.objects.get(key=key)
            # creating and sending email with msg for user (now in terminal)
            message = render_to_string('form/signature_confirmation_email.html', {
                "key": application.key,
                'domain': 'stormy-mountain-84583.herokuapp.com/',
                'aid': urlsafe_base64_encode(force_bytes(application.pk))
            })
            mail_subject = form.email_subject
            to_email = request.user.email
            email = EmailMessage(mail_subject, message, to=[(to_email)])
            email.send()
            return redirect('sign_confirmation', aid=urlsafe_base64_encode(force_bytes(application.pk)))
    return render(request, 'form/user_application.html', {"form_fields": form_fields})
Example #4
0
 def parse_hash(cls, obj_hash):
     try:
         base36 = basehash.base36(length=len(obj_hash))
         unhashed = '%09d' % base36.unhash(obj_hash)
         contenttype_pk = int(unhashed[:-6])
         object_pk = int(unhashed[-6:])
     except Exception as e:
         print e.message
         raise e
     else:
         return contenttype_pk, object_pk
Example #5
0
def create_form(request):
    if request.user.is_staff:
        if request.method == 'POST':
            data = request.POST
            # checking do admin feel all data needed to create form
            if 'name' and "form_text" and 'add_number' and "email_subject" in data and len(data['name']) > 0 and \
                    len(data['form_text']) > 0 and int(data['add_number']) > 0 and len(data['email_subject']) > 0:
                name = data['name']
                form_text = data['form_text']
                fields_number = int(data['add_number'])
                email_subject = data['email_subject']
                # list to get all tegs what was created
                fields = []
                # for each created teg in form
                for i in range(fields_number):
                    # checking is each teg created properly
                    if len(data['name{}'.format(i)]) <=0 or len(data['type{}'.format(i)]) <=0 or len(data['tag{}'.format(i)]) <=0:
                        return render(request, 'form/create_form.html', {'error': "Заполните все поля"})
                    else:
                        # details for each teg
                        field = {
                            "name": data['name{}'.format(i)],
                            'type': data['type{}'.format(i)],
                            "tag": data['tag{}'.format(i)]
                        }
                        fields.append(field)
                # getting date
                date = datetime.datetime.now()
                # creating new form
                new_form = Form(user_create_id=request.user.id, title=name, text=form_text, email_subject=email_subject,
                                date_created=date)
                new_form.save()
                form = Form.objects.get(user_create_id=request.user.id, date_created=date)
                # hashing url
                hash_fn = basehash.base36()
                hash_value = hash_fn.hash(form.id)
                link = "https://stormy-mountain-84583.herokuapp.com/application/?application={}".format(hash_value)
                # creating tegs for form
                for field in fields:
                    new_field = FormFields(form_id=form.id, field_title=field['name'], teg=field['tag'],
                                           type=field['type'])
                    new_field.save()
                # updating link for form application
                link = Form.objects.filter(id=form.id).update(link=link)
                return redirect('admin_index')
            else:
                return render(request, 'form/create_form.html', {'error': "Заполните все поля"})
        else:
            return render(request, 'form/create_form.html')
    else:
        return HttpResponse('Not allowed')
Example #6
0
from nose.tools import raises

from basehash import base36

base36 = base36()


def test_base36_encode_with_1234567890_KF12OI():
    assert base36.encode(1234567890) == 'KF12OI'


def test_base36_decode_with_KF12OI_1234567890():
    assert base36.decode('KF12OI') == 1234567890


def test_base36_hash_with_1234567890_10_FT9Q9O71KI():
    assert base36.hash(1234567890, 10) == 'FT9Q9O71KI'


def test_base36_unhash_with_FT9Q9O71KI_1234567890():
    assert base36.unhash('FT9Q9O71KI') == 1234567890


def test_base36_maximum_value_with_6_2176782335():
    assert base36.maximum_value(6) == 2176782335


@raises(ValueError)
def test_base36_hash_fail_with_2176782336_6():
    assert base36.hash(2176782336, 6)
Example #7
0
import csv
import basehash
import pandas as pd
from pathlib import Path
import json
import event
import log
from colorama import Fore
hash_pas = basehash.base36()


class User:
    def __init__(self, user_name, password):
        self.user_name = user_name
        self.password = password
        self.money = 0

    def buy(self, id, num, code):
        """
        this function is for buying tickets of the event.
        :param id: id of event that want to buy.
        :param num: number of ticket that want to buy.
        :param code: code if discount.
        """
        with open('Event.csv', 'r') as events:
            events_read = csv.DictReader(events)
            for row in events_read:
                if row['id'] == id:
                    id_error = 1
                    if int(row['Remaining Capacity']) >= int(num):
                        if code != 'N':
Example #8
0
def GroupCall(request, groupid):
    """ render group call page """

    ip = '10.101.248.46'  #static ip to run this call
    group = models.Group.objects.filter(
        pk=groupid).first()  # get group from given id
    user = get_user(request)  # get user from session
    group_member = models.group_members.objects.filter(
        user=user,
        group=group).first()  #get the relation between user and group

    if not request.POST:

        # Join call request
        if group_member.in_call == 0 and group.call_state != 0:
            group_member.in_call = 1  # change call state for user
            group_member.save()
            # create client for request join
            Client.Client(ip, group.call_state, group_member)

        # start call request
        elif group.call_state == 0:
            server = Server.Server(ip, group)  # establish call server
            ''' generate unique invite code include ip and group id
                (user would use it in desktop app to join call) '''
            hash_fn = basehash.base36()  #use base hash to encrypt id & ip
            sp = ip.split('.')  #remove dots in ip
            invite_code = hash_fn.hash(sp[0]) + 'z' + hash_fn.hash(
                sp[1]) + 'z' + hash_fn.hash(sp[2]) + 'z' + hash_fn.hash(
                    sp[3]) + 'z' + hash_fn.hash(groupid)  #final code

            #update group object
            group.call_state = server.port  # change call state for group
            group.invite_code = invite_code
            group.call_start_at = timezone.now()
            group.save()

            # change call state for host user
            group_member.in_call = 1
            group_member.save()
            Client.Client(ip, server.port,
                          group_member)  # create client for host

    if request.POST:
        ''' end group call request '''
        if request.POST.get("end_call") == 'true':
            group.call_state = 0  # change group call state
            group.invite_code = 0
            group.save()
            # change all group members in call state to zero
            for member in group.members.filter():
                group_member = models.group_members.objects.filter(
                    user=member, group=group).first()
                group_member.in_call = 0
                group_member.save()
            return redirect('viewGroup',
                            groupid=group.id)  #redirect to group page
        ''' leave group call request '''
        if request.POST.get("leave_call") == 'true':
            # change member in call state to zero
            group_member = models.group_members.objects.filter(
                user=user, group=group).first()
            group_member.in_call = 0
            group_member.save()
            return redirect('viewGroup',
                            groupid=group.id)  #redirect to group page

    #send user to call page, send required contexts to this page
    return render(
        request, 'app/group/group_call.html', {
            'group': group,
            'group_member': group_member,
            'ip': ip,
            'title': 'create call',
            'year': datetime.now().year
        })
 def parse_hash(cls, obj_hash):
     base36 = basehash.base36()
     unhashed = '%09d' % base36.unhash(obj_hash)
     contenttype_pk = int(unhashed[:-6])
     object_pk = int(unhashed[-6:])
     return contenttype_pk, object_pk
Example #10
0
from nose.tools import raises

from basehash import base36


bh36 = base36()
bh6 = base36(6)
bh10 = base36(10)


def test_base36_encode_with_1234567890_KF12OI():
    assert bh36.encode(1234567890) == 'KF12OI'


def test_base36_decode_with_KF12OI_1234567890():
    assert bh36.decode('KF12OI') == 1234567890


def test_base36_hash_with_1234567890_10_FT9Q9O71KI():
    assert bh10.hash(1234567890) == 'FT9Q9O71KI'


def test_base36_unhash_with_FT9Q9O71KI_1234567890():
    assert bh10.unhash('FT9Q9O71KI') == 1234567890


def test_base36_maximum_value_with_6_2176782335():
    assert bh6.maximum == 2176782335


@raises(ValueError)
Example #11
0
from nose.tools import raises

from basehash import base36


base36 = base36()


def test_base36_encode_with_1234567890_KF12OI():
    assert base36.encode(1234567890) == 'KF12OI'


def test_base36_decode_with_KF12OI_1234567890():
    assert base36.decode('KF12OI') == 1234567890


def test_base36_hash_with_1234567890_10_FT9Q9O71KI():
    assert base36.hash(1234567890, 10) == 'FT9Q9O71KI'


def test_base36_unhash_with_FT9Q9O71KI_1234567890():
    assert base36.unhash('FT9Q9O71KI') == 1234567890


def test_base36_maximum_value_with_6_2176782335():
    assert base36.maximum_value(6) == 2176782335


@raises(ValueError)
def test_base36_hash_fail_with_2176782336_6():
    assert base36.hash(2176782336, 6)
Example #12
0
from pymongo import MongoClient
import pprint
import flask
from flask import request
from flask import Flask
from flask_cors import CORS
import json
import datetime
import random
import basehash

app = Flask(__name__)
CORS(app)

TOKEN = 55555
hash_fn = basehash.base36()
client = MongoClient(
    "mongodb+srv://dbUser:[email protected]/test?retryWrites=true&w=majority"
)
db = client['stores']
accounts = db['accounts']

# pprint.pprint(db.collection_names())

# collection = db['storeOne']
# pprint.pprint(collection.distinct("_id"))
# collection.insert_one({"x":1})
# collection.update_one({"x": 1},{"$inc":{"x":3}})

# doc = collection.find_one({"Name" : "FirstDummy"})
# pprint.pprint(doc)
Example #13
0
from nose.tools import raises

from basehash import base36

bh36 = base36()
bh6 = base36(6)
bh10 = base36(10)


def test_base36_encode_with_1234567890_KF12OI():
    assert bh36.encode(1234567890) == 'KF12OI'


def test_base36_decode_with_KF12OI_1234567890():
    assert bh36.decode('KF12OI') == 1234567890


def test_base36_hash_with_1234567890_10_FT9Q9O71KI():
    assert bh10.hash(1234567890) == 'FT9Q9O71KI'


def test_base36_unhash_with_FT9Q9O71KI_1234567890():
    assert bh10.unhash('FT9Q9O71KI') == 1234567890


def test_base36_maximum_value_with_6_2176782335():
    assert bh6.maximum == 2176782335


@raises(ValueError)
def test_base36_hash_fail_with_2176782336_6():
    def connect(self, code):
        app = App.get_running_app()
        app.code = code
        try:
            # unhashing the invite code
            hash_fn = basehash.base36()
            sp = code.split('z')
            ip = str(hash_fn.unhash(sp[0])) + '.' + str(hash_fn.unhash(sp[1]))+ '.' +\
                     str(hash_fn.unhash(sp[2])) + '.' + str(hash_fn.unhash(sp[3]))
            global gid
            gid = int(hash_fn.unhash(sp[4]))
            uid = login.uid

            #add screen incall here (not in main) as it uses gid and uid
            self.manager.add_widget(incall(name='incall'))

            #connect to database to check for the inv. code
            con = cx_Oracle.connect('meetapp/meetapp@localhost')
            cursor = con.cursor()
            cursor.execute(
                "select ID from APP_GROUP where INVITE_CODE=:inv_code",
                inv_code=code)
            row = cursor.fetchone()

            if row != None:

                # Check if the user in this group
                cursor.execute(
                    "select USER_ID from APP_GROUP_MEMBERS where GROUP_ID=:groupid and USER_ID=:userid",
                    groupid=gid,
                    userid=uid)
                row = cursor.fetchone()

                if row != None:
                    cursor.execute(
                        "select call_state from app_group where id=:groupid",
                        groupid=gid)
                    row = cursor.fetchone()

                    if row != None:
                        port = row[0]
                        # update call state
                        cursor.execute(
                            "update app_group_members set in_call=:incall where group_id=:groupid and user_id=:userid",
                            incall=1,
                            groupid=gid,
                            userid=uid)
                        con.commit()

                        cursor.execute(
                            "select id from APP_GROUP_MEMBERS where group_id=:groupid and user_id=:userid",
                            groupid=gid,
                            userid=uid)
                        print(uid)
                        row = cursor.fetchone()
                        print(row[0])
                        group_member_id = row[0]

                        global client
                        client = Client.Client(ip, port, group_member_id)

                        self.manager.transition = SlideTransition(
                            direction="right")
                        self.manager.current = 'incall'
                    else:
                        Alert('Error', 'Please try again')
                        self.manager.get_screen('connected').resetForm()
                # if not group member
                else:
                    Alert(
                        'Error',
                        'You are not in this group.\nAsk the group admin to enter you.'
                    )
                    self.manager.get_screen('connected').resetForm()
                #cursor.close()
            else:
                Alert('Error', 'No available call for this group')
                self.manager.get_screen('connected').resetForm()
        # if code is invalid
        except:
            Alert('Error', 'Please enter valid code')
            self.manager.get_screen('connected').resetForm()