Example #1
0
    def post(self):
        user = users.get_current_user()
        if not user:
            self.redirect(users.create_login_url("/key"))
            return
        account = Membership.all().filter("username ="******"@")[0]).get()
        if not account or not account.spreedly_token or account.status != "active":
            message = "Error #1982, which should never happen."
            internal = True
            self.response.out.write(self.render("templates/error.html", locals()))
            return
        is_park = self.request.get("ispark")
        if is_park == "True":  # checks if user input is a parking pass number or an rfid number
            pass_to_add = self.request.get("parking_pass")
            try:  # tests if there are only numbers in the parking pass
                float(pass_to_add)
            except ValueError:
                message = '<p>A Parking Pass may only contain numbers.</p><a href="/key">Try Again</a>'
                internal = False
                self.response.out.write(self.render("templates/error.html", locals()))
                return
            account.parking_pass = pass_to_add

            logging.debug("Setting parking pass for %s to %s." % (account.full_name(), account.parking_pass))

            db.put(account)
            self.response.out.write(self.render("templates/pass_ok.html", locals()))  # outputs the parking number
        else:
            rfid_tag = self.request.get("rfid_tag").strip()
            description = self.request.get("description").strip()
            if rfid_tag.isdigit():
                if Membership.all().filter("rfid_tag =", rfid_tag).get():
                    message = "<p>That RFID tag is in use by someone else.</p>"
                    internal = False
                    self.response.out.write(self.render("templates/error.html", locals()))
                    return
                if not description:
                    message = "<p>Please enter a reason why you are associating a replacement RFID key.  Please hit BACK and try again.</p>"
                    internal = False
                    self.response.out.write(self.render("templates/error.html", locals()))
                    return
                account.rfid_tag = rfid_tag

                logging.debug("Setting RFID for %s to %s." % (account.full_name(), account.rfid_tag))

                account.put()
                bc = BadgeChange(rfid_tag=rfid_tag, username=account.username, description=description)
                bc.put()
                self.response.out.write(self.render("templates/key_ok.html", locals()))
                return
            else:
                message = "<p>That RFID ID seemed invalid. Hit back and try again.</p>"
                internal = False
                self.response.out.write(self.render("templates/error.html", locals()))
                return
Example #2
0
 def get(self):
     signup_users = Membership.all().fetch(10000)
     signup_users = sorted(signup_users,
                           key=lambda user: user.last_name.lower())
     user_keys = [str(user.key()) for user in signup_users]
     user_ids = [user.key().id() for user in signup_users]
     self.response.out.write(self.render("templates/users.html", locals()))
Example #3
0
 def post(self):
     countdown = 0
     for membership in Membership.all().filter('status =', None):
         if (datetime.now().date() - membership.created.date()).days > 1:
             countdown += 90
             self.response.out.write("bye "+membership.email+ " ")
             taskqueue.add(url='/tasks/clean_row', params={'user': membership.key().id()}, countdown=countdown)
Example #4
0
  def post(self):
    if Config().is_dev:
      # Only allow this if it's the dev server.
      entry = self.request.body
      logging.debug("Got new entry: " + entry)
      entry = json.loads(entry)
      # Change formatted date back into datetime.
      for key in entry.keys():
        if type(getattr(Membership, key)) == db.DateTimeProperty:
          if not entry[key]:
            # It could be None as well.
            continue
          entry[key] = pickle.loads(str(entry[key]))
      # entry should have everything nicely in a dict...
      member = Membership(**entry)

      # Is this an update or a new model?
      match = Membership.all().filter("email =", member.email).get()
      if match:
        # Replace the old one.
        logging.debug("Found entry with same username. Replacing...")
        db.delete(match)

      member.put()
      logging.debug("Put entry in datastore.")
Example #5
0
 def post(self):
     countdown = 0
     for membership in Membership.all().filter('status =', "suspended"):
       if not membership.unsubscribe_reason and membership.spreedly_token and "Deleted" not in membership.last_name and membership.extra_dnd != True:
         countdown += 1200 # One e-mail every 20 min = 72 e-mails a day (100 is free appengine limit)
         self.response.out.write("Are you still there "+membership.email+ "?<br/>")
         taskqueue.add(url='/tasks/areyoustillthere_mail', params={'user': membership.key().id()}, countdown=countdown)
Example #6
0
 def get(self):
   countdown = 0
   for membership in Membership.all().filter("status =", None):
     if (datetime.datetime.now().date() - membership.created.date()).days > 1:
       countdown += 90
       self.response.out.write("bye %s " % (membership.email))
       taskqueue.add(url="/tasks/clean_row", params={"user": membership.key().id()}, countdown=countdown)
Example #7
0
 def get(self):
   user = users.get_current_user()
   if not user:
     self.redirect(users.create_login_url("/joinreasonlist"))
   if users.is_current_user_admin():
     all_users = Membership.all().order("created").fetch(10000)
     self.response.out.write(self.render("templates/joinreasonlist.html", locals()))
   else:
     self.response.out.write("Need admin access")
Example #8
0
 def post(self):
   user = users.get_current_user()
   if not user:
       self.redirect(users.create_login_url('/key'))
       return
   account = Membership.all().filter('username ='******'templates/error.html', locals()))
         return
   is_park = self.request.get('ispark')
   if is_park == "True": #checks if user input is a parking pass number or an rfid number
     pass_to_add = self.request.get('parking_pass')
     try: #tests if there are only numbers in the parking pass
       float(pass_to_add)
     except ValueError:
       error = "<p>A Parking Pass may only contain numbers.</p><a href=\"/key\">Try Again</a>"
       self.response.out.write(render('templates/error.html', locals()))
       return
     account.parking_pass = pass_to_add
     db.put(account)
     self.response.out.write(render('templates/pass_ok.html', locals())) #outputs the parking number
   else:
     rfid_tag = self.request.get('rfid_tag').strip()
     description = self.request.get('description').strip()
     if rfid_tag.isdigit():
       if Membership.all().filter('rfid_tag =', rfid_tag).get():
         error = "<p>That RFID tag is in use by someone else.</p>"
         self.response.out.write(render('templates/error.html', locals()))
         return
       if not description:
         error = "<p>Please enter a reason why you are associating a replacement RFID key.  Please hit BACK and try again.</p>"
         self.response.out.write(render('templates/error.html', locals()))
         return
       account.rfid_tag = rfid_tag
       account.put()
       bc = BadgeChange(rfid_tag = rfid_tag, username=account.username, description=description)
       bc.put()
       self.response.out.write(render('templates/key_ok.html', locals()))
       return
     else:
       error = "<p>That RFID ID seemed invalid. Hit back and try again.</p>"
       self.response.out.write(render('templates/error.html', locals()))
       return
Example #9
0
 def get(self):
   user = users.get_current_user()
   if not user:
       self.redirect(users.create_login_url('/profile'))
       return
   else:
       account = Membership.all().filter('username ='******'%s@%s' % (account.username, APPS_DOMAIN)
       gravatar_url = "http://www.gravatar.com/avatar/" + hashlib.md5(email.lower()).hexdigest()          
       self.response.out.write(render('templates/profile.html', locals()))
Example #10
0
  def __batch_loop(self, cursor = None, *args, **kwargs):
    cursor = cursor
    while True:
      if (args == () and kwargs == {}):
        query = Membership.all()
      else:
        query = Membership.all().filter(*args, **kwargs)
      query.with_cursor(start_cursor = cursor)
      members = query.fetch(self.batch_size)

      if len(members) == 0:
        break
      for member in members:
        member = self.__strip_sensitive(member)
        self.__post_member(member)

      cursor = query.cursor()
      run_info = SyncRunInfo.all().get()
      run_info.cursor = cursor
      run_info.put()
Example #11
0
 def get(self):
   user = users.get_current_user()
   if not user:
     self.redirect(users.create_login_url("/userlist"))
   if users.is_current_user_admin():
     signup_users = Membership.all().fetch(10000)
     signup_users = sorted(signup_users, key=lambda user: user.last_name.lower())
     user_keys = [str(user.key()) for user in signup_users]
     user_ids = [user.key().id() for user in signup_users]
     self.response.out.write(self.render("templates/users.html", locals()))
   else:
     self.response.out.write("Need admin access")
Example #12
0
 def get(self):
   countdown = 0
   for membership in Membership.all().filter("status =", "suspended"):
     if (not membership.unsubscribe_reason and membership.spreedly_token \
         and "Deleted" not in membership.last_name and \
         membership.extra_dnd != True):
       # One e-mail every 90 seconds = 960 e-mails a day.
       countdown += 90
       self.response.out.write("Are you still there %s ?<br/>" % \
                               (membership.email))
       taskqueue.add(url="/tasks/areyoustillthere_mail",
           params={"user": membership.key().id()}, countdown=countdown)
Example #13
0
 def get(self):
   user = users.get_current_user()
   if not user:
     self.redirect(users.create_login_url('/debug_users'))
   if users.is_current_user_admin():
     if not self.request.get("from"):
       all_users = Membership.all()
       x = all_users.count()
       self.response.out.write("There are ")
       self.response.out.write(x)
       self.response.out.write(" user records.  Use GET params 'from' and 'to' to analyze.")
     else:
       fr = self.request.get("from")
       to = self.request.get("to")
       for i in range(int(fr),int(to)):
         a = Membership.all().fetch(1,i)[0]
         self.response.out.write("<p>")
         self.response.out.write(a.key().id())
         self.response.out.write(" - ")
         self.response.out.write(a.username)
   else:
     self.response.out.write("Need admin access")
Example #14
0
 def get(self):
   if self.request.get("id"):
     m = Membership.all().filter("rfid_tag ==", self.request.get("id")).filter("status =", "active").get()
     if self.request.get("callback"): # jsonp callback support
       self.response.out.write(self.request.get("callback")+"(");
     if m:
       email = "%s@%s" % (m.username, Config().APPS_DOMAIN)
       gravatar_url = "http://www.gravatar.com/avatar/" + hashlib.md5(email.lower()).hexdigest()
       self.response.out.write(json.dumps({"gravatar": gravatar_url,"auto_signin":m.auto_signin, "status" : m.status, "name" : m.first_name + " " + m.last_name, "rfid_tag" : m.rfid_tag, "username" : m.username }))
     else:
       self.response.out.write(json.dumps({}))
     if self.request.get("callback"):
       self.response.out.write(")");
   else:
     if self.request.get("maglock:key") == keymaster.get("maglock:key"):
       if self.request.get("machine"):
         members = Membership.all().filter("rfid_tag !=", None).filter("status =", "active").filter("extra_"+self.request.get("machine")+" =","True")
       else:
         members = Membership.all().filter("rfid_tag !=", None).filter("status =", "active")
       self.response.out.write(json.dumps([ {"rfid_tag" : m.rfid_tag, "username" : m.username } for m in members]))
     else:
       self.response.out.write("Access denied")
Example #15
0
    def get(self):
        user = users.get_current_user()
        conf = Config()
        message = escape(self.request.get("message"))
        if not user:
            self.redirect(users.create_login_url("/key"))
            return
        else:
            account = Membership.all().filter("username ="******"@")[0]).get()
            if not account or not account.spreedly_token:
                message = """<p>It appears that you have an account on @%(domain)s, but you do not have a corresponding account in the signup application.</p>
                <p>How to remedy:</p>
                <ol><li>If you <b>are not</b> in the Spreedly system yet, <a href=\"/\">sign up</a> now.</li>
                <li>If you <b>are</b> in Spreedly already, please contact <a href=\"mailto:%(signup_email)s?Subject=Spreedly+account+not+linked+to+account\">%(signup_email)s</a>.</li></ol>
                <pre>Nick: %(nick)s</pre>
                <pre>Email: %(email)s</pre>
                <pre>Account: %(account)s</pre>
                """ % {"domain": conf.APPS_DOMAIN,
                       "signup_email": conf.SIGNUP_HELP_EMAIL,
                       "nick": user.nickname().split("@")[0],
                       "email": user.email(), "account": account}
                if account:
                    message += "<pre>Token: %s</pre>" % account.spreedly_token

                internal = False
                self.response.out.write(self.render("templates/error.html", locals()))
                return
            if account.status != "active":
                url = "https://spreedly.com/"+conf.SPREEDLY_ACCOUNT+"/subscriber_accounts/" + account.spreedly_token
                message = """<p>Your Spreedly account status does not appear to me marked as active. This might be a mistake, in which case we apologize. </p>
                <p>To investigate your account, you may go here: <a href=\"%(url)s\">%(url)s</a> </p>
                <p>If you believe this message is in error, please contact <a href=\"mailto:%(signup_email)s?Subject=Spreedly+account+not+linked+to+account\">%(signup_email)s</a></p>
                """ % {"url": url, "signup_email": conf.SIGNUP_HELP_EMAIL}
                internal = False
                self.response.out.write(self.render("templates/error.html", locals()))
                return
            delta = datetime.datetime.utcnow() - account.created
            if delta.days < conf.DAYS_FOR_KEY:
                message = """<p>You have been a member for %(deltadays)s days.
                After %(days)s days you qualify for a key.  Check back in %(delta)s days!</p>
                <p>If you believe this message is in error, please contact <a href=\"mailto:%(signup_email)s?Subject=Membership+create+date+not+correct\">%(signup_email)s</a>.</p>
                """ % {"deltadays": delta.days, "days": conf.DAYS_FOR_KEY,
                       "delta": conf.DAYS_FOR_KEY - delta.days,
                       "signup_email": SIGNUP_HELP_EMAIL}
                internal = False
                self.response.out.write(self.render("templates/error.html", locals()))
                return
            bc = BadgeChange.all().filter("username ="******"templates/key.html", locals()))
Example #16
0
 def get(self):
   user = users.get_current_user()
   if not user:
     self.redirect(users.create_login_url("/api/gettwitter"))
   if users.is_current_user_admin():
     need_twitter_users = Membership.all().filter("status =", "active").fetch(10000)
     countdown = 0
     for u in need_twitter_users:
       if u.username and not u.twitter:
         self.response.out.write(u.username)
         taskqueue.add(url="/tasks/twitter_mail", params={"user": u.key().id()}, countdown=countdown)
         countdown += 1
   else:
     self.response.out.write("Need admin access")
Example #17
0
 def post(self):
    user = users.get_current_user()
    if not user:
        self.redirect(users.create_login_url('/pref'))
        return
    account = Membership.all().filter('username ='******'templates/error.html', locals()))
          return
    auto_signin = self.request.get('auto').strip()
    account.auto_signin = auto_signin
    account.put()
    self.response.out.write(render('templates/prefsaved.html', locals()))
Example #18
0
 def get(self):
   user = users.get_current_user()
   if not user:
     self.redirect(users.create_login_url('/hardshiplist'))
   if users.is_current_user_admin():
     active_users = Membership.all().filter('status =', 'active').filter('plan =', 'hardship').fetch(10000)
     active_users = sorted(active_users, key=lambda user: user.created) 
     subject = "About your Hacker Dojo membership"
     body1 = "\n\nWe hope you have enjoyed your discounted membership at Hacker Dojo.  As you\nknow, we created the hardship program to give temporary financial support to help\nmembers get started at the Dojo.  Our records show you began the program\non "
     body2 = ", and we hope you feel that you have benefited.\n\nBeginning with your next month's term, we ask that you please sign up at\nour regular rate:\n"
     body3 = "\n\nThank you for supporting the Dojo!"
     self.response.out.write(render('templates/hardship.html', locals()))
   else:
     self.response.out.write("Need admin access")
Example #19
0
 def get(self):
     active_users = Membership.all().filter("status =", "active").filter("plan =", "hardship").fetch(10000)
     active_users = sorted(active_users, key=lambda user: user.created)
     subject = "About your Hacker Dojo membership"
     body1 = "\n\nWe hope you have enjoyed your discounted membership at \
           Hacker Dojo.  As you\nknow, we created the hardship program \
           to give temporary financial support to help\nmembers get \
           started at the Dojo. Our records show you began the program\n \
           on"
     body2 = ", and we hope you feel that you have benefited.\n\nBeginning \
           with your next month's term, we ask that you please sign up \
           at\nour regular rate:\n"
     body3 = "\n\nThank you for supporting the Dojo!"
     self.response.out.write(self.render("templates/hardship.html", locals()))
Example #20
0
 def post(self):
    user = users.get_current_user()
    if not user:
        self.redirect(users.create_login_url("/pref"))
        return
    account = Membership.all().filter("username ="******"@")[0]).get()
    if not account:
          message = "Error #1983, which should never happen."
          internal = True
          self.response.out.write(self.render("templates/error.html", locals()))
          return
    auto_signin = self.request.get("auto").strip()
    account.auto_signin = auto_signin
    account.put()
    self.response.out.write(self.render("templates/prefsaved.html", locals()))
Example #21
0
 def post(self):
     email = self.request.get("email").lower()
     if not email:
         self.redirect(str(self.request.path))
     else:
         member = Membership.all().filter("email =", email).filter("status =", "active").get()
         if not member:
             self.redirect(str(self.request.path + "?message=There is no active record of that email."))
         else:
             mail.send_mail(sender=Config().EMAIL_FROM,
                 to="%s <%s>" % (member.full_name(), member.email),
                 subject="Create your Hacker Dojo account",
                 body="""Hello,\n\nHere"s a link to create your Hacker Dojo account:\n\nhttp://%s/account/%s""" % (self.request.host, member.hash))
             sent = True
             self.response.out.write(self.render("templates/needaccount.html", locals()))
Example #22
0
 def get(self):
     suspended_users = (
         Membership.all().filter("status =", "suspended").filter("last_name !=", "Deleted").fetch(10000)
     )
     tokened_users = []
     for user in suspended_users:
         if user.spreedly_token:
             tokened_users.append(user)
     suspended_users = sorted(tokened_users, key=lambda user: user.last_name.lower())
     total = len(suspended_users)
     reasonable = 0
     for user in suspended_users:
         if user.unsubscribe_reason:
             reasonable += 1
     self.response.out.write(self.render("templates/suspended.html", locals()))
Example #23
0
    def get(self):
      user = users.get_current_user()
      c = Config()
      account = Membership.all().filter('username ='******'/modify'))
          return
      else:
          if not account or not account.spreedly_token:
            error = """<p>Sorry, your %(name)s account does not appear to be linked to a Spreedly account.  
Please contact <a href=\"mailto:%(treasurer)s\">%(treasurer)s</a> so they can manually update your account.
""" % {'treasurer': TREASURER_EMAIL, 'name': ORG_NAME}
            self.response.out.write(render('templates/error.html', locals()))
            return
          url = "https://spreedly.com/"+c.SPREEDLY_ACCOUNT+"/subscriber_accounts/"+account.spreedly_token
          self.redirect(str(url))
Example #24
0
 def get(self):
   self.response.headers["Content-type"] = "text/csv; charset=utf-8"
   self.response.headers["Content-disposition"] = "attachment;filename=HackerDojoMembers.csv"
   if keymaster.get("csvkey") == self.request.get("csvkey"):
     users = Membership.all().filter("status =", "active").filter("username !=", "").fetch(10000)
     for u in users:
       twitter = ""
       if u.twitter:
         twitter = u.twitter
       first = ""
       if u.first_name:
         first = u.first_name
       last = ""
       if u.last_name:
         last = u.last_name
       if u.username:
         self.response.out.write(first+","+last+","+u.username+"@hackerdojo.com,"+twitter+"\r\n")
Example #25
0
 def get(self):
    user = users.get_current_user()
    if not user:
        self.redirect(users.create_login_url('/pref'))
        return
    else:
        account = Membership.all().filter('username ='******'t find your account.</p>"
          error += "<pre>Nick: "+str(user.nickname().split("@")[0])
          error += "<pre>Email: "+str(user.email())
          error += "<pre>Account: "+str(account)
          if account:
            error += "<pre>Token: "+str(account.spreedly_token)
          self.response.out.write(render('templates/error.html', locals()))
          return
        auto_signin = account.auto_signin
        self.response.out.write(render('templates/pref.html', locals()))
Example #26
0
    def get(self):
        active_users = Membership.all().filter("status =", "active").filter(
            "plan =", "hardship").fetch(10000)
        active_users = sorted(active_users, key=lambda user: user.created)
        subject = "About your Hacker Dojo membership"
        body1 = "\n\nWe hope you have enjoyed your discounted membership at \
              Hacker Dojo.  As you\nknow, we created the hardship program \
              to give temporary financial support to help\nmembers get \
              started at the Dojo. Our records show you began the program\n \
              on"

        body2 = ", and we hope you feel that you have benefited.\n\nBeginning \
              with your next month's term, we ask that you please sign up \
              at\nour regular rate:\n"

        body3 = "\n\nThank you for supporting the Dojo!"
        self.response.out.write(
            self.render("templates/hardship.html", locals()))
Example #27
0
 def get(self):
     suspended_users = Membership.all().filter("status =",
                                               "suspended").filter(
                                                   "last_name !=",
                                                   "Deleted").fetch(10000)
     tokened_users = []
     for user in suspended_users:
         if user.spreedly_token:
             tokened_users.append(user)
     suspended_users = sorted(tokened_users,
                              key=lambda user: user.last_name.lower())
     total = len(suspended_users)
     reasonable = 0
     for user in suspended_users:
         if user.unsubscribe_reason:
             reasonable += 1
     self.response.out.write(
         self.render("templates/suspended.html", locals()))
Example #28
0
    def get(self):
      user = users.get_current_user()
      account = Membership.all().filter("username ="******"@")[0]).get()
      if not account:
          self.redirect(users.create_login_url("/modify"))
          return
      else:
          if not account or not account.spreedly_token:
            message = """<p>Sorry, your %(name)s account does not appear to be linked to a Spreedly account.
Please contact <a href=\"mailto:%(treasurer)s\">%(treasurer)s</a> so they can manually update your account.
""" % {"treasurer": TREASURER_EMAIL, "name": ORG_NAME}
            internal = False
            self.response.out.write(self.render("templates/error.html", locals()))
            return
          url = \
              "https://spreedly.com/%s/subscriber_accounts/%s" % \
              (Config().SPREEDLY_ACCOUNT, account.spreedly_token)
          self.redirect(str(url))
Example #29
0
 def get(self):
    user = users.get_current_user()
    if not user:
        self.redirect(users.create_login_url("/pref"))
        return
    else:
        account = Membership.all().filter("username ="******"@")[0]).get()
        if not account:
          message = "<p>Error - couldn't find your account.</p>"
          message += "<pre>Nick: "+str(user.nickname().split("@")[0])
          message += "<pre>Email: "+str(user.email())
          message += "<pre>Account: "+str(account)
          if account:
            message += "<pre>Token: "+str(account.spreedly_token)
          internal = False
          self.response.out.write(self.render("templates/error.html", locals()))
          return
        auto_signin = account.auto_signin
        self.response.out.write(self.render("templates/pref.html", locals()))
Example #30
0
 def get(self):
   user = users.get_current_user()
   if not user:
     self.redirect(users.create_login_url("/suspended"))
   if users.is_current_user_admin():
     suspended_users = Membership.all().filter("status =", "suspended").filter("last_name !=", "Deleted").fetch(10000)
     tokened_users = []
     for user in suspended_users:
         if user.spreedly_token:
             tokened_users.append(user)
     suspended_users = sorted(tokened_users, key=lambda user: user.last_name.lower())
     total = len(suspended_users)
     reasonable = 0
     for user in suspended_users:
         if user.unsubscribe_reason:
             reasonable += 1
     self.response.out.write(self.render("templates/suspended.html", locals()))
   else:
     self.response.out.write("Need admin access")
Example #31
0
 def get(self):
   user = users.get_current_user()
   if not user:
     self.redirect(users.create_login_url("/api/setextra"))
   if users.is_current_user_admin():
     user = Membership.all().filter("username ="******"username")).get()
     if user:
       v = self.request.get("value")
       if v=="True":
           v = True
       if v=="False":
           v = False
       user.__setattr__("extra_"+self.request.get("key"), v)
       user.put()
       self.response.out.write("OK")
     else:
       self.response.out.write("User not found")
   else:
     self.response.out.write("Need admin access")
Example #32
0
    def get(self):
      user = users.get_current_user()
      if not user:
        self.redirect(users.create_login_url('/userlist'))
      if users.is_current_user_admin():
        signup_users = Membership.all().fetch(10000)
#        active_users = Membership.all().filter('status =', 'active').fetch(10000)
#        signup_usernames = [m.username for m in signup_users]
#        domain_usernames = fetch_usernames()
#        signup_usernames = set(signup_usernames) - set([None])
#        signup_usernames = [m.lower() for m in signup_usernames]
#        active_usernames = [m.username for m in active_users]
#        active_usernames = set(active_usernames) - set([None])
#        active_usernames = [m.lower() for m in active_usernames]
#        users_not_on_domain = set(signup_usernames) - set(domain_usernames)
#        users_not_on_signup = set(domain_usernames) - set(active_usernames)
        signup_users = sorted(signup_users, key=lambda user: user.last_name.lower())
        self.response.out.write(render('templates/users.html', locals()))
      else:
        self.response.out.write("Need admin access")
Example #33
0
 def post(self):
     email = self.request.get("email").lower()
     if not email:
         self.redirect(str(self.request.path))
     else:
         member = Membership.all().filter("email =", email).filter(
             "status =", "active").get()
         if not member:
             self.redirect(
                 str(self.request.path +
                     "?message=There is no active record of that email."))
         else:
             mail.send_mail(
                 sender=Config().EMAIL_FROM,
                 to="%s <%s>" % (member.full_name(), member.email),
                 subject="Create your Hacker Dojo account",
                 body=
                 """Hello,\n\nHere"s a link to create your Hacker Dojo account:\n\nhttp://%s/account/%s"""
                 % (self.request.host, member.hash))
             sent = True
             self.response.out.write(
                 self.render("templates/needaccount.html", locals()))
Example #34
0
    def get(self):
        if self.request.get("maglock:key") != keymaster.get("maglock:key"):
            self.response.out.write("Access denied")
        else:
            rfid_tag = self.request.get("rfid_tag")
            if rfid_tag:
                m = Membership.all().filter("rfid_tag ==", rfid_tag).get()
                if m:
                  username = m.username
                  if "active" in m.status:
                     success = True
                  else:
                     success = False
                     subject = "Reactivate your RFID key now - renew your Hacker Dojo Subscription!"
                     body = """
Hi %s,

It looks like you just tried using your RFID key to open the doors to Hacker Dojo.

One teeny tiny issue, it looks like your membership has lapsed!  This can happen by mistake sometimes, so no worries at all.  The good news is you can reactivate your membership with only a few clicks:

%s

With warmest regards,
The Lobby Door
""" % (m.first_name,m.subscribe_url())
                     deferred.defer(mail.send_mail, sender="Maglock <*****@*****.**>", to=m.email,
                     subject=subject, body=body, _queue="emailthrottle")
                else:
                  username = "******"+rfid_tag+")"
                  success = False
                rs = RFIDSwipe(username=username, rfid_tag=rfid_tag, success=success)
                rs.put()
                if "mark.hutsell" in username or "some.other.evilguy" in username:
                  deferred.defer(mail.send_mail, sender="Maglock <*****@*****.**>", to="Emergency Paging System <*****@*****.**>",
                     subject="RFID Entry: " + username, body="Lobby entry", _queue="emailthrottle")
                  urlfetch.fetch("http://www.dustball.com/call/call.php?str=RFID+Entry+"+username)
            self.response.out.write("OK")
Example #35
0
    def post(self):
        user = users.get_current_user()
        if not user:
            self.redirect(users.create_login_url("/key"))
            return
        account = Membership.all().filter("username ="******"@")[0]).get()
        if not account or not account.spreedly_token or account.status != "active":
            message = "Error #1982, which should never happen."
            internal = True
            self.response.out.write(
                self.render("templates/error.html", locals()))
            return
        is_park = self.request.get("ispark")
        if is_park == "True":  #checks if user input is a parking pass number or an rfid number
            pass_to_add = self.request.get("parking_pass")
            try:  #tests if there are only numbers in the parking pass
                float(pass_to_add)
            except ValueError:
                message = "<p>A Parking Pass may only contain numbers.</p><a href=\"/key\">Try Again</a>"
                internal = False
                self.response.out.write(
                    self.render("templates/error.html", locals()))
                return
            account.parking_pass = pass_to_add

            logging.debug("Setting parking pass for %s to %s." % \
                          (account.full_name(), account.parking_pass))

            db.put(account)
            self.response.out.write(
                self.render("templates/pass_ok.html",
                            locals()))  #outputs the parking number
        else:
            rfid_tag = self.request.get("rfid_tag").strip()
            description = self.request.get("description").strip()
            if rfid_tag.isdigit():
                if Membership.all().filter("rfid_tag =", rfid_tag).get():
                    message = "<p>That RFID tag is in use by someone else.</p>"
                    internal = False
                    self.response.out.write(
                        self.render("templates/error.html", locals()))
                    return
                if not description:
                    message = "<p>Please enter a reason why you are associating a replacement RFID key.  Please hit BACK and try again.</p>"
                    internal = False
                    self.response.out.write(
                        self.render("templates/error.html", locals()))
                    return
                account.rfid_tag = rfid_tag

                logging.debug("Setting RFID for %s to %s." %
                              (account.full_name(), account.rfid_tag))

                account.put()
                bc = BadgeChange(rfid_tag=rfid_tag,
                                 username=account.username,
                                 description=description)
                bc.put()
                self.response.out.write(
                    self.render("templates/key_ok.html", locals()))
                return
            else:
                message = "<p>That RFID ID seemed invalid. Hit back and try again.</p>"
                internal = False
                self.response.out.write(
                    self.render("templates/error.html", locals()))
                return