Example #1
0
    def post(self):

        from google.appengine.api import mail, app_identity
        from google.appengine.api.datastore_errors import BadValueError
        from google.appengine.runtime import apiproxy_errors
        import config
        from models import models

        to = self.request.get("to")
        subject = self.request.get("subject")
        body = self.request.get("body")
        sender = self.request.get("sender")

        if sender != '' or not utils.is_email_valid(sender):
            if utils.is_email_valid(config.contact_sender):
                sender = config.contact_sender
            else:
                app_id = app_identity.get_application_id()
                sender = "%s <no-reply@%s.appspotmail.com>" % (app_id, app_id)

        try:
            logEmail = models.LogEmail(
                sender = sender,
                to = to,
                subject = subject,
                body = body,
                when = utils.get_date_time("datetimeProperty")
            )
            logEmail.put()
        except (apiproxy_errors.OverQuotaError, BadValueError):
            logging.error("Error saving Email Log in datastore")

        mail.send_mail(sender, to, subject, body)
Example #2
0
    def post(self):

        from google.appengine.api import mail, app_identity
        from google.appengine.api.datastore_errors import BadValueError
        from google.appengine.runtime import apiproxy_errors
        import config
        from models import models

        to = self.request.get("to")
        subject = self.request.get("subject")
        body = self.request.get("body")
        sender = self.request.get("sender")

        if sender != '' or not utils.is_email_valid(sender):
            if utils.is_email_valid(config.contact_sender):
                sender = config.contact_sender
            else:
                app_id = app_identity.get_application_id()
                sender = "%s <no-reply@%s.appspotmail.com>" % (app_id, app_id)

        try:
            logEmail = models.LogEmail(
                sender=sender,
                to=to,
                subject=subject,
                body=body,
                when=utils.get_date_time("datetimeProperty"))
            logEmail.put()
        except (apiproxy_errors.OverQuotaError, BadValueError):
            logging.error("Error saving Email Log in datastore")

        mail.send_mail(sender, to, subject, body)
Example #3
0
    def setUp(self):

        # fix configuration if this is still a raw boilerplate code - required by tests with mails
        if not utils.is_email_valid(config.contact_sender):
            config.contact_sender = "*****@*****.**"
        if not utils.is_email_valid(config.contact_recipient):
            config.contact_recipient = "*****@*****.**"

        # create a WSGI application.
        w2config = config.webapp2_config
        # use absolute path for templates
        w2config["webapp2_extras.jinja2"]["template_path"] = os.path.join(
            os.path.join(os.path.dirname(web.__file__), ".."), "templates"
        )
        self.app = webapp2.WSGIApplication(config=w2config)
        routes.add_routes(self.app)
        self.testapp = webtest.TestApp(self.app, extra_environ={"REMOTE_ADDR": "127.0.0.1"})

        # activate GAE stubs
        self.testbed = testbed.Testbed()
        self.testbed.activate()
        self.testbed.init_datastore_v3_stub()
        self.testbed.init_memcache_stub()
        self.testbed.init_urlfetch_stub()
        self.testbed.init_taskqueue_stub()
        self.testbed.init_mail_stub()
        self.mail_stub = self.testbed.get_stub(testbed.MAIL_SERVICE_NAME)
        self.taskqueue_stub = self.testbed.get_stub(testbed.TASKQUEUE_SERVICE_NAME)
        self.testbed.init_user_stub()

        self.headers = {"User-Agent": "Safari", "Accept-Language": "en_US"}
    def setUp(self):
        
        # fix configuration if this is still a raw boilerplate code - required by tests with mails
        if not utils.is_email_valid(config.contact_sender):
            config.contact_sender = "*****@*****.**"
        if not utils.is_email_valid(config.contact_recipient):
            config.contact_recipient = "*****@*****.**"

        # create a WSGI application.
        w2config = config.webapp2_config
        # use absolute path for templates
        w2config['webapp2_extras.jinja2']['template_path'] =  os.path.join(os.path.join(os.path.dirname(web.__file__), '..'), 'templates')
        self.app = webapp2.WSGIApplication(config=w2config)
        routes.add_routes(self.app)
        self.testapp = webtest.TestApp(self.app, extra_environ={'REMOTE_ADDR' : '127.0.0.1'})

        # activate GAE stubs
        self.testbed = testbed.Testbed()
        self.testbed.activate()
        self.testbed.init_datastore_v3_stub()
        self.testbed.init_memcache_stub()
        self.testbed.init_urlfetch_stub()
        self.testbed.init_taskqueue_stub()
        self.testbed.init_mail_stub()
        self.mail_stub = self.testbed.get_stub(testbed.MAIL_SERVICE_NAME)
        self.taskqueue_stub = self.testbed.get_stub(testbed.TASKQUEUE_SERVICE_NAME)
        self.testbed.init_user_stub()
        
        self.headers = {'User-Agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) Version/6.0 Safari/536.25',
                        'Accept-Language' : 'en_US'}
Example #5
0
    def setUp(self):
        
        # fix configuration if this is still a raw boilerplate code - required by tests with mails
        if not utils.is_email_valid(config.contact_sender):
            config.contact_sender = "*****@*****.**"
        if not utils.is_email_valid(config.contact_recipient):
            config.contact_recipient = "*****@*****.**"

        # create a WSGI application.
        w2config = config.webapp2_config
        # use absolute path for templates
        w2config['webapp2_extras.jinja2']['template_path'] =  os.path.join(os.path.join(os.path.dirname(web.__file__), '..'), 'templates')
        self.app = webapp2.WSGIApplication(config=w2config)
        routes.add_routes(self.app)
        self.testapp = webtest.TestApp(self.app, extra_environ={'REMOTE_ADDR' : '127.0.0.1'})

        # activate GAE stubs
        self.testbed = testbed.Testbed()
        self.testbed.activate()
        self.testbed.init_datastore_v3_stub()
        self.testbed.init_memcache_stub()
        self.testbed.init_urlfetch_stub()
        self.testbed.init_taskqueue_stub()
        self.testbed.init_mail_stub()
        self.mail_stub = self.testbed.get_stub(testbed.MAIL_SERVICE_NAME)
        self.taskqueue_stub = self.testbed.get_stub(testbed.TASKQUEUE_SERVICE_NAME)
        self.testbed.init_user_stub()
        
        self.headers = {'User-Agent' : 'Safari', 'Accept-Language' : 'en_US'}
Example #6
0
    def post(self):
        # check captcha
        challenge = self.request.POST.get('recaptcha_challenge_field')
        response = self.request.POST.get('recaptcha_response_field')
        remoteip = self.request.remote_addr

        cResponse = captcha.submit(challenge, response,
                                   self.reCaptcha_private_key, remoteip)

        if cResponse.is_valid:
            # captcha was valid... carry on..nothing to see here
            pass
        else:
            _message = _('Wrong image verification code. Please try again.')
            self.add_message(_message, 'error')
            return self.redirect_to('password-reset')

        # load the email address
        email = str(self.request.POST.get('email')).lower().strip()
        if utils.is_email_valid(email):
            user = models.User.get_by_email(email)
            _message = _(
                "You should receive an email from us shortly with instructions for resetting your password."
            )

        if user is not None:
            user_id = user.get_id()
            token = models.User.create_auth_token(user_id)
            email_url = self.uri_for('taskqueue-send-email')
            reset_url = self.uri_for('password-reset-check',
                                     user_id=user_id,
                                     token=token,
                                     _full=True)
            subject = _("%s Password Assistance" % config.app_name)

            # load email's template
            template_val = {
                "username": user.username,
                "email": user.email,
                "reset_password_url": reset_url,
                "support_url": self.uri_for("contact", _full=True),
                "app_name": config.app_name,
            }

            body_path = "emails/reset_password.txt"
            body = self.jinja2.render_template(body_path, **template_val)

            logging.info("value is: %s" % reset_url)
            taskqueue.add(url=email_url,
                          params={
                              'to': user.email,
                              'subject': subject,
                              'body': body,
                              'sender': config.contact_sender,
                          })
            self.add_message(_message, 'success')
            return self.redirect_to('login')

        self.add_message(_message, 'warning')
        return self.redirect_to('password-reset')
Example #7
0
	def setUp(self):

		# create a WSGI application.
		webapp2_config = config.config
		self.app = webapp2.WSGIApplication(config=webapp2_config)
		routes.add_routes(self.app)
		boilerplate_routes.add_routes(self.app)
		self.testapp = webtest.TestApp(self.app, extra_environ={'REMOTE_ADDR' : '127.0.0.1'})

		# # use absolute path for templates
		# self.app.config['webapp2_extras.jinja2']['template_path'] =	 ['/templates']

		# activate GAE stubs
		self.testbed = testbed.Testbed()
		self.testbed.activate()
		self.testbed.init_datastore_v3_stub()
		self.testbed.init_memcache_stub()
		self.testbed.init_urlfetch_stub()
		self.testbed.init_taskqueue_stub()
		self.testbed.init_mail_stub()
		self.mail_stub = self.testbed.get_stub(testbed.MAIL_SERVICE_NAME)
		self.taskqueue_stub = self.testbed.get_stub(testbed.TASKQUEUE_SERVICE_NAME)
		self.testbed.init_user_stub()

		self.headers = {'User-Agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) Version/6.0 Safari/536.25',
						'Accept-Language' : 'en_US'}

		# fix configuration if this is still a raw boilerplate code - required by test with mails
		if not utils.is_email_valid(self.app.config.get('contact_sender')):
			self.app.config['contact_sender'] = "*****@*****.**"
		if not utils.is_email_valid(self.app.config.get('contact_recipient')):
			self.app.config['contact_recipient'] = "*****@*****.**"
		
		##: Setup global variables
		self.deleteTestProduct()
		product, best_price, productPriceTiers = self.getTestProduct()
		urlsafeKey = product.key.urlsafe()
		
		self.testProduct = product
		self.testProduct_urlsafeKey = urlsafeKey
		self.testProduct_bestPrice = best_price
		self.testProduct_priceTiers = productPriceTiers
		
		logging.info('product = {}'.format(self.testProduct))
		logging.info('urlsafeKey = {}'.format(self.testProduct_urlsafeKey))
		logging.info('best_price = {}'.format(self.testProduct_bestPrice))
Example #8
0
    def post(self):
        """
              Get fields from POST dict
        """
        username = str(self.request.POST.get('username')).lower().strip()
        name = str(self.request.POST.get('name')).strip()
        last_name = str(self.request.POST.get('last_name')).strip()
        email = str(self.request.POST.get('email')).lower().strip()
        country = str(self.request.POST.get('country')).strip()

        if username == "" or email == "":
            message = 'Sorry, some fields are required.'
            self.add_message(message, 'error')
            return self.redirect_to('edit-profile')

        if not utils.is_email_valid(email):
            message = 'Sorry, the email %s is not valid.' % email
            self.add_message(message, 'error')
            return self.redirect_to('edit-profile')

        if not utils.is_alphanumeric(username):
            message = 'Sorry, the username %s is not valid. '\
                      'Use only letters and numbers' % username
            self.add_message(message, 'error')
            return self.redirect_to('edit-profile')

        #TODO: Update profile identifying unique_properties

        # Passing password_raw=password so password will be hashed
        # Returns a tuple, where first value is BOOL.
        # If True ok, If False no new user is created
        unique_properties = ['username','email']
        auth_id = "own:%s" % username
        user = self.auth.store.user_model.create_user(
            auth_id, unique_properties, password_raw=password,
            username=username, name=name, last_name=last_name, email=email,
            country=country, ip=self.request.remote_addr,
        )

        if not user[0]: #user is a tuple
            message = 'Sorry, This user {0:>s} '\
                      'is already registered.'.format(username)# Error message
            self.add_message(message, 'error')
            return self.redirect_to('register')
        else:
            # User registered successfully, let's try sign in the user and redirect to a secure page.
            try:
                self.auth.get_user_by_password(user[1].auth_ids[0], password)
                message = 'Welcome %s you are now loged in.' % ( str(username) )
                self.add_message(message, 'success')
                return self.redirect_to('secure')

            except (AttributeError, KeyError), e:
                message = 'Unexpected error creating '\
                          'user {0:>s}.'.format(username)
                self.add_message(message, 'error')
                self.abort(403)
Example #9
0
    def post(self):
        # check captcha
        challenge = self.request.POST.get('recaptcha_challenge_field')
        response  = self.request.POST.get('recaptcha_response_field')
        remoteip  = self.request.remote_addr

        cResponse = captcha.submit(
            challenge,
            response,
            self.reCaptcha_private_key,
            remoteip)

        if cResponse.is_valid:
            # captcha was valid... carry on..nothing to see here
            pass
        else:
            _message = _('Wrong image verification code. Please try again.')
            self.add_message(_message, 'error')
            return self.redirect_to('password-reset')
        
        # load the email address
        email = str(self.request.POST.get('email')).lower().strip()
        if utils.is_email_valid(email):
            user = models.User.get_by_email(email)
            _message = _("You should receive an email from us shortly with instructions for resetting your password.")

        if user is not None:
            user_id = user.get_id()
            token = models.User.create_auth_token(user_id)
            email_url = self.uri_for('taskqueue-send-email')
            reset_url = self.uri_for('password-reset-check', user_id=user_id, token=token, _full=True)
            subject = _("%s Password Assistance" % config.app_name)

            # load email's template
            template_val = {
                "username": user.username,
                "email": user.email,
                "reset_password_url": reset_url,
                "support_url": self.uri_for("contact", _full=True),
                "app_name": config.app_name,
            }

            body_path = "emails/reset_password.txt"
            body = self.jinja2.render_template(body_path, **template_val)

            logging.info("value is: %s" % reset_url)
            taskqueue.add(url = email_url, params={
                'to': user.email,
                'subject' : subject,
                'body' : body,
                'sender' : config.contact_sender,
                })
            self.add_message(_message, 'success')
            return self.redirect_to('login')

        self.add_message(_message, 'warning')
        return self.redirect_to('password-reset')
Example #10
0
    def post(self):
        # check captcha
        challenge = self.request.POST.get('recaptcha_challenge_field')
        response  = self.request.POST.get('recaptcha_response_field')
        remoteip  = self.request.remote_addr

        cResponse = captcha.submit(
            challenge,
            response,
            self.reCaptcha_private_key,
            remoteip)

        if cResponse.is_valid:
            # captcha was valid... carry on..nothing to see here
            pass
        else:
            logging.warning(cResponse.error_code)
            _message = _('Wrong image verification code. Please try again.')
            self.add_message(_message, 'error')
            return self.redirect_to('password-reset')
            #check if we got an email or username
        email_or_username = str(self.request.POST.get('email_or_username')).lower().strip()
        if utils.is_email_valid(email_or_username):
            user = models.User.get_by_email(email_or_username)
            _message = _("If the e-mail address you entered") + " (<strong>%s</strong>) " % email_or_username
        else:
            auth_id = "own:%s" % email_or_username
            user = models.User.get_by_auth_id(auth_id)
            _message = _("If the username you entered") + " (<strong>%s</strong>) " % email_or_username

        if user is not None:
            user_id = user.get_id()
            token = models.User.create_auth_token(user_id)
            email_url = self.uri_for('taskqueue-send-email')
            reset_url = self.uri_for('password-reset-check', user_id=user_id, token=token, _full=True)
            subject = _("Password reminder")
            body = _('Please click below to create a new password:'******'to': user.email,
                'subject' : subject,
                'body' : body,
                'sender' : config.contact_sender,
                })
            _message = _message + _("is associated with an account in our records, you will receive "\
                                    "an e-mail from us with instructions for resetting your password. "\
                                    "<br>If you don't receive this e-mail, please check your junk mail folder or ") +\
                       '<a href="' + self.uri_for('contact') + '">' + _('contact us') + '</a> ' +  _("for further assistance.")
            self.add_message(_message, 'success')
            return self.redirect_to('login')
        _message = _('Your email / username was not found. Please try another or ') + '<a href="' + self.uri_for('register') + '">' + _('create an account') + '</a>'
        self.add_message(_message, 'error')
        return self.redirect_to('password-reset')
Example #11
0
    def post(self):

        from google.appengine.api import mail, app_identity

        to = self.request.get("to")
        subject = self.request.get("subject")
        body = self.request.get("body")
        sender = self.request.get("sender")

        if sender != '' or not utils.is_email_valid(sender):
            if utils.is_email_valid(self.app.config.get('contact_sender')):
                sender = self.app.config.get('contact_sender')
            else:
                app_id = app_identity.get_application_id()
                sender = "%s <no-reply@%s.appspotmail.com>" % (app_id, app_id)

        if self.app.config['log_email']:
            try:
                logEmail = models.LogEmail(
                    sender=sender,
                    to=to,
                    subject=subject,
                    body=body,
                    when=utils.get_date_time("datetimeProperty")
                )
                logEmail.put()
            except (apiproxy_errors.OverQuotaError, BadValueError):
                logging.error("Error saving Email Log in datastore")

        try:
            message = mail.EmailMessage()
            message.sender = sender
            message.to = to
            message.subject = subject
            message.html = body
            message.send()
        except Exception, e:
            logging.error("Error sending email: %s" % e)
Example #12
0
    def post(self):
        # check captcha
        challenge = self.request.POST.get('recaptcha_challenge_field')
        response  = self.request.POST.get('recaptcha_response_field')
        remoteip  = self.request.remote_addr

        cResponse = captcha.submit(
            challenge,
            response,
            self.reCaptcha_private_key,
            remoteip)

        if cResponse.is_valid:
            # captcha was valid... carry on..nothing to see here
            pass
        else:
            logging.warning(cResponse.error_code)
            _message = 'Wrong image verification code. Please try again.'
            self.add_message(_message, 'error')
            return self.redirect_to('password-reset')
        #check if we got an email or username
        email_or_username = str(self.request.POST.get('email_or_username')).lower().strip()
        if utils.is_email_valid(email_or_username):
            user = models.User.get_by_email(email_or_username)
            _message = "If the e-mail address you entered <strong>%s</strong> " % email_or_username
        else:
            auth_id = "own:%s" % email_or_username
            user = models.User.get_by_auth_id(auth_id)
            _message = "If the username you entered <strong>%s</strong> " % email_or_username

        if user is not None:
            user_id = user.get_id()
            token = models.User.create_auth_token(user_id)
            email_send_url = self.uri_for('send-reset-email')
            taskqueue.add(url = email_send_url, params={
                'recipient_email': user.email,
                'token' : token,
                'user_id' : user_id,
                })
            _message = _message + "is associated with an account in our records, you will receive " \
                       "an e-mail from us with instructions for resetting your password. " \
                       "<br>If you don't receive this e-mail, please check your junk mail folder or " \
                       "<a href='/contact'>contact us</a> for further assistance."
            self.add_message(_message, 'success')
            return self.redirect_to('login')
        _message = 'Your email / username was not found. Please try another or <a href="/register">create an account</a>.'
        self.add_message(_message, 'error')
        return self.redirect_to('password-reset')
Example #13
0
    def login(self, request):
        """Exposes an API endpoint to query for an upload URL.

        Args:


        Returns:

        """
        salt=config.get('salt')
        aes_key=config.get('aes_key')
        if not request.username:
            LoginResponse(message="Provide a username")
        username = request.username.lower()

        # try:
        if utils.is_email_valid(username):
            user = User.get_by_email(username)
            if user:
                auth_id = user.auth_ids[0]
            else:
                raise InvalidAuthIdError
        else:
            auth_id = "own:%s" % username
            user = User.get_by_auth_id(auth_id)

        password = request.password.strip()
        remember_me=False

        # Password to SHA512
        password = utils.hashing(password, salt)

        # Try to login user with password
        # Raises InvalidAuthIdError if user is not found
        # Raises InvalidPasswordError if provided password
        # doesn't match with specified user
        user = User.get_by_auth_id(auth_id)
        if not user:
            raise endpoints.BadRequestException('Password/Username Do Not Match')

        if not security.check_password_hash(password, user.password):
            raise endpoints.BadRequestException('Password/Username Do Not Match')

        else:
            self.user_apikey = ApiKeys.get_apikey_by_user_id(user.key.id()).key.id()

        return LoginResponse(apikey=self.user_apikey)
Example #14
0
 def post(self):
     """
           username: Get the username from POST dict
           password: Get the password from POST dict
     """
     if not self.form.validate():
         return self.get()
     username = self.form.username.data.lower()
     
     try:
         if utils.is_email_valid(username):
             user = models.User.get_by_email(username)
             if user:
                 auth_id = user.auth_ids[0]
             else:
                 raise InvalidAuthIdError
         else:
             auth_id = "own:%s" % username
             user = models.User.get_by_auth_id(auth_id)
             
         password = self.form.password.data.strip()
         remember_me = True if str(self.request.POST.get('remember_me')) == 'on' else False
             
         # Password to SHA512
         password = utils.encrypt(password, config.salt)
 
         # Try to login user with password
         # Raises InvalidAuthIdError if user is not found
         # Raises InvalidPasswordError if provided password
         # doesn't match with specified user
         self.auth.get_user_by_password(
             auth_id, password, remember=remember_me)
         visitLog = models.VisitLog(
             user=user.key,
             uastring=self.request.user_agent,
             ip=self.request.remote_addr,
             timestamp=utils.get_date_time()
         )
         visitLog.put()
         self.redirect_to('secure')
     except (InvalidAuthIdError, InvalidPasswordError), e:
         # Returns error message to self.response.write in
         # the BaseHandler.dispatcher
         message = _("Login invalid, Try again") + ".&nbsp;&nbsp;&nbsp;&nbsp;" + _("Don't have an account?") + \
                 '  <a href="' + self.uri_for('register') + '">' + _("Sign Up") + '</a>'
         self.add_message(message, 'error')
         return self.redirect_to('login')
Example #15
0
    def post(self):
        """
              validate contact form
        """
        remoteip  = self.request.remote_addr
        user_agent  = self.request.user_agent
        name = self.request.POST.get('name').strip()
        email = self.request.POST.get('email').strip()
        message = self.request.POST.get('message').strip()

        if name == "" or email == "" or message == "":
            message = 'Sorry, some fields are required.'
            self.add_message(message, 'error')
            return self.redirect_to('contact')

        if not utils.is_email_valid(email):
            message = 'Sorry, this email %s is not valid.' % email
            self.add_message(message, 'error')
            return self.redirect_to('contact')

        try:
            app_id = app_identity.get_application_id()
            sender_address = "%s <no-reply@%s.appspotmail.com>" % (app_id, app_id)
            subject = "Contact"
            body = """
            IP Address : %s
            Web Browser  : %s

            Sender : %s <%s>
            %s
            """ % (remoteip, user_agent, name, email, message)

            mail.send_mail(sender_address, config.contact_recipient, subject, body)

            message = 'Message sent successfully.'
            self.add_message(message, 'success')
            return self.redirect_to('contact')

        except (AttributeError, KeyError), e:
            message = 'Error sending the message. Please try again later.'
            self.add_message(message, 'error')
            return self.redirect_to('contact')
Example #16
0
 def post(self):
     sensordata = ArduinoSensorData()
     try:
         #get values
         weight = int(self.request.get('weight'))
         email_or_username = str(self.request.get('email')).lower().strip()
         #password = str(self.request.get('password'))
         #sensordata.test = "yes"
         
         #check if we got an email or username
         if utils.is_email_valid(email_or_username):
             #sensordata.test1 = "yes"
             #user_info = users.get_by_email(email_or_username)
             user = users.User(email_or_username)
             #password = utils.hashing(password, self.app.config.get('salt'))
             
             #auth_id = user_info.auth_ids[0]
             
             # authenticate user by its password
             #try:
             #    self.user_model.get_by_auth_password(auth_id, password)
             #    sensordata.test2 = "yes"
                 
             
             #except (InvalidAuthIdError, InvalidPasswordError):
             #    sensordata.test2 = "no"
             #    pass
             if user:
                 sensordata.email = email_or_username
                 sensordata.weight = weight
                 sensordata.timestamp = datetime.datetime.now()
                 sensordata.put()
         
             
     except ValueError:
         #sensordata.test = "no"
         pass
Example #17
0
	def post(self):
		# check captcha
		challenge = self.request.POST.get('recaptcha_challenge_field')
		response  = self.request.POST.get('recaptcha_response_field')
		remoteip  = self.request.remote_addr

		cResponse = captcha.submit(
			challenge,
			response,
			self.app.config.get('captcha_private_key'),
			remoteip)

		if cResponse.is_valid:
			# captcha was valid... carry on..nothing to see here
			pass
		else:
			_message = _('Wrong image verification code. Please try again.')
			self.add_message(_message, 'error')
			return self.redirect_to('password-reset')
			#check if we got an email or username
		email_or_username = str(self.request.POST.get('email_or_username')).lower().strip()
		if utils.is_email_valid(email_or_username):
			user = models.User.get_by_email(email_or_username)
			_message = _("If the e-mail address you entered") + " (<strong>%s</strong>) " % email_or_username
		else:
			auth_id = "own:%s" % email_or_username
			user = models.User.get_by_auth_id(auth_id)
			_message = _("If the username you entered") + " (<strong>%s</strong>) " % email_or_username

		_message = _message + _("is associated with an account in our records, you will receive "
								"an e-mail from us with instructions for resetting your password. "
								"<br>If you don't receive instructions within a minute or two, "
								"check your email's spam and junk filters, or ") +\
				   '<a href="' + self.uri_for('contact') + '">' + _('contact us') + '</a> ' +  _("for further assistance.")

		if user is not None:
			user_id = user.get_id()
			token = models.User.create_auth_token(user_id)
			email_url = self.uri_for('taskqueue-send-email')
			reset_url = self.uri_for('password-reset-check', user_id=user_id, token=token, _full=True)
			subject = _("%s Password Assistance" % self.app.config.get('app_name'))

			# load email's template
			template_val = {
				"username": user.username,
				"email": user.email,
				"reset_password_url": reset_url,
				"support_url": self.uri_for("contact", _full=True),
				"app_name": self.app.config.get('app_name'),
			}

			body_path = "emails/reset_password.txt"
			body = self.jinja2.render_template(body_path, **template_val)
			taskqueue.add(url = email_url, params={
				'to': user.email,
				'subject' : subject,
				'body' : body,
				'sender' : self.app.config.get('contact_sender'),
				})
		self.add_message(_message, 'warning')
		return self.redirect_to('login')
Example #18
0
	def post(self):
		"""
		username: Get the username from POST dict
		password: Get the password from POST dict
		"""

		if not self.form.validate():
			return self.get()
		username = self.form.username.data.lower()
		continue_url = self.request.get('continue_url').encode('ascii', 'ignore')

		try:
			if utils.is_email_valid(username):
				user = models.User.get_by_email(username)
				if user:
					auth_id = user.auth_ids[0]
				else:
					raise InvalidAuthIdError
			else:
				auth_id = "own:%s" % username
				user = models.User.get_by_auth_id(auth_id)

			password = self.form.password.data.strip()
			remember_me = True if str(self.request.POST.get('remember_me')) == 'on' else False

			# Password to SHA512
			password = utils.hashing(password, self.app.config.get('salt'))

			# Try to login user with password
			# Raises InvalidAuthIdError if user is not found
			# Raises InvalidPasswordError if provided password
			# doesn't match with specified user
			self.auth.get_user_by_password(
				auth_id, password, remember=remember_me)

			# if user account is not activated, logout and redirect to home
			if (user.activated == False):
				# logout
				self.auth.unset_session()

				# redirect to home with error message
				resend_email_uri = self.uri_for('resend-account-activation', user_id=user.get_id(),
												token=models.User.create_resend_token(user.get_id()))
				message = _('Your account has not yet been activated. Please check your email to activate it or') +\
						  ' <a href="'+resend_email_uri+'">' + _('click here') + '</a> ' + _('to resend the email.')
				self.add_message(message, 'error')
				return self.redirect_to('home')

			# check twitter association in session
			twitter_helper = twitter.TwitterAuth(self)
			twitter_association_data = twitter_helper.get_association_data()
			if twitter_association_data is not None:
				if models.SocialUser.check_unique(user.key, 'twitter', str(twitter_association_data['id'])):
					social_user = models.SocialUser(
						user = user.key,
						provider = 'twitter',
						uid = str(twitter_association_data['id']),
						extra_data = twitter_association_data
					)
					social_user.put()

			# check facebook association
			fb_data = None
			try:
				fb_data = json.loads(self.session['facebook'])
			except:
				pass

			if fb_data is not None:
				if models.SocialUser.check_unique(user.key, 'facebook', str(fb_data['id'])):
					social_user = models.SocialUser(
						user = user.key,
						provider = 'facebook',
						uid = str(fb_data['id']),
						extra_data = fb_data
					)
					social_user.put()

			# check linkedin association
			li_data = None
			try:
				li_data = json.loads(self.session['linkedin'])
			except:
				pass
			if li_data is not None:
				if models.SocialUser.check_unique(user.key, 'linkedin', str(li_data['id'])):
					social_user = models.SocialUser(
						user = user.key,
						provider = 'linkedin',
						uid = str(li_data['id']),
						extra_data = li_data
					)
					social_user.put()

			# end linkedin

			logVisit = models.LogVisit(
				user=user.key,
				uastring=self.request.user_agent,
				ip=self.request.remote_addr,
				timestamp=utils.get_date_time()
			)
			logVisit.put()
			if continue_url:
				self.redirect(continue_url)
			else:
				self.redirect_to('home')
		except (InvalidAuthIdError, InvalidPasswordError), e:
			# Returns error message to self.response.write in
			# the BaseHandler.dispatcher
			message = _("Your username or password is incorrect. "
						"Please try again (make sure your caps lock is off)")
			self.add_message(message, 'error')
			self.redirect_to('login', continue_url=continue_url) if continue_url else self.redirect_to('login')
Example #19
0
    def post(self):
        # check captcha
        challenge = self.request.POST.get('recaptcha_challenge_field')
        response = self.request.POST.get('recaptcha_response_field')
        remoteip = self.request.remote_addr

        cResponse = captcha.submit(challenge, response,
                                   self.reCaptcha_private_key, remoteip)

        if cResponse.is_valid:
            # captcha was valid... carry on..nothing to see here
            pass
        else:
            logging.warning(cResponse.error_code)
            _message = _('Wrong image verification code. Please try again.')
            self.add_message(_message, 'error')
            return self.redirect_to('password-reset')
            # check if we got an email or username
        email_or_username = str(
            self.request.POST.get('email_or_username')).lower().strip()
        if utils.is_email_valid(email_or_username):
            user = models.User.get_by_email(email_or_username)
            _message = _("If the e-mail address you entered"
                         ) + " (<strong>%s</strong>) " % email_or_username
        else:
            auth_id = "own:%s" % email_or_username
            user = models.User.get_by_auth_id(auth_id)
            _message = _("If the username you entered"
                         ) + " (<strong>%s</strong>) " % email_or_username

        if user is not None:
            user_id = user.get_id()
            token = models.User.create_auth_token(user_id)
            email_url = self.uri_for('taskqueue-send-email')
            reset_url = self.uri_for('password-reset-check',
                                     user_id=user_id,
                                     token=token,
                                     _full=True)
            subject = _("Password reminder")
            body = _('Please click below to create a new password:'******'to': user.email,
                              'subject': subject,
                              'body': body,
                              'sender': config.contact_sender,
                          })
            _message = _message + _("is associated with an account in our records, you will receive "\
                                    "an e-mail from us with instructions for resetting your password. "\
                                    "<br>If you don't receive this e-mail, please check your junk mail folder or ") +\
                       '<a href="' + self.uri_for('contact') + '">' + _('contact us') + '</a> ' +  _("for further assistance.")
            self.add_message(_message, 'success')
            return self.redirect_to('login')
        _message = _(
            'Your email / username was not found. Please try another or '
        ) + '<a href="' + self.uri_for('register') + '">' + _(
            'create an account') + '</a>'
        self.add_message(_message, 'error')
        return self.redirect_to('password-reset')
Example #20
0
    def post(self):
        """
        username: Get the username from POST dict
        password: Get the password from POST dict
        """

        if not self.form.validate():
            return self.get()
        username = self.form.username.data.lower()

        try:
            if utils.is_email_valid(username):
                user = models.User.get_by_email(username)
                if user:
                    auth_id = user.auth_ids[0]
                else:
                    raise InvalidAuthIdError
            else:
                auth_id = "own:%s" % username
                user = models.User.get_by_auth_id(auth_id)

            password = self.form.password.data.strip()
            remember_me = True if str(
                self.request.POST.get('remember_me')) == 'on' else False

            # Password to SHA512
            password = utils.encrypt(password, config.salt)

            # Try to login user with password
            # Raises InvalidAuthIdError if user is not found
            # Raises InvalidPasswordError if provided password
            # doesn't match with specified user
            self.auth.get_user_by_password(auth_id,
                                           password,
                                           remember=remember_me)

            # if user account is not activated, logout and redirect to home
            if (user.activated == False):
                # logout
                self.auth.unset_session()

                # redirect to home with error message
                resend_email_uri = self.uri_for('resend-account-activation',
                                                encoded_email=utils.encode(
                                                    user.email))
                message = _('Sorry, your account') + ' <strong>{0:>s}</strong>'.format(username) + " " +\
                          _('has not been activated. Please check your email to activate your account') + ". " +\
                          _('Or click') + " <a href='"+resend_email_uri+"'>" + _('this') + "</a> " + _('to resend the email')
                self.add_message(message, 'error')
                return self.redirect_to('home')

            # check twitter association in session
            twitter_helper = twitter.TwitterAuth(self)
            twitter_association_data = twitter_helper.get_association_data()
            if twitter_association_data is not None:
                if models.SocialUser.check_unique(
                        user.key, 'twitter',
                        str(twitter_association_data['id'])):
                    social_user = models.SocialUser(
                        user=user.key,
                        provider='twitter',
                        uid=str(twitter_association_data['id']),
                        extra_data=twitter_association_data)
                    social_user.put()

            logVisit = models.LogVisit(user=user.key,
                                       uastring=self.request.user_agent,
                                       ip=self.request.remote_addr,
                                       timestamp=utils.get_date_time())
            logVisit.put()
            self.redirect_to('home')
        except (InvalidAuthIdError, InvalidPasswordError), e:
            # Returns error message to self.response.write in
            # the BaseHandler.dispatcher
            message = _("Login invalid, Try again.") + "<br/>" + _("Don't have an account?") + \
                    '  <a href="' + self.uri_for('register') + '">' + _("Sign Up") + '</a>'
            self.add_message(message, 'error')
            return self.redirect_to('login')
Example #21
0
    def post(self):
        """
        username: Get the username from POST dict
        password: Get the password from POST dict
        """

        if not self.form.validate():
            return self.get()
        username = self.form.username.data.lower()

        try:
            if utils.is_email_valid(username):
                user = models.User.get_by_email(username)
                if user:
                    auth_id = user.auth_ids[0]
                else:
                    raise InvalidAuthIdError
            else:
                auth_id = "own:%s" % username
                user = models.User.get_by_auth_id(auth_id)

            password = self.form.password.data.strip()
            remember_me = True if str(self.request.POST.get('remember_me')) == 'on' else False

            # Password to SHA512
            password = utils.hashing(password, config.salt)

            # Try to login user with password
            # Raises InvalidAuthIdError if user is not found
            # Raises InvalidPasswordError if provided password
            # doesn't match with specified user
            self.auth.get_user_by_password(
                auth_id, password, remember=remember_me)

            # if user account is not activated, logout and redirect to home
            if (user.activated == False):
                # logout
                self.auth.unset_session()

                # redirect to home with error message
                message = _('Your account has been suspended. Please contact support for more information.')
                self.add_message(message, 'error')
                return self.redirect_to('login')

            # REMOVE ME
            #check twitter association in session
            twitter_helper = twitter.TwitterAuth(self)
            twitter_association_data = twitter_helper.get_association_data()
            if twitter_association_data is not None:
                if models.SocialUser.check_unique(user.key, 'twitter', str(twitter_association_data['id'])):
                    social_user = models.SocialUser(
                        user = user.key,
                        provider = 'twitter',
                        uid = str(twitter_association_data['id']),
                        extra_data = twitter_association_data
                    )
                    social_user.put()

            logVisit = models.LogVisit(
                user=user.key,
                uastring=self.request.user_agent,
                ip=self.request.remote_addr,
                timestamp=utils.get_date_time()
            )
            logVisit.put()
            self.redirect_to('home')
        except (InvalidAuthIdError, InvalidPasswordError), e:
            # Returns error message to self.response.write in
            # the BaseHandler.dispatcher
            message = _("Your username or password is incorrect.  Caps lock?")
            self.add_message(message, 'error')
            return self.redirect_to('login')
Example #22
0
    def post(self):
        """
        username: Get the username from POST dict
        password: Get the password from POST dict
        """

        if not self.form.validate():
            return self.get()
        username = self.form.username.data.lower()
        
        try:
            if utils.is_email_valid(username):
                user = models.User.get_by_email(username)
                if user:
                    auth_id = user.auth_ids[0]
                else:
                    raise InvalidAuthIdError
            else:
                auth_id = "own:%s" % username
                user = models.User.get_by_auth_id(auth_id)
            
            password = self.form.password.data.strip()
            remember_me = True if str(self.request.POST.get('remember_me')) == 'on' else False
                
            # Password to SHA512
            password = utils.encrypt(password, config.salt)
    
            # Try to login user with password
            # Raises InvalidAuthIdError if user is not found
            # Raises InvalidPasswordError if provided password
            # doesn't match with specified user
            self.auth.get_user_by_password(
                auth_id, password, remember=remember_me)
                
            # if user account is not activated, logout and redirect to home
            if (user.activated == False):
                # logout
                self.auth.unset_session()
                
                # redirect to home with error message
                resend_email_uri = self.uri_for('resend-account-activation', encoded_email=utils.encode(user.email))
                message = _('Sorry, your account') + ' <strong>{0:>s}</strong>'.format(username) + " " +\
                          _('has not been activated. Please check your email to activate your account') + ". " +\
                          _('Or click') + " <a href='"+resend_email_uri+"'>" + _('this') + "</a> " + _('to resend the email')
                self.add_message(message, 'error')
                return self.redirect_to('home')

            #check twitter association in session
            twitter_helper = twitter.TwitterAuth(self)
            twitter_association_data = twitter_helper.get_association_data()
            if twitter_association_data is not None:
                if models.SocialUser.check_unique(user.key, 'twitter', str(twitter_association_data['id'])):
                    social_user = models.SocialUser(
                        user = user.key,
                        provider = 'twitter',
                        uid = str(twitter_association_data['id']),
                        extra_data = twitter_association_data
                    )
                    social_user.put()

            logVisit = models.LogVisit(
                user=user.key,
                uastring=self.request.user_agent,
                ip=self.request.remote_addr,
                timestamp=utils.get_date_time()
            )
            logVisit.put()
            self.redirect_to('home')
        except (InvalidAuthIdError, InvalidPasswordError), e:
            # Returns error message to self.response.write in
            # the BaseHandler.dispatcher
            message = _("Login invalid, Try again.") + "<br/>" + _("Don't have an account?") + \
                    '  <a href="' + self.uri_for('register') + '">' + _("Sign Up") + '</a>'
            self.add_message(message, 'error')
            return self.redirect_to('login')
Example #23
0
    def post(self):
        """
              username: Get the username from POST dict
              password: Get the password from POST dict
        """
        username = str(self.request.POST.get('username')).lower().strip()
        name = str(self.request.POST.get('name')).strip()
        last_name = str(self.request.POST.get('last_name')).strip()
        email = str(self.request.POST.get('email')).lower().strip()
        password = str(self.request.POST.get('password')).strip()
        c_password = str(self.request.POST.get('c_password')).strip()
        country = str(self.request.POST.get('country')).strip()

        if username == "" or email == "" or password == "":
            message = 'Sorry, some fields are required.'
            self.add_message(message, 'error')
            return self.redirect_to('create-user')

        if password != c_password:
            message = 'Sorry, Passwords are not identical, ' \
                      'you have to repeat again.'
            self.add_message(message, 'error')
            return self.redirect_to('create-user')

        if not utils.is_email_valid(email):
            message = 'Sorry, the email %s is not valid.' % email
            self.add_message(message, 'error')
            return self.redirect_to('create-user')

        if not utils.is_alphanumeric(username):
            message = 'Sorry, the username %s is not valid. ' \
                      'Use only letters and numbers' % username
            self.add_message(message, 'error')
            return self.redirect_to('create-user')

        # Passing password_raw=password so password will be hashed
        # Returns a tuple, where first value is BOOL.
        # If True ok, If False no new user is created
        unique_properties = ['username','email']
        user = self.auth.store.user_model.create_user(
            username, unique_properties, password_raw=password,
            username=username, name=name, last_name=last_name, email=email,
            country=country, ip=self.request.remote_addr,
        )

        if not user[0]: #user is a tuple
            message = 'Sorry, User {0:>s} ' \
                      'is already created.'.format(username)# Error message
            self.add_message(message, 'error')
            return self.redirect_to('create-user')
        else:
            # User is created, let's try redirecting to login page
            try:
                message = 'User %s created successfully.' % ( str(username) )
                self.add_message(message, 'success')
                self.redirect(self.auth_config['login_url'])
            except (AttributeError, KeyError), e:
                message = 'Unexpected error creating ' \
                          'user {0:>s}.'.format(username)
                self.add_message(message, 'error')
                self.abort(403)
Example #24
0
    def post(self):
        """
        username: Get the username from POST dict
        password: Get the password from POST dict
        """

        if not self.form.validate():
            return self.get()
        username = self.form.username.data.lower()

        try:
            if utils.is_email_valid(username):
                user = models.User.get_by_email(username)
                if user:
                    auth_id = user.auth_ids[0]
                else:
                    raise InvalidAuthIdError
            else:
                auth_id = "own:%s" % username
                user = models.User.get_by_auth_id(auth_id)

            password = self.form.password.data.strip()
            remember_me = True if str(
                self.request.POST.get('remember_me')) == 'on' else False

            # Password to SHA512
            password = utils.hashing(password, config.salt)

            # Try to login user with password
            # Raises InvalidAuthIdError if user is not found
            # Raises InvalidPasswordError if provided password
            # doesn't match with specified user
            self.auth.get_user_by_password(auth_id,
                                           password,
                                           remember=remember_me)

            # if user account is not activated, logout and redirect to home
            if (user.activated == False):
                # logout
                self.auth.unset_session()

                # redirect to home with error message
                message = _(
                    'Your account has been suspended. Please contact support for more information.'
                )
                self.add_message(message, 'error')
                return self.redirect_to('login')

            # REMOVE ME
            #check twitter association in session
            twitter_helper = twitter.TwitterAuth(self)
            twitter_association_data = twitter_helper.get_association_data()
            if twitter_association_data is not None:
                if models.SocialUser.check_unique(
                        user.key, 'twitter',
                        str(twitter_association_data['id'])):
                    social_user = models.SocialUser(
                        user=user.key,
                        provider='twitter',
                        uid=str(twitter_association_data['id']),
                        extra_data=twitter_association_data)
                    social_user.put()

            logVisit = models.LogVisit(user=user.key,
                                       uastring=self.request.user_agent,
                                       ip=self.request.remote_addr,
                                       timestamp=utils.get_date_time())
            logVisit.put()
            self.redirect_to('home')
        except (InvalidAuthIdError, InvalidPasswordError), e:
            # Returns error message to self.response.write in
            # the BaseHandler.dispatcher
            message = _("Your username or password is incorrect.  Caps lock?")
            self.add_message(message, 'error')
            return self.redirect_to('login')
Example #25
0
    def post(self):
        """
              Get fields from POST dict
        """
        username = self.request.POST.get('username').lower().strip()
        name = self.request.POST.get('name', "").strip()
        last_name = self.request.POST.get('last_name', "").strip()
        email = self.request.POST.get('email').lower().strip()
        country = self.request.POST.get('country', "").strip()

        if username == "" or email == "":
            message = 'Sorry, some fields are required.'
            self.add_message(message, 'error')
            return self.redirect_to('edit-profile')

        if not utils.is_email_valid(email):
            message = 'Sorry, the email %s is not valid.' % email
            self.add_message(message, 'error')
            return self.redirect_to('edit-profile')

        if not utils.is_alphanumeric(username):
            message = 'Sorry, the username %s is not valid. '\
                      'Use only letters and numbers' % username
            self.add_message(message, 'error')
            return self.redirect_to('edit-profile')

        new_auth_id='own:%s' % username
        

        try:
            user_info = models.User.get_by_id(long(self.user_id))
            try:
                #checking if new username exists
                message=''
                new_user_info=models.User.get_by_auth_id(new_auth_id)
                if new_user_info==None:
                    user_info.username=username
                    user_info.auth_ids[0]=new_auth_id
                    message+=' Your new username is %s .' % username
                    
                else:
                    if user_info.username == new_user_info.username:
                        message+='Your new username is %s.' % username
                    else:
                        message+='Username: %s is already taken. It is not changed.' % username
                check_user_email=models.User.get_by_email(email)
                if check_user_email==None:
                    user_info.email=email
                elif check_user_email.email!=user_info.email:
                    message+='This email is %s already registered.' % email
                else:
                    user_info.email=email
                user_info.name=name
                user_info.last_name=last_name
                user_info.country=country
                user_info.put()
                logging.error(user_info)
                message+=' Your profile has been updated! '
                self.add_message(message,'success')
                self.redirect_to('edit-profile')
            except (AttributeError,KeyError), e:
                message='Unable to update profile!'
                self.add_message(message,'error')
                self.redirect_to('edit-profile')

        except (AttributeError,TypeError),e:
            login_error_message='Sorry you are not logged in!'
            self.add_message(login_error_message,'error')
            self.redirect_to('login')
Example #26
0
 def post(self):
     """
           Get fields from POST dict
     """
     new_email = self.request.POST.get('new_email').strip()
     password = self.request.POST.get('password').strip()
     
     if new_email == "" or password == "":
         message = 'Sorry, some fields are required.'
         self.add_message(message, 'error')
         return self.redirect_to('edit-email')
     
     if not utils.is_email_valid(new_email):
         message = 'Sorry, the email %s is not valid.' % new_email
         self.add_message(message, 'error')
         return self.redirect_to('edit-email')
     
     try:
         user_info = models.User.get_by_id(long(self.user_id))
         auth_id = "own:%s" % user_info.username
         # Password to SHA512
         password = utils.encrypt(password, config.salt)
         
         try:
             # authenticate user by its password
             user = models.User.get_by_auth_password(auth_id, password)
             
             # if the user change his/her email address
             if new_email != user.email:
                 
                 # check whether the new email has been used by another user
                 aUser = models.User.get_by_email(new_email)
                 if aUser is not None:
                     message = "The email %s is already registered. Want to <a href='/login/'>login</a> or <a href='/password-reset/'>recover your password</a>?" % new_email
                     self.add_message(message, "error")
                     return self.redirect_to("edit-email")
                 
                 # send email
                 subject = config.app_name + " Email Changed Notification"
                 user_token = models.User.create_auth_token(self.user_id)
                 confirmation_url = self.uri_for("email-changed-check", 
                     user_id = user_info.get_id(),
                     encoded_email = utils.encode(new_email),
                     token = user_token,
                     _full = True)
                 
                 # load email's template
                 template_val = {
                     "app_name": config.app_name,
                     "first_name": user.name,
                     "username": user.username,
                     "new_email": new_email,
                     "confirmation_url": confirmation_url,
                     "support_url": self.uri_for("contact", _full=True)
                 }
                 
                 old_body_path = "emails/email_changed_notification_old.txt"
                 old_body = self.jinja2.render_template(old_body_path, **template_val)
                 
                 new_body_path = "emails/email_changed_notification_new.txt"
                 new_body = self.jinja2.render_template(new_body_path, **template_val)
                 
                 utils.send_email(user.email, subject, old_body)
                 utils.send_email(new_email , subject, new_body)
                 
                 logging.error(user)
                 
                 # display successful message
                 msg = "Please check your new email for confirmation. "
                 msg += "Your email will be updated after confirmation. "
                 self.add_message(msg, 'success')
                 return self.redirect_to('secure')
                 
             else:
                 self.add_message("You didn't change your email", "warning")
                 return self.redirect_to("edit-email")
             
             
         except (InvalidAuthIdError, InvalidPasswordError), e:
             # Returns error message to self.response.write in
             # the BaseHandler.dispatcher
             message = "Your password is wrong, please try again"
             self.add_message(message, 'error')
             return self.redirect_to('edit-email')
             
     except (AttributeError,TypeError), e:
         login_error_message = _('Sorry you are not logged in!')
         self.add_message(login_error_message,'error')
         self.redirect_to('login')