def post(self, dj_key): dj = Dj.get(dj_key) if (dj is None) or (self.request.get("submit") != "Edit DJ" and self.request.get("submit") != "Delete DJ"): self.session.add_flash( "There was an error processing your request. Please try again.") elif self.request.get("submit") == "Edit DJ": fullname = self.request.get("fullname") email = self.request.get("email") username = self.request.get("username") password = self.request.get("password") if password is not None: if not password == self.request.get("confirm"): self.session.add_flash("New passwords do not match.") self.redirect("/dj/djs") return # Edit the dj dj = Dj.put(fullname=fullname, email=email, username=username, password=password,) self.session.add_flash(fullname + " has been successfully edited.") elif self.request.get("submit") == "Delete DJ": dj.delete() self.session.add_flash(fullname + " has been successfully deleted.") self.redirect("/dj/djs/")
def create_a_dj(): """ Create a new dj.""" is_json = request.get_json(silent=True) if is_json is None: abort(400, "Not a JSON") if 'email' not in is_json: abort(400, 'Missing email') if 'password' not in is_json: abort(400, 'Missing password') new_dj = Dj(**is_json) new_dj.save() return jsonify(new_dj.to_dict()), 201
def post(self): if self.request.get("submit") != "Register": self.session.add_flash( "There was an error processing your request. Please try again.", level="error") self.redirect(")/signup?token=%s"%token) return elif self.request.get("submit") == "Register": token_str = self.request.get("token") fullname = self.request.get("fullname") email = self.request.get("email") username = self.request.get("username") password = self.request.get("password") # Assert that the DJ Registration code is valid and available token = DjRegistrationToken.get(token_str) if not token: self.session.add_flash( "The secret registration token you have entered is either " "invalid, or has already been used up. Double check that " "it is correct. If it is not, <a>contact Ruben</a>.", level="error") self.redirect("/signup?token=%s"%token_str) return required_fields = [fullname, email, username, password] if "" in [field.strip() for field in required_fields]: self.session.add_flash("None of the fields may be empty") self.redirect("/signup?token=%s"%token_str) return if password is not None and password != self.request.get("confirm"): self.session.add_flash("Passwords do not match.") self.redirect("/signup?token=%s"%token_str) return dj = Dj(fullname=fullname, email=email, username=username, password=password) # Putting the DJ with the token will transactionally update the token dj.put(token=token) self.session.add_flash("%s, you have successfully registered as a DJ." "You may now log in" % dj.fullname, level="success") self.redirect("/")
def post(self): dj_key = ndb.Key(urlsafe=self.request.get("dj_key")) dj = Dj.get(dj_key) if not dj: self.session.add_flash( "An error occurred processing your request. Please try again.") self.redirect("/dj/myself") return dj.fullname = self.request.get("fullname") email = self.request.get("email") if email[-1] == "@": email += "bowdoin.edu" if "@" not in email: email += "@bowdoin.edu" duplicate_dj_key = Dj.get_key_by_email(email) if duplicate_dj_key and duplicate_dj_key != dj.key: error = True self.session.add_flash( "The email specified is already in use by another DJ. " "Please enter a unique one.") dj.email = email username = self.request.get("username") duplicate_dj_key = Dj.get_key_by_username() if duplicate_dj_key and duplicate_dj_key != dj.key: error = True self.session.add_flash( "The username specified is already in use by another DJ. " "Please choose another.") dj.username = username if error: self.redirect("/dj/myself") return if self.request.get("password"): if not self.request.get("password") == self.request.get("confirm"): self.session.add_flash("New passwords do not match.") self.redirect("/dj/myself") return else: dj.password = self.request.get("password") dj.put() self.session.add_flash("You have successfully updated your profile.") self.redirect("/dj/")
def get(self): # If we have a reset_key, then try to reset the password. reset_key = self.request.get("reset_key") if reset_key: username = self.request.get("username") try: reset_dj = Dj.recovery_login(username, reset_key) except NoSuchUsername: self.session.add_flash("There is no user by that name") self.redirect("/dj/reset/") return except InvalidLogin: self.flash = ("This request is no longer valid, or the key provided" "is somehow corrupt. If clicking the link in your email" "does not work again, perhaps request a new reset.") self.redirect("/dj/reset") return self.set_session_user(reset_dj) program_list = Program.get_by_dj(dj=reset_dj) if not program_list: self.session.add_flash( "You have been temporarily logged in. Please change your" "password so that you may log in in the future!") self.session.add_flash( "You will not be able to do much until you have a" "program. If you see this message, please email" "<a href='mailto:[email protected]'>Connor</a>" "immediately.") self.redirect('/dj/myself') return elif len(program_list) == 1: self.set_session_program(program_list[0]) self.session.add_flash( "You have been temporarily logged in. Please change your password so " "that you may log in in the future!") self.session.add_flash( "Logged in with program %s"%program_list[0].title) self.redirect("/dj/myself") return else: self.session.add_flash( "You have been temporarily logged in. Please change your password so " "that you may log in in the future!") self.redirect("/dj/myself") return else: if self.session_has_login(): self.redirect("/dj/") return template_values = { 'session': self.session, 'flash': self.flashes, } self.response.out.write( template.render(get_path("dj_reset_password.html"), template_values))
def get(self): q = self.request.get("query") djs = Dj.autocomplete(q) self.response.out.write(json.dumps({ 'query': q, 'suggestions': ["%s - %s"%(dj.fullname, dj.email) for dj in djs], 'data': [{'key': dj.key.urlsafe(), 'name': dj.fullname, 'email': dj.email} for dj in djs],}))
def get(self): dj = Dj.get(self.dj_key) template_values = { 'session': self.session, 'flash': self.flashes, 'dj': dj, 'posts': BlogPost.get_last(1), } self.response.out.write( template.render(get_path("dj_self.html"), template_values))
def get(self): permissions = Permission.get_all() template_values = { 'permissions': [{ 'key': p.key, 'title': p.title, 'dj_list': [Dj.get(d) for d in p.dj_list], } for p in permissions], 'session': self.session, 'flash': self.flashes, 'posts': BlogPost.get_last(num=2), } self.response.out.write( template.render(get_path("dj_permissions.html"), template_values))
def post(self): if self.request.get("submit") != "Request Reset": self.session.add_flash("There was an error, please try again") self.redirect("/dj/reset/") return # Check that the user exists and information is valid username = self.request.get("username") email = self.request.get("email") reset_dj = None try: reset_dj = Dj.get_by_username(username) except NoSuchUsername as e: self.session.add_flash(str(e)) self.redirect("/dj/reset") return if not reset_dj.email_matches(email): self.session.add_flash( "The email you have entered does not match our records. " "Check, and try, again.") # Generate a key to be sent to the user and add the # new password request to the database reset_key = ''.join(random.choice(string.ascii_letters + string.digits) for x in range(20)) reset_url="%s/dj/reset/?username=%s&reset_key=%s"%( self.request.host_url, username, reset_dj.reset_password()) mail.send_mail( sender="WBOR <*****@*****.**>", to=email.strip(), subject="You've requested to reset your password!", body=""" Hello! Someone has requested to reset your password for wbor.org. In order to do so, please click on the following link or paste it into your address bar: %s If you were not who requested this password reset, then please just ignore this email. Thank you! The WBOR.org Team """%reset_url) self.session.add_flash( "Request successfully sent! Check your mail, and be sure to doublecheck " "the spam folder in case.") self.redirect("/")
def get(self, slug): program = Program.get_by_slug(slug) if not program: self.session.add_flash("Invalid program slug specified.") self.redirect("/") return template_values = { 'session': self.session, 'flash': self.flashes, 'program': program, 'djs' : tuple(Dj.get(program.dj_list) if program.dj_list else None), } self.response.out.write( template.render(get_path("show.html"), template_values))
def get(self, program_key): program = Program.get(program_key) if not program: self.session.add_flash( "Unable to find program (" + program_key + "). Please try again.") self.redirect("/dj/programs/") else: new_programs = Program.get(num=5) template_values = { 'program_djs': [Dj.get(dj) for dj in program.dj_list], 'program': program, 'session': self.session, 'flash': self.flashes, 'new_programs': new_programs } self.response.out.write( template.render(get_path("dj_manage_programs.html"), template_values))
def get(self, slug): program = models.getProgramBySlug(slug) posts = models.getLastPosts(1) if not program: self.session.add_flash("Invalid program slug specified.") self.redirect("/") return template_values = { 'session': self.session, 'flash': self.flashes, 'program': program, 'djs' : (tuple(Dj.get(dj) for dj in program.dj_list) if program.dj_list else None), 'posts': posts, } self.response.out.write( template.render(get_path("show.html"), template_values))
def post(self): self.response.headers['Content-Type'] = 'text/json' dj_key = self.request.get("dj_key") dj = Dj.get(dj_key) errors = ""; if not dj: errors = "Unable to find DJ. " permission_key = self.request.get("permission_key") permission = Permission.get(keys=permission_key) if not permission: errors = "Unable to find permission." if errors: self.response.out.write(json.dumps({ 'err': errors, })) return action = self.request.get("action") if action == "add": if permission.has_dj(dj): errors = ("%s is already in the %s permission list."% (dj.fullname, permission.title)) else: permission.add_dj(dj) status = ("Successfully added %s to %s permission list."% (dj.fullname, permission.title)) if action == "remove": if dj.key not in permission.dj_list: errors = (dj.fullname + " was not in the " + permission.title + " permission list.") else: permission.remove_dj(dj.key) status = ("Successfully removed " + dj.fullname + " from " + permission.title + " permission list.") if errors: self.response.out.write(json.dumps({ 'err': errors, })) else: permission.put() self.response.out.write(json.dumps({ 'err': '', 'msg': status }))
def get(self, dj_key): dj = Dj.get(dj_key) # TODO: CRITICAL: CRITICAL: Don't show every goddamn DJ dj_list = [] # Seriously screw this crap #dj_list = cache.getAllDjs() if not dj: self.session.add_flash( "The DJ specified (" + dj_key + ") does not exist. Please try again.") self.redirect("/dj/djs/") else: template_values = { 'dj_list': dj_list, 'dj': dj, 'session': self.session, 'flash': self.flashes, 'posts': BlogPost.get_last(num=3), } self.response.out.write( template.render(get_path("dj_manage_djs.html"), template_values))
def post(self): username = self.request.get("username") password = self.request.get("password") # Try to log in. try: dj = Dj.login(username, password) except NoSuchUsername: self.flash = "Invalid username. Please try again." self.redirect('/dj/login/') return except InvalidLogin: self.flash = "Invalid username/password combination. Please try again." self.redirect('/dj/login/') return self.user = dj program_list = Program.get_by_dj(dj=dj, num=10) if not program_list: self.flash = ("You have successfully logged in," "but you have no associated programs." "You will not be able to do much until" "you have a program. If you see this message," "please email <a href='mailto:[email protected]'>" "Connor</a> immediately.") self.redirect('/dj/') return elif len(program_list) == 1: self.program = program_list[0] self.flash = ("Successfully logged in with program %s."% program_list[0].title) self.redirect("/dj/") return else: self.redirect("/dj/selectprogram/") return
def get(self): q = self.request.get("query") djs = Dj.autocomplete(q) self.response.out.write(json.dumps({ 'query': q, 'data': [dj.to_json() for dj in djs],}))
def post(self): if self.request.get("submit") != "Add DJ": self.session.add_flash("There was an error, please try again.") self.redirect("/dj/djs/") else: fullname = self.request.get("fullname") email = self.request.get("email") username = self.request.get("username") password = self.request.get("password") if not email: self.session.add_flash("Please enter a valid email address.") self.redirect("/dj/djs") return if not username: self.session.add_flash("Please enter a valid username.") self.redirect("/dj/djs") return if not fullname: self.session.add_flash("Please enter a valid full name.") self.redirect("/dj/djs") return if not password: self.session.add_flash("Please enter a valid password.") self.redirect("/dj/djs") return if not password == self.request.get("confirm"): self.session.add_flash("Passwords do not match.") self.redirect("/dj/djs") return try: dj = Dj.get_by_email(email) except NoSuchEmail: dj = None if dj is not None: self.session.add_flash( "A DJ with email address %s already exists: %s, username %s" % (dj.email, dj.fullname, dj.username)) self.redirect("/dj/djs") return try: dj = Dj.get_by_username(username) except NoSuchUsername: dj = None if dj is not None: self.session.add_flash( "A DJ with username %s already exists: %s, email address %s" % (dj.username, dj.fullname, dj.email)) self.redirect("/dj/djs") return # If both username and email address are new, then we can add them dj = Dj.new(fullname=fullname, email=email, username=username, password=password) dj.put() self.session.add_flash(dj.fullname + " successfully added as a DJ.") self.redirect("/dj/djs/")
def get(self): labels = Permission.PERMISSIONS try: seth = Dj.get_by_email("*****@*****.**") except NoSuchEntry: seth = Dj.new(fullname='Seth Glickman', email='*****@*****.**', username='******', password='******') seth.put() hchaps = Dj.new(fullname='Harrison Chapman', email="*****@*****.**", username="******", password="******") program = Program.new( title='Seth\'s Show', slug='seth', desc='This is the show where Seth plays his favorite music.', dj_list=[seth.key], page_html='a <b>BOLD</b> show!') program.put() for l in labels: try: permission = Permission.get_by_title(l) except NoSuchEntry: permission = Permission.new(l, []) permission.put() finally: if seth.key not in permission.dj_list: permission.add_dj(seth.key) permission.put() if not BlogPost.get_last(num=3): post1 = BlogPost.new( title="Blog's first post!", text="This is really just filler text on the first post.", slug="first-post", post_date=datetime.datetime.now()) post1.put() time.sleep(2) post2 = BlogPost.new( title="Blog's second post!", text="More filler text, alas.", slug="second-post", post_date=datetime.datetime.now()) post2.put() contactspage = BlogPost.new( title="Contacts Page", text="This is a dummy stub for the contacts page. Lorem ipsum whatnot", slug="contacts-page", post_date=datetime.datetime.now()) contactspage.put() artists = [ "Bear In Heaven", "Beck", "Arcade Fire", "Andrew Bird", "The Antlers", "Arcade Fire", "The Beach Boys", "Brian Wilson", "The Beatles", "Beethoven", "Beirut", "Belle & Sebastian", "Benji Hughes", "Club 8", "Crayon Fields", ] for a in artists: if not (ArtistName._RAW.query() .filter(ArtistName._RAW.artist_name == a) .fetch(1, keys_only=True)): ar = ArtistName.new(artist_name=a) ar.put() self.session.add_flash("Permissions set up, ArtistNames set up, " "Blog posts set up, DJ Seth entered.") self.redirect('/')
def test_dj_management(self): # Add some Djs names = file("./names") name_pairs = [(name.strip(), (name[0] + name.split()[1]).lower().strip()) for name in names] seen_unames = set() for name, uname in name_pairs: req = Request.blank('/dj/djs/', POST={ 'username': uname, 'fullname': name, 'email': uname, 'password': "******", 'confirm': "wbor", 'submit': "Add DJ"}) req.headers['Cookie'] = self.cookies.output() req.method = 'POST' res, ses, flash = get_response(req, app=dj_app) if uname in seen_unames: self.assertNotEqual(u"success", flash[0][1]) else: self.assertEqual(u"success", flash[0][1]) seen_unames.add(uname) self.set_cookie(res) # Run some searches on Djs name, uname = name_pairs[1] fname = name.split()[0] djkey = Dj.get_key_by_username(uname) for i in range(len(fname)): req = Request.blank('/ajax/djcomplete?query=%s'%fname[:i+1]) res, ses, flash = get_response(req, app=main_app) found = json.loads(res.body) res_keys = [data['key'] for data in found['data']] self.assertIn(djkey.urlsafe(), res_keys) # Run some searches on Djs. Guy should NOT show up name = "Guy Fieri" fname = name.split()[0] for i in range(len(fname)): req = Request.blank('/ajax/djcomplete?query=%s'%fname[:i+1]) res, ses, flash = get_response(req, app=main_app) found = json.loads(res.body) res_keys = [data['key'] for data in found['data']] self.assertNotIn(djkey.urlsafe(), res_keys) # Modify this guy so that his name is different req = Request.blank('/dj/djs/%s'%djkey.urlsafe(), POST={ 'username': "******", 'fullname': "Guy Fieri", 'email': "guyguy", 'submit': "Edit DJ"}) req.headers['Cookie'] = self.cookies.output() req.method = 'POST' res, ses, flash = get_response(req, app=dj_app) print flash self.assertEqual(u"success", flash[0][1]) self.set_cookie(res) # Run some searches on Djs. Our changed guy shouldn't be here. name, uname = name_pairs[1] fname = name.split()[0] for i in range(len(fname)): req = Request.blank('/ajax/djcomplete?query=%s'%fname[:i+1]) res, ses, flash = get_response(req, app=main_app) found = json.loads(res.body) res_keys = [data['key'] for data in found['data']] self.assertNotIn(djkey.urlsafe(), res_keys) # Run some searches on Djs. Guy should show up name, uname = "Guy Fieri", "gfieri" fname = name.split()[0] for i in range(len(fname)): req = Request.blank('/ajax/djcomplete?query=%s'%fname[:i+1]) res, ses, flash = get_response(req, app=main_app) found = json.loads(res.body) res_keys = [data['key'] for data in found['data']] self.assertIn(djkey.urlsafe(), res_keys)