예제 #1
0
    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
예제 #2
0
    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'
예제 #3
0
    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'