def ui_host_manager_add(host_uuid): host_uuid = validate_uuid(host_uuid) host = models.ManagedHost.query.filter_by(uuid=host_uuid).first() if not host or current_user not in host.managers: abort(403, 'No host found with given id and managed by you') form = forms.HostAddManagerForm() if form.validate_on_submit(): email = form.email.data.lower() managers = models.Manager.query.filter( models.Manager.email.ilike(email)) if managers.first(): for manager in managers: if host in manager.hosts: abort(403, f"Host already managed by {html.escape(email)}") else: manager.hosts.append(host) else: # create new manager manager = models.Manager(email=email) db.session.add(manager) manager.hosts.append(host) db.commit_and_sync() return redirect(url_for("ui_host", host_uuid=host_uuid)) else: return render_template('host-manager-add.html', title=f'Add manager for {host.hostname}', host=host, form=form)
def init_db(): # Create all tables models.db.create_all() bank = [('Beijing Bank', 'Beijing', 0.0), ('Shanghai Bank', 'Shanghai', 0.0), ('Hefei Bank', 'Hefei', 0.0), ('Nanjing Bank', 'Nanjing', 0.0)] staff = [ ('staff_1', '大司马', '13312312345', '芜湖市起飞区', '2012-08-17', 'depart_1'), ('staff_2', '李姐', '13323323333', '理解市李姐万岁', '2019-08-31', 'depart_3'), ('staff_3', '韩金龙', '13323311451', '这波市肉弹冲击', '2020-01-31', 'depart_5'), ('staff_4', '神魔恋', '17344455555', '李在赣神魔市', '2020-01-01', 'depart_2'), ('staff_5', '小王', '18912345678', '北京市海淀区', '2018-01-31', 'depart_4'), ('staff_6', '小李', '13012345678', '合肥市包河区', '2018-02-28', 'depart_2'), ('staff_7', '小郭', '18900011100', '合肥市蜀山区', '2018-10-31', 'depart_3'), ('staff_8', '小史', '18912321232', '广东省深圳市', '2000-01-31', 'depart_3') ] department = [('depart_1', '市场部', '普通', 'staff_1', 'Beijing Bank'), ('depart_2', '市场部', '普通', 'staff_2', 'Beijing Bank'), ('depart_3', '市场部', '特殊', 'staff_3', 'Shanghai Bank'), ('depart_4', '人事部', '普通', 'staff_4', 'Nanjing Bank'), ('depart_5', '人事部', '普通', 'staff_5', 'Hefei Bank')] manager = [ ('staff_1', 'depart_1'), ('staff_2', 'depart_2'), ('staff_3', 'depart_3'), ('staff_4', 'depart_4'), ('staff_5', 'depart_5'), ] # add Banks for item in bank: models.db.session.add(models.SubBank(*item)) # add Staffs without foreign key for item in staff: models.db.session.add(models.Staff(*item[:-1])) # add department without foreign key for item in department: models.db.session.add(models.Department(*item[:-2])) models.db.session.commit() # add foreign key for item in manager: models.db.session.add(models.Manager(*item)) models.db.session.commit() for item in staff: result = models.Staff.query.filter( models.Staff.s_identity_code == item[0]).first() result.s_d_code = item[-1] models.db.session.commit() for item in department: result = models.Department.query.filter( models.Department.d_code == item[0]).first() result.d_m_identity_code = item[-2] result.d_sb_name = item[-1] models.db.session.commit()
# Initialize the environment and connection to Firebase config = { "apiKey": "AIzaSyCvZiWJAD9pac9LHACfsKupXAAvyN7INAk", "authDomain": "gank-5502c.firebaseapp.com", "databaseURL": "https://gank-5502c.firebaseio.com", "projectId": "gank-5502c", "storageBucket": "gank-5502c.appspot.com", "messagingSenderId": "591295625571", "appId": "1:591295625571:web:8c5fd9f70d0c46b839fb56", "measurementId": "G-R9MGVMM9S0" } firebase = pyrebase.initialize_app(config) db = firebase.database() application = Flask(__name__) logman = LoginManager(application) logman.login_view = '/' logman.login_message = 'Access denied. Please login first.' manager = models.Manager(db) manager.setup_email('*****@*****.**', 'Gank1234') @logman.user_loader def load_user(userid): return manager.get(userid) from app import routes from app import extraction from app.extraction import schemaExtraction
db.session.add(rest2) db.session.add(mi21) db.session.add(mi22) user1 = models.Customer(username="******", email="*****@*****.**") user1.set_password("jason") user2 = models.Customer(username="******", email="*****@*****.**") user2.set_password("paul") db.session.add(user1) db.session.add(user2) # Managers manager1 = models.Manager(username="******", email="*****@*****.**") manager1.set_password("pat") manager2 = models.Manager(username="******", email="*****@*****.**") manager2.set_password("sal") rest1.manager.append(manager1) rest2.manager.append(manager2) db.session.add(manager1) db.session.add(manager2) # Cooks cook1 = models.Cook(username="******", email="*****@*****.**") cook1.set_password("khan")
def app_init(): """Get DB from permanent storage if needed. Upgrade database if needed.""" debug(f"{whoami()} called") if db.db_permstore_instance: db.db_permstore_instance.get_from_permstore() fresh_db = False try: # baaad hack, but flask_migrate.current() returns nothing, and I don't know how to test if DB is newly created (i.e. sqlite), or existed before if not db.engine.dialect.has_table(db.engine, 'alembic_version'): # the only reason i know for this is when database is newly created # and we definitely should not run db.create_all() before migration! fresh_db = True except Exception as e: error( f"got exception while trying to get db revision: {e} (enable debug for more)" ) debug(f"exception follows:", exc_info=True) debug("running db.create_all()") db.create_all() debug("done db.create_all()") try: if fresh_db: info("This is a fresh database, marking it as latest revision") run_in_child_process(flask_migrate.stamp) else: debug("Trying to perform database migration") run_in_child_process(flask_migrate.upgrade) except Exception as e: error( f"got exception while trying to upgrade db revision: {e} (enable debug for more)" ) debug(f"exception follows:", exc_info=True) if os.environ.get('APP_ENVIRONMENT', None) == "dev": if models.Manager.query.count(): debug( "skipping creation of dev objects - database already has objects" ) else: debug("creating dev objects") host1 = models.ManagedHost(uuid=new_host_uuid(), hostname='testhost.tld') db.session.add(host1) host2 = models.ManagedHost(uuid=new_host_uuid(), hostname='otherhost.dom') db.session.add(host2) user1 = models.ManagedUser(uuid=new_user_uuid(), login="******", host=host1) db.session.add(user1) user2 = models.ManagedUser(uuid=new_user_uuid(), login="******", host=host1) db.session.add(user2) manager1 = models.Manager() manager1.hosts.append(host1) manager1.hosts.append(host2) db.session.add(manager1) db.commit_and_sync() debug("done creating dev objects") # TODO: remove this in production debug("creating built-in objects") host = models.ManagedHost.query.filter_by( uuid='59e8368c-7dbc-11ea-923e-7cb0c2957d37').first() if not host: debug("creating host") host = models.ManagedHost(uuid=str( uuid.UUID('59e8368c-7dbc-11ea-923e-7cb0c2957d37')), hostname='john') user = models.ManagedUser(uuid=new_user_uuid(), login='******', host=host) db.session.add(user) db.session.add(host) manager1 = models.Manager.query.filter_by( email='*****@*****.**').first() if not manager1: debug("creating manager [email protected]") manager1 = models.Manager( ext_auth_type=models.ExtAuthTypeGoogleAuth, ext_auth_id='118295366576899719337', email='*****@*****.**') manager1.hosts.append(host) db.session.add(manager1) #manager2 = models.Manager.query.filter_by(email='*****@*****.**').first() #if not manager2: # debug("creating manager [email protected]") # manager2 = models.Manager(ext_auth_type=models.ExtAuthTypeGoogleAuth, # ext_auth_id='103494272264223262600', email='*****@*****.**') # manager2.hosts.append(host) # db.session.add(manager2) db.commit_and_sync() debug("done creating built-in objects") # debug(dumpdata()) debug(f"{whoami()} finished")
def login_callback(): """Callback for Google Auth""" # Get authorization code Google sent back to you code = request.args.get("code") # Find out what URL to hit to get tokens that allow you to ask for # things on behalf of a user google_provider_cfg = get_google_provider_cfg() token_endpoint = google_provider_cfg["token_endpoint"] # Prepare and send a request to get tokens! Yay tokens! token_url, headers, body = client.prepare_token_request( token_endpoint, authorization_response=request.url, redirect_url=request.base_url, code=code) token_response = requests.post( token_url, headers=headers, data=body, auth=(GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET), ) # Parse the tokens! client.parse_request_body_response(json.dumps(token_response.json())) # Now that you have tokens (yay) let's find and hit the URL # from Google that gives you the user's profile information, # including their Google profile image and email userinfo_endpoint = google_provider_cfg["userinfo_endpoint"] uri, headers, body = client.add_token(userinfo_endpoint) userinfo_response = requests.get(uri, headers=headers, data=body) # You want to make sure their email is verified. # The user authenticated with Google, authorized your # app, and now you've verified their email through Google! if userinfo_response.json().get("email_verified"): unique_id = userinfo_response.json()["sub"] users_email = userinfo_response.json()["email"].lower() # picture = userinfo_response.json()["picture"] users_name = userinfo_response.json()["given_name"] else: return "User email not available or not verified by Google.", 400 # Create a user in your db with the information provided by Google user = models.Manager.query.filter_by( ext_auth_id=unique_id, ext_auth_type=models.ExtAuthTypeGoogleAuth).first() if not user: # no user with given id, try to search by email among google-hosted users user = models.Manager.query.filter_by( email=users_email, ext_auth_type=models.ExtAuthTypeGoogleAuth).first() if not user: # no user with this email among google-hosted users, try to search by email with no type set user = models.Manager.query.filter( db.and_(models.Manager.email == users_email, models.Manager.ext_auth_type == None)).first() if user: # update user's data if we already have it if user.name != users_name: user.name = users_name if user.email != users_email: user.email = users_email if user.ext_auth_type != models.ExtAuthTypeGoogleAuth: user.ext_auth_type = models.ExtAuthTypeGoogleAuth # if user.picture != picture: user.picture = picture else: user = models.Manager(ext_auth_id=unique_id, ext_auth_type=models.ExtAuthTypeGoogleAuth, name=users_name, email=users_email) db.session.add(user) db.commit_and_sync(sync_priority=SyncPriorityDelayed) login_user(user, remember=True) return redirect(url_for("webroot"))