def loaded_db(db, user_details, unconfirmed_user): """An active database instance with two users -- one admin, one contrib""" encrypted_user_details = { **user_details, "password": encrypt(user_details["password"]), } with Session(db._engine, future=True) as session: session.add(User(**encrypted_user_details)) session.add(User(**unconfirmed_user)) session.commit() return db
async def get_users_for_client(self, client_token): while self._sultan: await asyncio.sleep(1) self._sultan = True data = [] clients_users = await self.users_database.count_documents( {'client': client_token}) if clients_users > 0: await self.take_away_all_users_from_client(client_token) needed_users = MAX_USERS_PER_CLIENT free_users = self.users_database.find({ 'client': None }).limit(needed_users) async for i in free_users: await self.users_database.update_one( filter={'_id': i['_id']}, update={"$set": { 'client': client_token }}) data.append(User(**i).dict()) print(f'Sending {len(data)} users to {client_token}') self._sultan = False return data
def _ensure_admin(self): """ For development use only. Creates a default admin user if one does not yet exist. """ with Session(self._engine, future=True) as session: accounts = session.query(User).all() if len(accounts): log.info("Found an existing account.") return log.info("Creating a default admin account.") # cur_user = session.query(User).filter(User.username == 'admin').one() # session.delete(cur_user) # session.commit() user = User( id=str(uuid4()), username="******", password=encrypt("admin"), f_name="tha", l_name="admin", email="*****@*****.**", type="admin", confirmed=True, deactivated=False, ) session.add(user) session.commit()
def db(bare_db, admin_user_details): """An active database instance with one admin user""" # must start with an admin user encrypted_admin_details = { **admin_user_details, "password": encrypt(admin_user_details["password"]), } with Session(bare_db._engine, future=True) as session: session.add(User(**encrypted_admin_details)) session.commit() return bare_db
def add_user(self, token: Token, user_details: Dict) -> UserDetails: """Adds a user to the database""" user_id, token = validate_token(token) if not self.check_if_username_is_unique(user_details["username"]): raise DuplicateUsernameError with Session(self._engine, future=True) as session: self._require_admin_user( user_id=user_id, session=session, ) for field in user_details.keys(): if field in PROTECTED_FIELDS: raise UnauthorizedUserError # don't mutate original dict user_details = { **user_details, "id": str(uuid4()), "type": "contrib", "confirmed": False, "deactivated": False, } # handle password password = user_details["password"] user_details["password"] = encrypt(password) # create user object new_user = User(**user_details) session.add(new_user) session.commit() # TODO: when email service is enabled, add call here to send a token to # the provided email address. new_user_token = get_token(new_user.id) log.info(f"New User Token is: {new_user_token}") return token, new_user.to_dict()
def editprofile(): brands_data = [ "label_" + str(brand.name).replace(" ", "_").strip() for brand in Brands.objects() ] labelsFields = [] for key in brands_data: setattr( EditUserInfoForm, key, StringField(" ".join(str(key).split("_")[1:]) + " Label", id=key, _name=key)) userinfoform = EditUserInfoForm(request.form) userpasswordform = EditUserPasswordForm(request.form) if request.method == 'GET': for key in userinfoform: if str(key.id).startswith("label_"): exec( "userinfoform.%s.data = json.loads(current_user.brand)['%s'] if '%s' in json.loads(current_user.brand).keys() else 'NA'" % (key.id, key.id, key.id)) labelsFields.append(key) elif key.id not in [ "samebilladdress", "csrf_token", "whatsapp", "submituserinfo" ]: exec("userinfoform.%s.data = current_user.%s" % (key.id, key.id)) userinfoform.samebilladdress.data = True if current_user.communicationaddress == current_user.billingaddress else False userinfoform.whatsapp.data = True if current_user.whatsapp else False if request.method == 'POST' and userinfoform.submituserinfo.data and userinfoform.validate( ): if userinfoform.gstin.data != "": # Validate GST Number Pattern. if (not gst.checkpattern(userinfoform.gstin.data)): flash("Invalid GST Pattern!", "error") return redirect(url_for('general.parties')) # Validate GST Number Checksum. if (not gst.checkchecksum(userinfoform.gstin.data)): flash("Invalid GST Number!", "error") return redirect(url_for('general.parties')) temp_labels = {} for key in userinfoform.data.items(): if key[0].startswith('label_'): temp_labels[key[0]] = key[1] if key[1] else "NA" user = User.objects(uid=userinfoform.uid.data).update( category=userinfoform.category.data, companyname=userinfoform.companyname.data if userinfoform.category.data == "company" else "", fullname=userinfoform.fullname.data, email=userinfoform.email.data if userinfoform.email.data else None, mobilenumber=userinfoform.mobilenumber.data, whatsapp=userinfoform.whatsapp.data, gstin=userinfoform.gstin.data, communicationaddress=userinfoform.communicationaddress.data, billingaddress=userinfoform.billingaddress.data, state=userinfoform.state.data, city=userinfoform.city.data, pincode=userinfoform.pincode.data, brand=json.dumps(temp_labels)) if user: flash("Profile Updated Successfully", "success") return redirect(url_for('dashboard.editprofile')) flash("Failed to Profile", "error") return redirect(url_for('dashboard.editprofile')) if request.method == 'POST' and userpasswordform.submituserpassword.data and userpasswordform.validate( ): if bcrypt.check_password_hash(current_user.password, userpasswordform.oldpassword.data): if userpasswordform.newpassword.data != userpasswordform.retypenewpassword.data: flash("Password and Confirm Password did't Match", "error") return redirect(url_for('dashboard.editprofile')) user = User(pk=current_user.pk).update( password=bcrypt.generate_password_hash( userpasswordform.newpassword.data).decode("utf-8")) if user: flash("Password Updated Successfully", "success") return redirect(url_for('auth.logout')) flash("Failed to Update Password", "error") return redirect(url_for('dashboard.editprofile')) flash("Incorrect Old Password", "error") return redirect(url_for('dashboard.editprofile')) return render_template('dashboard/edit-profile.html', userinfoform=userinfoform, userpasswordform=userpasswordform, brands_data=labelsFields)
def parties(): brands_data = ["label_" + str(brand.name).replace(" ","_").strip() for brand in Brands.objects()] for key in brands_data: setattr(PartyForm, key, StringField(key)) form = PartyForm(request.form) form.branch.choices = [("", "Select Branch")] + [(str(branch.pk), branch.code) for branch in Branches.objects()] form.group.choices = [("", "Select Group")] + [(str(group.pk), group.name) for group in User_Groups.objects()] if request.method == 'POST' and form.validate_on_submit(): if form.gstin.data != "": # Validate GST Number Pattern. if (not gst.checkpattern(form.gstin.data)): flash("Invalid GST Pattern!", "error") return redirect(url_for('general.parties')) # Validate GST Number Checksum. if (not gst.checkchecksum(form.gstin.data)): flash("Invalid GST Number!", "error") return redirect(url_for('general.parties')) if form.id.data == "new": existing_user = User.objects(mobilenumber=form.mobilenumber.data).first() if existing_user is None: if not checkSMSBalance(mode="sms"): flash("SMS Limit Exceeded", "error") return redirect(url_for('general.parties')) password = generate_password(8) temp_labels = {} for key in form.data.items(): if key[0].startswith('label_'): temp_labels[key[0]] = key[1] if key[1] else "NA" uid = str(form.city.data)[0:3].upper() + str(getnextid(form.city.data)) user = User( uid = uid, role = int(form.role.data), branch = Branches.objects(pk=form.branch.data).first().to_dbref() if form.branch.data else None, category = form.category.data, group = User_Groups.objects(pk=form.group.data).first().to_dbref() if form.group.data else None, companyname = form.companyname.data, userclass = form.userclass.data, fullname = form.fullname.data, password = bcrypt.generate_password_hash(password), email = form.email.data if form.email.data else None, mobilenumber = form.mobilenumber.data, whatsapp = form.whatsapp.data, gstin = form.gstin.data, communicationaddress = form.billingaddress.data, billingaddress = form.billingaddress.data, brand = json.dumps(temp_labels), state = form.state.data, city = form.city.data, pincode = form.pincode.data, openingbalance = form.openingbalance.data if form.openingbalance.data else 0, openingbalancedate = str(datetime.strptime(form.openingbalancedate.data, "%d/%m/%Y").timestamp()), status = int(form.status.data) ).save() if user: MSG = "Hey {}, Welcome to Paras Doors.\r\nFrom now you can login to www.parasdoors.com using\r\nLogin ID: {} / {},\r\nPassword: {}".format(form.fullname.data, uid, form.mobilenumber.data, password) status = sendSMS(mobileNumber=form.mobilenumber.data, MSG=MSG, mode="sms") if not status: flash("Failed to Send SMS to User", "error") flash("New User Added Successfully", "success") return redirect(url_for('general.parties')) flash("Failed to Create User", "error") return redirect(url_for('general.parties')) flash("User Already Exists!", "error") return redirect(url_for('general.parties')) else: temp_labels = {} for key in form.data.items(): if key[0].startswith('label_'): temp_labels[key[0]] = key[1] if key[1] else "NA" existing_user = User.objects(mobilenumber=form.mobilenumber.data).first() if (existing_user is None) or (str(existing_user['id']) == form.id.data): user = User(pk=form.id.data).update( role = int(form.role.data), branch = Branches.objects(pk=form.branch.data).first().to_dbref() if form.branch.data else None, category = form.category.data, group = User_Groups.objects(pk=form.group.data).first().to_dbref() if form.group.data else None, companyname = form.companyname.data if form.category.data == "company" else "", userclass = form.userclass.data, fullname = form.fullname.data, email = form.email.data if form.email.data else None, mobilenumber = form.mobilenumber.data, whatsapp = form.whatsapp.data, gstin = form.gstin.data, communicationaddress = form.billingaddress.data, billingaddress = form.billingaddress.data, state = form.state.data, city = form.city.data, pincode = form.pincode.data, brand = json.dumps(temp_labels), openingbalance = form.openingbalance.data, openingbalancedate = str(datetime.strptime(form.openingbalancedate.data, "%d/%m/%Y").timestamp()), status = int(form.status.data) ) if user: flash("Updated User Successfully", "success") return redirect(url_for('general.parties')) flash("Failed to Create User", "error") return redirect(url_for('general.parties')) flash("Mobile Number Already Exist", "error") return redirect(url_for('general.parties')) return render_template('dashboard/general/parties.html', form=form, brands_data=brands_data)
"BLUE": "#0000FF", "NAVY": "#000080", "FUCHSIA": "#FF00FF", "PURPLE": "#800080"} if not User.objects(uid="dev"): User( uid="dev", role=128, category="individual", companyname="", fullname="Supreeth Kumar Y P", # Password 12345678 password="******", email="*****@*****.**", mobilenumber="9743977577", gstin="", communicationaddress="Chitradurga", billingaddress="Chitradurga", state="Karnataka", city="Chitradurga", pincode = 577501, brand = json.dumps({}), openingbalance=0, status = 1 ).save() for tax in taxes: if not Taxes.objects(name="IGST @ %s%s" % (tax, "%")): Taxes( taxtype="IGST", name="IGST @ %s%s" % (tax, "%"),