def render_henkilolista(self): henkilolista = "<ul class=\"henkilolista\">\n" for id in Henkilo.load_ids(): henkilo = Henkilo.load_from_database(id) henkilolista += "<li class=\"henkilolista\"><a href=\"%s/%d\">%s</a></li>\n" % (self.conf['request_uri'], henkilo.henkilo_id, cgi.escape(henkilo.nimi)) henkilolista += "</ul>\n" return henkilolista
def handle_newuser(self): henkilon_nimi_input = self.form.getvalue("henkilon_nimi") tunnus_input = self.form.getvalue("tunnus") salasana1_input = self.form.getvalue("salasana1") salasana2_input = self.form.getvalue("salasana2") if (henkilon_nimi_input is None or tunnus_input is None or salasana1_input is None or salasana2_input is None): self.parameters = { 'status': '<p class="status">Ole hyvä ja täytä kaikki kentät!</p>' } return 'missing_newuser_input' # # Siivoa tekstimuotoiset parameterit. Nimissä ja tunnuksissa # ei sallita mitään tageja. # parser = CommentHTMLParser(ok_tags=[]) henkilon_nimi = parser.parse_string(henkilon_nimi_input) tunnus = parser.parse_string(tunnus_input) if salasana1_input != salasana2_input: return 'password_mismatch' henkilo_ids = Henkilo.load_ids(tunnus=tunnus) # blääh henkilo_id = None for i in henkilo_ids: henkilo_id = i break henkilo = None if henkilo_id is not None: henkilo = Henkilo.load_from_database(henkilo_id) if henkilo is not None: self.parameters = { 'status': '<p class="status">Tunnus "%s" on jo käytössä!</p>' % (tunnus) } return 'username_exists' # # Tehdään salasanasta hajautussumma. # salasana_hash = salasana.hash_password(salasana1_input) # # Tallennetaan henkilo tietokantaan # henkilo = Henkilo.new(nimi=henkilon_nimi, tunnus=tunnus, salasana=salasana_hash, omistajaa=None) # # Luo uusi istunto saman tien. # self.create_new_session(henkilo_id=henkilo.henkilo_id) self.parameters = { 'status': '<p class="status">Tunnus luotu, tervetuloa %s!</p>' % (tunnus) } return 'welcome'
def get(self): if self.henkilo_id is not None: henkilo = Henkilo.load_from_database(self.henkilo_id) # # Älä näytä rajoituksia kirjautumattomille käyttäjille # yksilönsuojasyistä. # self.render_restriction_list() lisaalomake = '' if self.authorized(): lisaalomake = """\ <form class="cmxform" action="%s/rajoitus" method="post"> <fieldset> <legend>Lisää rajoitus:</legend> <ol> <li> <label for="ruokaaine_id">Ruoka-aine</label> <select name="ruokaaine_id" id="ruokaaine_id" autofocus> %s </select> </li> <li> <label for="rajoitus">Rajoitus</label> <input type="text" name="rajoitus"/> </li> <li> <input type="submit" value="Lisää" /> </li> </ol> </fieldset> </form> """ % (self.conf['full_path'], self.create_ruokaaine_optiot()) self.parameters.update({ 'lisaalomake': lisaalomake }) kuva_link = '' for kommentti in henkilo.kommentit: kuva_link += "<img src=\"%s/../../kuva/%d\" alt=\"%s\" />\n" % ( self.conf['request_uri'], kommentti.kommentti_id, cgi.escape(kommentti.teksti)) self.parameters.update({ 'nimi': henkilo.nimi, 'henkilo_id': henkilo.henkilo_id, 'tunnus': henkilo.tunnus, 'kuva': kuva_link, }) else: henkilolista = self.render_henkilolista() self.parameters.update({ 'henkilolista': henkilolista, 'status': '' }) self.headers.append('Content-Type: text/html; charset=UTF-8') return [ self.headers, self.parameters ]
def post(self): nimi = self.form.getvalue("nimi") henkilo = Henkilo.new(nimi=nimi) henkilolista = self.render_henkilolista() self.redirect_after_post("%s?inserted=%d" % (self.conf['full_path'], henkilo.henkilo_id)) return [ self.headers, self.parameters ]
def render_kohdeinfo(self, resepti): luotu = resepti.luotu.strftime("%d.%m.%y %H:%M") tunnus = '<span class="tuntematon">tuntematon</span>' if resepti.omistaja is not None: omistaja = Henkilo.load_from_database(resepti.omistaja) tunnus = omistaja.tunnus kohdeinfo = """%s<br />%s""" % (tunnus, luotu) self.parameters.update({ 'kohdeinfo': kohdeinfo })
def handle_login(self): tunnus_input = self.form.getvalue("tunnus") salasana_input = self.form.getvalue("salasana") if tunnus_input is None or salasana_input is None: self.parameters = { 'status': '<p class="status"></p>' } return 'missing_input' henkilo_ids = Henkilo.load_ids(tunnus=tunnus_input) # blääh henkilo_id = None for i in henkilo_ids: henkilo_id = i break henkilo = Henkilo.load_from_database(henkilo_id) if henkilo is not None: # # Ota suola tietokannassa olevasta salasanasta ja aja # hajautusfunktion läpi. # suola = salasana.get_salt_from_hash(henkilo.salasana) salasana_hash = salasana.hash_password(salasana_input, suola) if salasana_hash == henkilo.salasana: self.parameters = { 'status': '<p class="status">Tervetuloa, henkilö %d!</p>' % (henkilo.henkilo_id) } timestamp = int(math.floor(time.time())) self.sessio = Sessio(henkilo_id=henkilo.henkilo_id, start_timestamp=timestamp, remote_addr=self.conf['effective_remote_addr']) self.headers.append(self.sessio.create_cookie().output()) # # Kaikki OK! # return 'logged_in' return 'login_failed'
def get(self): status_message = '' self.headers.append('Content-Type: text/html; charset=UTF-8') status = self.form.getvalue('status') if status is None: if self.sessio is None: self.set_status('Käyttäjä ei ole kirjautunut.') return [ self.headers, self.parameters ] # # Tarkista, että sessio on validi. # henkilo = Henkilo.load_from_database(self.sessio.henkilo_id) if self.sessio.remote_addr != self.conf['effective_remote_addr']: self.set_status('Session ip-osoite ei täsmää käyttäjän ip-osoitteen kanssa!') elif henkilo is None: self.set_status('Session käyttäjää %d ei löydy tietokannasta!' % self.sessio.henkilo_id) else: self.set_status('Tuttu henkilö %s</p>' % (self.sessio)) return [ self.headers, self.parameters ] else: if status == 'error': self.set_status('Virheellinen toiminto') elif status == 'logged_out': self.set_status('Uloskirjautuminen OK.') elif status == 'logged_in': self.set_status('Tervetuloa %d.' % (self.sessio.henkilo_id)) elif status == 'password_mismatch': self.set_status('Salasanat eroavat!') elif status == 'missing_input': self.set_status('Anna tunnus ja salasana!') elif status == 'login_failed': self.set_status('Kirjautuminen epäonnistui') elif status == 'missing_newuser_input': self.set_status('Ole hyvä ja täytä kaikki kentät!') elif status == 'username_exists': self.set_status('Tunnus on jo käytössä!') elif status == 'welcome': self.set_status('Tunnus luotu, tervetuloa!') return [ self.headers, self.parameters ]
def get(self): self.ruokaaine = Ruokaaine.load_from_database(self.ruokaaine_id) self.render_restriction_list() kuva_link = '' for kommentti in self.ruokaaine.kommentit: tunnus = '<span class="tuntematon">tuntematon</span>' if kommentti.omistaja is not None: omistaja = Henkilo.load_from_database(kommentti.omistaja) tunnus = omistaja.tunnus delete_form = '' if self.authorized(): delete_form = """<form class="deleteform" action="%s/kommentti/%d" method="post"> <input type="hidden" name="method_override" value="DELETE" /> <input type="submit" value="Poista" class="deleteform" /> </form>""" % (self.conf['full_path'], kommentti.kommentti_id) kuva_link += "<div class=\"comment\">" kuva_link += "<div class=\"timestamp\">%s %s %s</div>\n" % (tunnus, kommentti.aika, delete_form) kuva_link += "<img src=\"%s/kuva/%d\" alt=\"%s\" />\n" % ( self.conf['script_name'], kommentti.kommentti_id, '') kuva_link += "<div class=\"commenttext\">%s</div>\n" % (kommentti.teksti) kuva_link += "</div>" status = '' if self.form.getvalue('updated', '') == 'true': status = '<p class="status">Tallennettu.</p>' elif self.form.getvalue('comment_created') is not None: status = '<p class="status">Uusi kommentti: %d</p>' % (int(self.form.getvalue('comment_created'))) self.headers.append('Content-Type: text/html; charset=UTF-8') self.parameters.update({ 'nimi': cgi.escape(self.ruokaaine.nimi), 'ruokaaine_id': self.ruokaaine.ruokaaine_id, 'kuva': kuva_link, 'status': status }) return [ self.headers, self.parameters ]
def render_restriction_list(self): if not self.authorized(): rajoituslista = 'Kirjaudu, jos haluat nähdä rajoitukset.' else: rajoituksia = 0 rajoituslista = '<ul class="rajoituslista">' for rajoitus_id in Rajoitus.load_ids(ruokaaine_id=self.ruokaaine_id): rajoituksia = rajoituksia + 1 rajoitus = Rajoitus.load_from_database(rajoitus_id) henkilo = Henkilo.load_from_database(rajoitus.henkilo_id) henkilo_link = ("""<a href="%s/henkilo/%d">%s</a>""" % (self.conf['script_name'], rajoitus.henkilo_id, henkilo.tunnus)) rajoituslista += '<li>%s: %s</li>' % (rajoitus.rajoitus, henkilo_link) rajoituslista += "</ul>" if rajoituksia == 0: rajoituslista = 'Ei rajoituksia.' self.parameters.update({ 'rajoituslista': rajoituslista })
def get(self): edit = self.form.getvalue('edit') self.resepti = Resepti.load_from_database(self.resepti_id) self.render_kohdeinfo(self.resepti) kuva_link = '' for kommentti in self.resepti.kommentit: tunnus = '<span class="tuntematon">tuntematon</span>' if kommentti.omistaja is not None: omistaja = Henkilo.load_from_database(kommentti.omistaja) tunnus = omistaja.tunnus delete_form = '' if self.authorized(): delete_form = """<form class="deleteform" action="%s/kommentti/%d" method="post"> <input type="hidden" name="method_override" value="DELETE" /> <input type="submit" value="Poista" class="deleteform" /> </form>""" % (self.conf['full_path'], kommentti.kommentti_id) kuva_link += "<div class=\"comment\">" kuva_link += "<div class=\"timestamp\">%s %s %s</div>\n" % (tunnus, kommentti.aika, delete_form) if kommentti.kuva is not None: kuva_link += "<img src=\"%s/kuva/%d\" alt=\"%s\" />\n" % ( self.conf['script_name'], kommentti.kommentti_id, '') kuva_link += "<div class=\"commenttext\">%s</div>\n" % (kommentti.teksti) kuva_link += "</div>" ruokaaineetlista = self.create_ruokaaineet_list(self.resepti.resepti_id) valmistusohje_text = "<div class=\"valmistusohje\">%s</div>" % (self.resepti.valmistusohje) if self.authorized(): if edit is not None: valmistusohje_text = textwrap.dedent("""\ <form class="cmxform" action="%s%s" method="post"> <fieldset> <legend></legend> <ol> <li> <textarea name="valmistusohje" rows="10" cols="60" id="valmistusohje">%s</textarea> </li> <li> <input type="submit" value="Tallenna" /> </li> <input type="hidden" name="action" value="updaterecipe"</input> </ol> </fieldset> </form>""" % (self.conf['script_name'], self.conf['path_info'], self.resepti.valmistusohje)) else: valmistusohje_text = valmistusohje_text + """\ <form action="%s"> <input type="submit" name="edit" value="Muokkaa" /> </form>""" % (self.conf['full_path']) lisaalomake = '' if self.authorized(): ruokaaine_optiot = self.create_ruokaaine_optiot() mittayksikko_optiot = self.create_mittayksikko_optiot() lisaalomake = """\ <form class="cmxform" action="%s/ruokaaine" method="post" enctype="multipart/form-data"> <fieldset> <legend>Lisää ruoka-aine:</legend> <ol> <li> <label for="ruokaaine_id">Ruoka-aine</label> <select name="ruokaaine_id" id="ruokaaine_id"> %s </select> </li> <li> <label for="maara">Määrä</label> <input type="text" name="maara" id="maara" /> </li> <li> <label for="mittayksikko">Mittayksikko</label> <select name="mittayksikko" id="mittayksikko"> %s </select> </li> <li> <input type="submit" value="Lisää" /> </li> <input type="hidden" name="action" value="add" /> </ol> </fieldset> </form> """ % (self.conf['full_path'], ruokaaine_optiot, mittayksikko_optiot) status = '' if self.form.getvalue('updated', '') == 'true': status = '<p class="status">Tallennettu.</p>' elif self.form.getvalue('comment_created') is not None: status = '<p class="status">Uusi kommentti: %d</p>' % (int(self.form.getvalue('comment_created'))) self.headers.append('Content-Type: text/html; charset=UTF-8') self.parameters.update({ 'nimi': self.resepti.nimi, 'resepti_id': self.resepti.resepti_id, 'valmistusohje': valmistusohje_text, 'kuva': kuva_link, 'ruokaaineetlista': ruokaaineetlista, 'status': status, 'lisaalomake': lisaalomake }) return [ self.headers, self.parameters ]