Ejemplo n.º 1
0
 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")
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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)
Ejemplo n.º 5
0
    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,
            }