def find_best(self, scores): date_risk = "N/A" value_risk = 0.0 date_cost = "N/A" value_cost = 0.0 id_risk = 1 id_cost = 1 scores_1, scores_2 = itertools.tee(scores) for row in scores_1: if row.score_type == 1: date_risk = row.date value_risk = row.score_value id_risk = row.userid break for row in scores_2: if row.score_type == 2: date_cost = row.date value_cost = row.score_value id_cost = row.userid break value_risk_cost = db.select( 'scores', where="date=$date_risk&&userid=$id_risk&&score_type=2", vars=locals())[0].score_value value_cost_risk = db.select( 'scores', where="date=$date_cost&&userid=$id_cost&&score_type=1", vars=locals())[0].score_value return value_risk, value_risk_cost, date_risk, value_cost, value_cost_risk, date_cost
def latest_policy(self, user_id): policy = { 'location': "", 'employee': "", 'device': "", 'bdata': "", # why are these strings and not numbers? 'pdata': ""} policy.update(self.default) db_policy_all = db.select('policies', where="user_id=$user_id", order="date DESC", vars=locals()) if len(db_policy_all) > 0: db_policy = db_policy_all[0] db_bio = db.select('biometrics', where="id=$db_policy.bio_id", vars=locals())[0] db_pass = db.select('passfaces', where="id=$db_policy.pass_id", vars=locals())[0] db_pw = db.select('pw_policy_test', where="id=$db_policy.pw_id", vars=locals())[0] policy["location"] = db_policy.location policy["employee"] = db_policy.employee policy["device"] = db_policy.device policy["bdata"] = db_bio.bdata policy["pdata"] = db_pass.pdata policy["plen"] = db_pw.plen policy["psets"] = db_pw.psets policy["pdict"] = db_pw.pdict policy["phist"] = db_pw.phist policy["prenew"] = db_pw.prenew policy["pattempts"] = db_pw.pattempts policy["precovery"] = db_pw.precovery return policy
def select_users(cls, user_id=0, username=''): """ Returns list of all users with 'username' and 'user_id' (optional) parameters. """ if user_id > 0: if username != '': return db.select('users', where="username=$username&&user_id=$user_id", vars=locals()) else: return db.select('users', where="user_id=$user_id", vars=locals()) else: return db.select('users', where="username=$username", vars=locals())
def GET(self): web.header('Content-Type', 'application/json') #get policy history (used in table display on a Profile page) policy_history = policies_model.get_policy_history(context.user_id()) #get risks, costs for all months played by a user (used in graphs display on a Profile page) userid = context.user_id() scores = db.select('scores', where='userid=$userid', order="date ASC", vars=locals()) scores_result = [] for row in scores: tmp = {} for key, value in row.iteritems(): tmp[key] = str(value) scores_result.append(tmp) history = json.dumps( { 'policy_history': json.dumps(policy_history), 'graph_data': json.dumps(scores_result) } ) if history: return history
def GET(self): web.header('Content-Type', 'application/json') #get policy history (used in table display on a Profile page) policy_history = policies_model.get_policy_history(context.user_id()) #get risks, costs for all months played by a user (used in graphs display on a Profile page) userid = context.user_id() scores = db.select('scores', where='userid=$userid', order="date ASC", vars=locals()) scores_result = [] for row in scores: tmp = {} for key, value in row.iteritems(): tmp[key] = str(value) scores_result.append(tmp) history = json.dumps({ 'policy_history': json.dumps(policy_history), 'graph_data': json.dumps(scores_result) }) if history: return history
def GET(self): """ Handles AJAX requests to get client's most recent policies. """ if context.user_id() == 0: raise web.seeother(path + '/home') check = db.select('pw_policy', where='userid=$context.user_id()', order='date DESC', vars=locals()) if len(check) > 0: result_get = check[0] return json.dumps( { 'plen': result_get.plen, 'psets': result_get.psets, 'pdict': result_get.pdict, 'phist': result_get.phist, 'prenew': result_get.prenew, 'pattempts': result_get.pattempts, 'precovery': result_get.precovery, 'date': result_get.date } ) else: return json.dumps(self.default_policy)
def get_user_id(cls, username): """ Returns user_id given username, 0 otherwise. """ users = db.select('users', where="username=$username", vars=locals()) if len(users) == 1: return users[0].user_id else: return 0
def get_username(cls, user_id): """ Returns username of user given user_id, empty string otherwise. """ users = db.select('users', where="user_id=$user_id", vars=locals()) if len(users) == 1: return users[0].username else: return ''
def password_recovery_user(cls, token): """ Return user_id if password request ticket is valid. 0 otherwise. :param token: """ user_list = db.select('password_recovery', where="token=$token&&invalid=0", vars=locals()) if len(user_list) == 1: return user_list[0].user_id else: return 0
def check_credentials(cls, username, password): """ Returns ID of user if credentials match, 0 otherwise. """ password = hash_utils.hash_password(password) auth = db.select('users', where="username=$username&&password=$password", vars=locals()) if len(auth) == 1: return auth[0].user_id else: return 0
def password_recovery_user(cls, token=''): """ Return user_id if password request ticket is valid. 0 otherwise. :param token: """ user_list = db.select('password_recovery', where="token=$token&&invalid=0", vars=locals()) if len(user_list) == 1: return user_list[0].user_id else: return 0
def latest_policy(self, user_id): policy = { 'location': "", 'employee': "", 'device': "", 'bdata': "", # why are these strings and not numbers? 'pdata': "" } policy.update(self.default) db_policy_all = db.select('policies', where="user_id=$user_id", order="date DESC", vars=locals()) if len(db_policy_all) > 0: db_policy = db_policy_all[0] db_bio = db.select('biometrics', where="id=$db_policy.bio_id", vars=locals())[0] db_pass = db.select('passfaces', where="id=$db_policy.pass_id", vars=locals())[0] db_pw = db.select('pw_policy_test', where="id=$db_policy.pw_id", vars=locals())[0] policy["location"] = db_policy.location policy["employee"] = db_policy.employee policy["device"] = db_policy.device policy["bdata"] = db_bio.bdata policy["pdata"] = db_pass.pdata policy["plen"] = db_pw.plen policy["psets"] = db_pw.psets policy["pdict"] = db_pw.pdict policy["phist"] = db_pw.phist policy["prenew"] = db_pw.prenew policy["pattempts"] = db_pw.pattempts policy["precovery"] = db_pw.precovery return policy
def GET(self): # get the latest risk and cost user_id = context.user_id() web.header('Content-Type', 'application/json') scores = db.select('scores', where='userid=$user_id', order="date DESC", limit=2, vars=locals()) scores_result = [] for row in scores: tmp = {} for key, value in row.iteritems(): tmp[key] = str(value) scores_result.append(tmp) return json.dumps(scores_result)
def find_best(self, scores): date_risk = "N/A" value_risk = 0.0 date_cost = "N/A" value_cost = 0.0 id_risk = 1 id_cost = 1 scores_1, scores_2 = itertools.tee(scores) for row in scores_1: if row.score_type == 1: date_risk = row.date value_risk = row.score_value id_risk = row.userid break for row in scores_2: if row.score_type == 2: date_cost = row.date value_cost = row.score_value id_cost = row.userid break value_risk_cost = db.select('scores', where="date=$date_risk&&userid=$id_risk&&score_type=2", vars=locals())[0].score_value value_cost_risk = db.select('scores', where="date=$date_cost&&userid=$id_cost&&score_type=1", vars=locals())[0].score_value return value_risk, value_risk_cost, date_risk, value_cost, value_cost_risk, date_cost
def get_scores(cls, id_user): all_scores = db.select('scores', order="score_value ASC") length = len(all_scores) scores_1, scores_2, scores_3, scores_4 = itertools.tee(all_scores, 4) if len(all_scores) > 0: b_u_risk, b_u_risk_cost, b_u_risk_date, b_u_cost, b_u_cost_risk, b_u_cost_date, b_u_risk_rank, b_u_cost_rank,\ c_risk, c_risk_cost, c_risk_rank, c_risk_when, c_pc, c_pc_risk, c_pc_rank, c_pc_when = \ score_model().check_closest_competitor(id_user, scores_2) b_risk, b_risk_cost, b_risk_when, b_pc, b_pc_risk, b_pc_when = score_model( ).find_best(scores_3) avg_risk, avg_pc = score_model().find_avg() msg = { "b_u_risk": str(b_u_risk), "b_u_risk_cost": str(b_u_risk_cost), "b_u_risk_date": str(b_u_risk_date), "b_u_risk_rank": b_u_risk_rank, "b_u_cost": str(b_u_cost), "b_u_cost_risk": str(b_u_cost_risk), "b_u_cost_date": str(b_u_cost_date), "b_u_cost_rank": b_u_cost_rank, "c_risk": str(c_risk), "c_risk_cost": str(c_risk_cost), "c_risk_when": str(c_risk_when), "c_risk_rank": c_risk_rank, "c_pc": str(c_pc), "c_pc_risk": str(c_pc_risk), "c_pc_when": str(c_pc_when), "c_pc_rank": c_pc_rank, "b_risk": str(b_risk), "b_risk_cost": str(b_risk_cost), "b_risk_when": str(b_risk_when), "b_pc": str(b_pc), "b_pc_risk": str(b_pc_risk), "b_pc_when": str(b_pc_when), "avg_risk": str(avg_risk), "avg_pc": str(avg_pc) } return msg
def get_scores(cls, id_user): all_scores = db.select('scores', order="score_value ASC") length = len(all_scores) scores_1, scores_2, scores_3, scores_4 = itertools.tee(all_scores, 4) if len(all_scores) > 0: b_u_risk, b_u_risk_cost, b_u_risk_date, b_u_cost, b_u_cost_risk, b_u_cost_date, b_u_risk_rank, b_u_cost_rank,\ c_risk, c_risk_cost, c_risk_rank, c_risk_when, c_pc, c_pc_risk, c_pc_rank, c_pc_when = \ score_model().check_closest_competitor(id_user, scores_2) b_risk, b_risk_cost, b_risk_when, b_pc, b_pc_risk, b_pc_when = score_model().find_best(scores_3) avg_risk, avg_pc = score_model().find_avg() msg = { "b_u_risk": str(b_u_risk), "b_u_risk_cost": str(b_u_risk_cost), "b_u_risk_date": str(b_u_risk_date), "b_u_risk_rank": b_u_risk_rank, "b_u_cost": str(b_u_cost), "b_u_cost_risk": str(b_u_cost_risk), "b_u_cost_date": str(b_u_cost_date), "b_u_cost_rank": b_u_cost_rank, "c_risk": str(c_risk), "c_risk_cost": str(c_risk_cost), "c_risk_when": str(c_risk_when), "c_risk_rank": c_risk_rank, "c_pc": str(c_pc), "c_pc_risk": str(c_pc_risk), "c_pc_when": str(c_pc_when), "c_pc_rank": c_pc_rank, "b_risk": str(b_risk), "b_risk_cost": str(b_risk_cost), "b_risk_when": str(b_risk_when), "b_pc": str(b_pc), "b_pc_risk": str(b_pc_risk), "b_pc_when": str(b_pc_when), "avg_risk": str(avg_risk), "avg_pc": str(avg_pc) } return msg
def get_scores(cls, id_user): all_scores = db.select("scores", order="score_value ASC") length = len(all_scores) scores_1, scores_2, scores_3, scores_4 = itertools.tee(all_scores, 4) if len(all_scores) > 0: b_u_risk, b_u_risk_rank, b_u_risk_date, b_u_cost, b_u_cost_rank, b_u_cost_date = cls.find_best_USER( length, id_user, scores_1 ) c_risk, c_risk_rank, c_risk_when, c_pc, c_pc_rank, c_pc_when = cls.check_closest_competitor( length, id_user, scores_2 ) b_risk, b_risk_when, b_pc, b_pc_when = cls.find_best(scores_3) avg_risk, avg_pc = cls.find_avg(scores_4) msg = { "b_u_risk": str(b_u_risk), "b_u_risk_date": str(b_u_risk_date.date()), "b_u_risk_rank": b_u_risk_rank, "b_u_cost": str(b_u_cost), "b_u_cost_date": str(b_u_cost_date.date()), "b_u_cost_rank": b_u_cost_rank, "c_risk": str(c_risk), "c_risk_when": str(c_risk_when.date()), "c_risk_rank": c_risk_rank, "c_pc": str(c_pc), "c_pc_when": str(c_pc_when.date()), "c_pc_rank": c_pc_rank, "b_risk": str(b_risk), "b_risk_when": str(b_risk_when.date()), "b_pc": str(b_pc), "b_pc_when": str(b_pc_when.date()), "avg_risk": str(avg_risk), "avg_pc": str(avg_pc), } return msg
def check_closest_competitor(self, usrid, your_score): value_risk = 0.0 value_cost = 0.0 value_risk_cost_contender = 2.0 value_cost_risk_contender = 1.0 prev_value_risk = 2.0 prev_value_cost = 1.0 next_value_risk = 2.0 next_value_cost = 1.0 prev_risk_rank = 0 next_risk_rank = 0 prev_cost_rank = 0 next_cost_rank = 0 next_value_risk_date = "2014-01-06" prev_value_risk_date = "2014-01-06" prev_value_cost_date = "2014-01-06" next_value_cost_date = "2014-01-06" date_risk = "2014-01-06" date_cost = "2014-01-06" checked = False u_rank_risk = 1 u_rank_cost = 1 users_risk = [] users_cost = [] risk_values = [] cost_values = [] contender_id_prev_risk = 1 contender_id_next_risk = 1 contender_id_prev_cost = 1 contender_id_next_cost = 1 scores_1, scores_2 = itertools.tee(your_score) for row in scores_1: if row.score_type == 1: if row.userid == usrid: if not checked: value_risk = row.score_value checked = True date_risk = row.date else: if not checked: if not row.userid in users_risk: if not float(row.score_value) in risk_values: risk_values.append(float(row.score_value)) u_rank_risk += 1 prev_value_risk = row.score_value prev_value_risk_date = row.date contender_id_prev_risk = row.userid users_risk.append(row.userid) else: if not row.userid in users_risk: next_value_risk = row.score_value next_value_risk_date = row.date contender_id_next_risk = row.userid break checked = False for row in scores_2: if row.score_type == 2: if row.userid == usrid: if not checked: value_cost = row.score_value checked = True date_cost = row.date else: if not checked: if not row.userid in users_cost: if not float(row.score_value) in cost_values: users_cost.append(row.userid) cost_values.append(float(row.score_value)) u_rank_cost += 1 prev_value_cost = row.score_value prev_value_cost_date = row.date contender_id_prev_cost = row.userid else: if not row.userid in users_cost: next_value_cost = row.score_value next_value_cost_date = row.date contender_id_next_cost = row.userid break u_rank_risk -= risk_values.count(float(value_risk)) u_rank_cost -= cost_values.count(float(value_cost)) prev_risk_rank = u_rank_risk - 1 if prev_risk_rank == 0: prev_value_risk = 9 prev_cost_rank = u_rank_cost - 1 if prev_cost_rank == 0: prev_value_cost = 9 if next_value_risk == value_risk: next_risk_rank = u_rank_risk else: next_risk_rank = u_rank_risk + 1 if next_value_cost == value_cost: next_cost_rank = u_rank_cost else: next_cost_rank = u_rank_cost + 1 if prev_value_risk == value_risk: prev_risk_rank = u_rank_risk if prev_value_cost == value_cost: prev_cost_rank = u_rank_cost if math.fabs(float(value_risk) - float(prev_value_risk)) <= math.fabs( float(next_value_risk) - float(value_risk)): closest_score_risk = prev_value_risk closest_ranking_risk = prev_risk_rank closest_date_risk = prev_value_risk_date contender_id_risk = contender_id_prev_risk else: closest_score_risk = next_value_risk closest_ranking_risk = next_risk_rank closest_date_risk = next_value_risk_date contender_id_risk = contender_id_next_risk if math.fabs(float(value_cost) - float(prev_value_cost)) <= math.fabs( float(next_value_cost) - float(value_cost)): closest_score_cost = prev_value_cost closest_ranking_cost = prev_cost_rank closest_date_cost = prev_value_cost_date contender_id_cost = contender_id_prev_cost else: closest_score_cost = next_value_cost closest_ranking_cost = next_cost_rank closest_date_cost = next_value_cost_date contender_id_cost = contender_id_next_cost value_risk_cost = db.select('scores', where="date=$date_risk&&score_type=2&&userid=$usrid", vars=locals())[0].score_value value_cost_risk = db.select('scores', where="date=$date_cost&&score_type=1&&userid=$usrid", vars=locals())[0].score_value res1 = db.select('scores', where="date=$closest_date_risk&&score_type=2&&userid=$contender_id_risk", vars=locals()) if len(res1) > 0: value_risk_cost_contender = res1[0].score_value res2 = db.select('scores', where="date=$closest_date_cost&&score_type=1&&userid=$contender_id_cost", vars=locals()) if len(res2) > 0: value_cost_risk_contender = res2[0].score_value return value_risk, value_risk_cost, date_risk, value_cost, value_cost_risk, date_cost, u_rank_risk, u_rank_cost, closest_score_risk, value_risk_cost_contender, \ closest_ranking_risk, closest_date_risk, closest_score_cost, value_cost_risk_contender, closest_ranking_cost, closest_date_cost
def check_closest_competitor(self, usrid, your_score): value_risk = 0.0 value_cost = 0.0 value_risk_cost_contender = 2.0 value_cost_risk_contender = 1.0 prev_value_risk = 2.0 prev_value_cost = 1.0 next_value_risk = 2.0 next_value_cost = 1.0 prev_risk_rank = 0 next_risk_rank = 0 prev_cost_rank = 0 next_cost_rank = 0 next_value_risk_date = "2014-01-06" prev_value_risk_date = "2014-01-06" prev_value_cost_date = "2014-01-06" next_value_cost_date = "2014-01-06" date_risk = "2014-01-06" date_cost = "2014-01-06" checked = False u_rank_risk = 1 u_rank_cost = 1 users_risk = [] users_cost = [] risk_values = [] cost_values = [] contender_id_prev_risk = 1 contender_id_next_risk = 1 contender_id_prev_cost = 1 contender_id_next_cost = 1 scores_1, scores_2 = itertools.tee(your_score) for row in scores_1: if row.score_type == 1: if row.userid == usrid: if not checked: value_risk = row.score_value checked = True date_risk = row.date else: if not checked: if not row.userid in users_risk: if not float(row.score_value) in risk_values: risk_values.append(float(row.score_value)) u_rank_risk += 1 prev_value_risk = row.score_value prev_value_risk_date = row.date contender_id_prev_risk = row.userid users_risk.append(row.userid) else: if not row.userid in users_risk: next_value_risk = row.score_value next_value_risk_date = row.date contender_id_next_risk = row.userid break checked = False for row in scores_2: if row.score_type == 2: if row.userid == usrid: if not checked: value_cost = row.score_value checked = True date_cost = row.date else: if not checked: if not row.userid in users_cost: if not float(row.score_value) in cost_values: users_cost.append(row.userid) cost_values.append(float(row.score_value)) u_rank_cost += 1 prev_value_cost = row.score_value prev_value_cost_date = row.date contender_id_prev_cost = row.userid else: if not row.userid in users_cost: next_value_cost = row.score_value next_value_cost_date = row.date contender_id_next_cost = row.userid break u_rank_risk -= risk_values.count(float(value_risk)) u_rank_cost -= cost_values.count(float(value_cost)) prev_risk_rank = u_rank_risk - 1 if prev_risk_rank == 0: prev_value_risk = 9 prev_cost_rank = u_rank_cost - 1 if prev_cost_rank == 0: prev_value_cost = 9 if next_value_risk == value_risk: next_risk_rank = u_rank_risk else: next_risk_rank = u_rank_risk + 1 if next_value_cost == value_cost: next_cost_rank = u_rank_cost else: next_cost_rank = u_rank_cost + 1 if prev_value_risk == value_risk: prev_risk_rank = u_rank_risk if prev_value_cost == value_cost: prev_cost_rank = u_rank_cost if math.fabs(float(value_risk) - float(prev_value_risk)) <= math.fabs( float(next_value_risk) - float(value_risk)): closest_score_risk = prev_value_risk closest_ranking_risk = prev_risk_rank closest_date_risk = prev_value_risk_date contender_id_risk = contender_id_prev_risk else: closest_score_risk = next_value_risk closest_ranking_risk = next_risk_rank closest_date_risk = next_value_risk_date contender_id_risk = contender_id_next_risk if math.fabs(float(value_cost) - float(prev_value_cost)) <= math.fabs( float(next_value_cost) - float(value_cost)): closest_score_cost = prev_value_cost closest_ranking_cost = prev_cost_rank closest_date_cost = prev_value_cost_date contender_id_cost = contender_id_prev_cost else: closest_score_cost = next_value_cost closest_ranking_cost = next_cost_rank closest_date_cost = next_value_cost_date contender_id_cost = contender_id_next_cost value_risk_cost = db.select( 'scores', where="date=$date_risk&&score_type=2&&userid=$usrid", vars=locals())[0].score_value value_cost_risk = db.select( 'scores', where="date=$date_cost&&score_type=1&&userid=$usrid", vars=locals())[0].score_value res1 = db.select( 'scores', where= "date=$closest_date_risk&&score_type=2&&userid=$contender_id_risk", vars=locals()) if len(res1) > 0: value_risk_cost_contender = res1[0].score_value res2 = db.select( 'scores', where= "date=$closest_date_cost&&score_type=1&&userid=$contender_id_cost", vars=locals()) if len(res2) > 0: value_cost_risk_contender = res2[0].score_value return value_risk, value_risk_cost, date_risk, value_cost, value_cost_risk, date_cost, u_rank_risk, u_rank_cost, closest_score_risk, value_risk_cost_contender, \ closest_ranking_risk, closest_date_risk, closest_score_cost, value_cost_risk_contender, closest_ranking_cost, closest_date_cost