def critique(self, id): load_user() self.load_matches(id) act = meta.Session.query(Activity).get(id) if c.user and self._can_comment(c.user.id, c.service_matches): rt = Rating() # raise Exception('inserting rating by user %s of user %s'%(c.user.id,act.user.id)) rt.by_user = c.user # rt.by_user_id = c.user.id # c.user.ratings_by.append(rt) rt.of_user = act.user # rt.of_user_id = act.user.id act.user.ratings_of.append(rt) rt.rating = self.form_result.get("rating") rt.comment = self.form_result.get("comment") meta.Session.add(rt) meta.Session.commit() sess = facebook.check_session() if sess: facebook.notifications.send( [act.user.fb_uid], _( u' נתן ציון לשירותך באתר <a href="http://www.greenie.co.il/">השליחים הירוקים</a> - <a href="http://www.greenie.co.il%s">%s</a>' ) % (url.current(controller=act.activity_type, action="index", id=act.id), act), ) redirect(url.current(action="index", id=id)) else: raise Exception("permission denied to comment for this user here")
def load_user(): sess = facebook.check_session() from pylons import config if sess: c.user = meta.Session.query(User).filter_by(fb_uid=facebook.uid).one() elif config["use_facebook"] != "true": c.user = meta.Session.query(User).get(1)
def ensure_fb_session(): c.facebook = facebook def setup_user(): session['fbsession']= facebook.session_key session['fbuid']= facebook.uid if request.params.get('present') == 'true': session['present'] = True if not qualified_for_login(facebook.uid, 1) and not \ request.params.get('present') == 'true': return False user = Session.query(User).filter( User.fbid==facebook.uid).first() if not user: user = create_user(facebook.uid) user.lastseen = datetime.now() user.fbsession = facebook.session_key Session.add(user) Session.commit() session['userid'] = user.id session.save() return True if not session.get('fbsession'): if facebook.check_session(request): return setup_user() else: login() else: facebook.session_key = session['fbsession'] facebook.uid = session['fbuid'] return True
def force_login(f,*args,**kws): auth = False if 'greenie_auth' in session and session['greenie_auth']: try: u = meta.Session.query(User).filter_by(login_hash=session['greenie_auth']).one() #FIXME: we don't handle a case here in which the user has a previous facebook account and he attempts to associate it to a second email account.. if not u.fb_uid and facebook.check_session() and not len(meta.Session.query(User).filter_by(fb_uid=facebook.uid).all()): u.fb_uid=facebook.uid meta.Session.commit() c.user = u c.user_id = u.id auth=True except: #pass raise if config['use_facebook']!='true': c.use_facebook=False # we have an alternative auth system in place now. # u = meta.Session.query(User).get(1) # if not u: # u = User() # u.id = 1 # u.fb_uid='12341234' # u.name='Test user' # meta.Session.add(u); meta.Session.commit() # c.user = u # c.user_id = u.id # return f(*args,**kws) c.use_facebook=True action = request.environ['pylons.routes_dict']['action'] login_action='fb_login' fbses = facebook.check_session() if fbses: if not facebook.uid: raise Exception('no fb uid!') #raise Exception('fb uid:%s'%facebook.uid) try: u = meta.Session.query(User).filter_by(fb_uid=facebook.uid).one() except NoResultFound: u = User() u.fb_uid = facebook.uid u.name = facebook.users.getInfo(facebook.uid)[0]['name'] #facebook.users.setStatus("just registered on <a href='http://www.greenie.co.il'>Green Couriers</a> - the green way of delivering.",False) #facebook.feed.publishUserAction(51359366316) from greencouriers.controllers.auth import default_user_attrs default_user_attrs(u,request) meta.Session.add(u); meta.Session.commit() c.user_id=u.id c.user = u auth = True elif not auth: if action!=login_action: # we could not login. see if there are any last exceptions? if request.urlvars['controller']=='main' or \ (request.urlvars['action'] in ['login','signup','logout',_('reset')]\ and not re.compile(_('_signup$')).search(request.urlvars['controller'])): return f(*args,**kws) # redirect to login. return redirect(url.current(action=login_action,return_action=action)) if auth==True: if c.user: from greencouriers.lib.base import freemap_url_from_country c.use_google_maps,c.freemap_url = freemap_url_from_country(c.user.country,c.user) #if c.use_google_maps: raise Exception('country of user %s is %s'%(c.user.id,c.user.country)) #raise Exception('extracted %s,%s from %s'%(c.use_google_maps,c.freemap_url,c.user.country)) return f(*args,**kws)
def justadded(self, act): acts_text = {"business": _(u"עסק"), "courier": _(u"שליח"), "client": _(u"לקוח")} sess = facebook.check_session() to_notify = [] to_notify_email = [] for cm in c.service_matches: # if not sess: continue notif = meta.Session.query(MatchNotification).filter_by(of=act, whom=cm.activity).all() if not notif: notif = MatchNotification() notif.whom = cm.activity # cm.activity.notifications_whom.append(notif) if notif.whom.user.fb_uid not in to_notify: to_notify.append(notif.whom.user.fb_uid) if ( notif.whom.user.email != None and len(notif.whom.user.email) > 0 and notif.whom.user.email not in to_notify_email ): to_notify_email.append(notif.whom.user.id) notif.of = act act.notifications_of.append(notif) meta.Session.add(notif) meta.Session.commit() log.info("notifying %s of %s" % (notif.whom, notif.of)) else: notif = notif[0] if sess and len(to_notify): from facebook import FacebookError try: facebook.notifications.send( to_notify, _( u'רשם שירות באתר <a href="http://www.greenie.co.il/">השליחים הירוקים</a> וישנה התאמה ביניכם - <a href="http://www.greenie.co.il%s">%s</a>' ) % (url.current(controller=act.activity_type, action="index", id=act.id), act), ) notif.status += "facebook-success;" except FacebookError: log.error("could not send notifications to %s in session %s" % (to_notify, sess)) notif.status += "facebook-failed;" meta.Session.commit() return None # email notification - # raise Exception(to_notify_email) for tuid in to_notify_email: u = meta.Session.query(User).get(tuid) import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.header import Header # this is quite the stupid HACK: if type(notif.of) == Activity: act = notif.of else: act = notif.of[0] msg = MIMEMultipart("alternative") msg.set_charset("utf-8") msg["Subject"] = Header(_(u"התאמה חדשה בגריני"), "utf-8") msg["From"] = Header(u"*****@*****.**", "utf-8") msg["To"] = Header(u"%s <%s>" % (u.name, u.email), "utf-8") # em.email html = _(u'התאמה חדשה בגריני - <a href="%s">לצפיה</a>') % url.current( controller=act.activity_type, action="index", id=act.id, qualified=True ) part1 = MIMEText(html.encode("utf-8"), "html", "utf-8") msg.attach(part1) try: s = smtplib.SMTP("localhost") s.sendmail("*****@*****.**", u.email, msg.as_string()) notif.status += "email-success;" except: notif.status += "email-failed;" meta.Session.commit() finally: if "s" in locals(): s.quit() # wallpost! if ( sess and request.params.get("justadded") and not meta.Session.query(WallPost).filter_by(wallpost_type="service_creation", activity=act).all() ): c.wall_entry_act = act c.wall_entry_dialog = True c.wall_entry_params = { "url": "http://www.greenie.co.il%s" % (url.current(controller=act.activity_type, action="index", id=act.id)), "signup_type": acts_text[act.activity_type], "actor": act.user.name, }