Example #1
0
 def handle_vote(self, votelst, line_nr):
     try:
         dist = (votelst[0], votelst[1])
         ring = (votelst[2], votelst[3])
         vote = base64.decodestring(votelst[5])
         if not self._check_vote(ring, dist, vote, line_nr):
             self._log4.log_info(
                     tyyp=4,
                     haal=base64.decodestring(votelst[4]),
                     jaoskond_omavalitsus=votelst[0],
                     jaoskond=votelst[1],
                     ringkond_omavalitsus=votelst[2],
                     ringkond=votelst[3])
         else:
             self._log5.log_info(
                     tyyp=5,
                     haal=base64.decodestring(votelst[4]),
                     jaoskond_omavalitsus=votelst[0],
                     jaoskond=votelst[1],
                     ringkond_omavalitsus=votelst[2],
                     ringkond=votelst[3])
         return True
     except:
         evlog.log_exception()
         return False
Example #2
0
    def talleta_base64(self, data):

        try:
            decoded_vote = base64.decodestring(data)
            return self.__talleta(decoded_vote)
        except:
            evlog.log_exception()
            return evcommon.EVOTE_ERROR, EV_ERRORS.TEHNILINE_VIGA
Example #3
0
    def talleta_base64(self, data):

        try:
            decoded_vote = base64.decodestring(data)
            return self.__talleta(decoded_vote)
        except:
            evlog.log_exception()
            return evcommon.EVOTE_ERROR, EV_ERRORS.TEHNILINE_VIGA
Example #4
0
    def talleta_base64(self, data):

        try:
            decoded_vote = base64.decodestring(data)
            return self.__talleta(decoded_vote)
        except:
            evlog.log_exception()
            return evcommon.EVOTE_ERROR, \
                    EvMessage().get_str(\
                    "TEHNILINE_VIGA_HAALE_TALLETAMISEL",\
                    evstrings.TEHNILINE_VIGA_HAALE_TALLETAMISEL)
Example #5
0
 def run(self, pin):
     try:
         self.__cnt.load(self._reg)
         if not self._decrypt_votes(pin):
             return False
         if not self._count_votes():
             return False
         self._write_result()
         if not self._check_logs():
             return False
         return True
     except:
         evlog.log_exception()
         return False
Example #6
0
def do_cgi():
    try:
        elec = election.Election()
        evlog.AppLog().set_app(APP)

        # Create a list of pairs from the form parameters. Don't use a dictionary
        # because that will overwrite recurring keys.
        form = cgi.FieldStorage()
        params = []
        for key in form:
            for value in form.getlist(key):
                params.append((key, value))

        # Only accept up to a single parameter
        if len(params) > 1:

            def keys(pairs):
                """Return a comma-separated list of the keys."""
                return ", ".join([pair[0] for pair in pairs])

            evlog.log_error("Too many query parameters: " + keys(params))
            bad_parameters()
            return

        # Only accept the POST_VERIFY_VOTE parameter.
        if len(params) and params[0][0] != evcommon.POST_VERIFY_VOTE:
            evlog.log_error('Unknown query parameter "%s"' % params[0][0])
            bad_parameters()
            return

        # Make sure the parameter is correctly formatted.
        if not formatutil.is_vote_verification_id(params[0][1]):
            # Don't write to disk; we don't know how large the value is
            evlog.log_error("Malformed vote ID")
            bad_parameters()
            return

        evlog.log("verif/auth REMOTE_ADDR: " + evlogdata.get_remote_ip())
        evlog.log("verif/auth VOTE-ID: " + params[0][1])

        params.append((evcommon.POST_SESS_ID, sessionid.voting()))

        url = "http://" + elec.get_hts_ip() + "/" + elec.get_hts_verify_path()
        conn = urllib.urlopen(url, urllib.urlencode(params))
        protocol.http_response(conn.read())
    except:
        evlog.log_exception()
        technical_error()
Example #7
0
def do_cgi():
    try:
        elec = election.Election()
        evlog.AppLog().set_app(APP)

        # Create a list of pairs from the form parameters. Don't use a dictionary
        # because that will overwrite recurring keys.
        form = cgi.FieldStorage()
        params = []
        for key in form:
            for value in form.getlist(key):
                params.append((key, value))

        # Only accept up to a single parameter
        if len(params) > 1:
            def keys(pairs):
                """Return a comma-separated list of the keys."""
                return ", ".join([pair[0] for pair in pairs])

            evlog.log_error("Too many query parameters: " + keys(params))
            bad_parameters()
            return

        # Only accept the POST_VERIFY_VOTE parameter.
        if len(params) and params[0][0] != evcommon.POST_VERIFY_VOTE:
            evlog.log_error("Unknown query parameter \"%s\"" % params[0][0])
            bad_parameters()
            return

        # Make sure the parameter is correctly formatted.
        if not formatutil.is_vote_verification_id(params[0][1]):
            # Don't write to disk; we don't know how large the value is
            evlog.log_error("Malformed vote ID")
            bad_parameters()
            return

        evlog.log("verif/auth REMOTE_ADDR: " + evlogdata.get_remote_ip())
        evlog.log("verif/auth VOTE-ID: " + params[0][1])

        params.append((evcommon.POST_SESS_ID, sessionid.voting()))

        url = "http://" + elec.get_hts_ip() + "/" + elec.get_hts_verify_path()
        conn = urllib.urlopen(url, urllib.urlencode(params))
        protocol.http_response(conn.read())
    except:
        evlog.log_exception()
        technical_error()
Example #8
0
    def get_vote_for_result(self, logline, fname):
        res = None
        try:
            elems = logline.split('\t')
            code = elems[6]
            user_key = htscommon.get_user_key(code)
            fn = self._reg.path(user_key + [fname])
            bdoc = htsbase.get_vote(fn)
            if bdoc:
                haal = bdoc.documents["%s.evote" % self._elid]
                voter = htscommon.get_logline_voter(logline)
                b64haal = base64.b64encode(haal).strip()
                res = [voter['jaoskond_omavalitsus'], voter['jaoskond'],
                    voter['ringkond_omavalitsus'], voter['ringkond'], b64haal]
        except:
            evlog.log_exception()

        return res
Example #9
0
    def get_vote_for_result(self, logline, fname):
        res = None
        try:
            elems = logline.split('\t')
            code = elems[6]
            user_key = htscommon.get_user_key(code)
            fn = self._reg.path(user_key + [fname])
            bdoc = htsbase.get_vote(fn)
            if bdoc:
                haal = bdoc.documents["%s.evote" % self._elid]
                voter = htscommon.get_logline_voter(logline)
                b64haal = base64.b64encode(haal).strip()
                res = [voter['jaoskond_omavalitsus'], voter['jaoskond'], \
                    voter['ringkond_omavalitsus'], voter['ringkond'], b64haal]
        except:
            evlog.log_exception()

        return res
Example #10
0
def get_vote(zipfn):
    bdoc = None
    inzip = None
    try:
        try:
            inzip = zipfile.ZipFile(zipfn, 'r')
            bdocdata = inzip.read(htscommon.ZIP_BDOCFILE)
            bdoc = bdocpythonutils.BDocContainer()
            bdoc.load_bytes(bdocdata)
            profile = bdocpythonutils.ManifestProfile('TM')
            bdoc.validate(profile)
        except:
            bdoc = None
            evlog.log_exception()
    finally:
        if inzip:
            inzip.close()

    return bdoc
Example #11
0
def get_vote(zipfn):
    bdoc = None
    inzip = None
    try:
        try:
            inzip = zipfile.ZipFile(zipfn, 'r')
            bdocdata = inzip.read(htscommon.ZIP_BDOCFILE)
            bdoc = bdocpythonutils.BDocContainer()
            bdoc.load_bytes(bdocdata)
            profile = bdocpythonutils.ManifestProfile('TM')
            bdoc.validate(profile)
        except:
            bdoc = None
            evlog.log_exception()
    finally:
        if inzip:
            inzip.close()

    return bdoc
Example #12
0
    def get_log_lines(self, root, path):
        log_lines = []
        for vote_file in path:
            if htscommon.VALID_VOTE_PATTERN.match(vote_file):
                inzip = None
                lline = None
                try:
                    lname = root + '/' + vote_file
                    inzip = zipfile.ZipFile(lname, 'r')
                    lline = inzip.read(htscommon.ZIP_LOGFILE)
                except:
                    lline = None
                    evlog.log_error("Viga hääle käitlemisel: " + lname)
                    evlog.log_exception()

                if inzip:
                    inzip.close()

                if lline:
                    log_lines.append((lline, vote_file))

        return log_lines
Example #13
0
    def get_log_lines(self, root, path):
        log_lines = []
        for vote_file in path:
            if htscommon.VALID_VOTE_PATTERN.match(vote_file):
                inzip = None
                lline = None
                try:
                    lname = root + '/' + vote_file
                    inzip = zipfile.ZipFile(lname, 'r')
                    lline = inzip.read(htscommon.ZIP_LOGFILE)
                except:
                    lline = None
                    evlog.log_error("Viga hääle käitlemisel: " + lname)
                    evlog.log_exception()

                if inzip:
                    inzip.close()

                if lline:
                    log_lines.append((lline, vote_file))

        return log_lines
Example #14
0
 def __return_exception(self, errcode):
     evlog.log_exception()
     return protocol.plain_error_technical(errcode)
Example #15
0
 def __return_exception(self):
     evlog.log_exception()
     r1, r2 = protocol.plain_error_technical(evcommon.EVOTE_ERROR)
     return self.__return_error(r1, r2)
Example #16
0
 def __return_exception(self, errcode):
     evlog.log_exception()
     return protocol.plain_error_technical(errcode)
Example #17
0
 def __return_exception(self):
     evlog.log_exception()
     r1, r2 = protocol.plain_error_technical(evcommon.EVOTE_ERROR)
     return self.__return_error(r1, r2)
Example #18
0
            res, logline = cgivalidator.validate_form(form, req_params)
            if res:
                cgilog.do_log('vote/auth')
                result = hesd.hts_vote(form.getvalue(evcommon.POST_EVOTE))
            else:
                cgilog.do_log_error('vote/auth/err')
                evlog.log_error(logline)
        else:
            req_params = []
            res, logline = cgivalidator.validate_form(form, req_params)
            if res:
                cgilog.do_log('cand/auth')
                if election.Election().allow_new_voters():
                    result = hesd.get_candidate_list()
                else:
                    evlog.log_error('nonewvoters')
                    a, b = protocol.plain_error_election_off_after()
                    result = protocol.msg_error(a, b)
            else:
                cgilog.do_log_error('cand/auth/err')
                evlog.log_error(logline)
    except:
        evlog.log_exception()
        result = protocol.msg_error_technical()

    protocol.http_response(result)
    cgi.sys.exit(0)

# vim:set ts=4 sw=4 et fileencoding=utf8:
Example #19
0
                res, logline = cgivalidator.validate_form(form, req_params)
                if res:
                    cgilog.do_log("vote/auth")
                    result = mid.init_sign(form)
                else:
                    cgilog.do_log_error('vote/auth/err')
                    evlog.log_error(logline)
        else:
            req_params = [evcommon.POST_PHONENO]
            res, logline = cgivalidator.validate_form(form, req_params)
            if res:
                cgilog.do_log("cand/auth")
                phoneno = form.getvalue(evcommon.POST_PHONENO)
                evlog.log("PHONENO: " + phoneno)
                if election.Election().allow_new_voters():
                    result = mid.init_auth(phoneno)
                else:
                    a, b = protocol.plain_error_election_off_after()
                    result = protocol.msg_error(a, b)
            else:
                cgilog.do_log_error('cand/auth/err')
                evlog.log_error(logline)
    except:
        evlog.log_exception()
        result = protocol.msg_error_technical()

    protocol.http_response(result)
    cgi.sys.exit(0)

# vim:set ts=4 sw=4 et fileencoding=utf8: