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
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
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)
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
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()
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()
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
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
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
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
def __return_exception(self, errcode): evlog.log_exception() return protocol.plain_error_technical(errcode)
def __return_exception(self): evlog.log_exception() r1, r2 = protocol.plain_error_technical(evcommon.EVOTE_ERROR) return self.__return_error(r1, r2)
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:
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: