def create_actions(self): max_votes_per_voter = None if Election().get_root_reg().check(['common', 'max_votes_per_voter']): max_votes_per_voter = \ Election().get_root_reg().read_integer_value(\ ['common'], 'max_votes_per_voter').value for el in self.questions: _hts = hts.HTS(el[0]) voter = _hts.talletaja(self.signercode) dsc = '' try: dsc = Election().get_sub_reg(\ el[0]).read_string_value(['common'], 'description').value except: dsc = el[0] if voter == None: self.user_msg = EvMessage().get_str("POLE_LUBATUD_HAALETADA", \ evstrings.POLE_LUBATUD_HAALETADA) % (self.signercode, dsc) self.log_msg = self.user_msg raise HTSStoreException, evcommon.EVOTE_ERROR if max_votes_per_voter: if self._count_votes(el[0]) >= max_votes_per_voter: self.user_msg = EvMessage().get_str(\ "TEHNILINE_VIGA_MAX_HAALTE_ARV_PER_HAALETAJA_ON_ULETATUD", \ evstrings.TEHNILINE_VIGA_MAX_HAALTE_ARV_PER_HAALETAJA_ON_ULETATUD) self.log_msg = self.user_msg raise HTSStoreException, evcommon.EVOTE_ERROR self.actions.append([_hts, voter, el[1]])
def verify_vote(self, votedata): import regrights self.user_msg = \ EvMessage().get_str("TEHNILINE_VIGA_HAALE_VERIFITSEERIMISEL", \ evstrings.TEHNILINE_VIGA_HAALE_VERIFITSEERIMISEL) conf = bdocpythonutils.BDocConfig() conf.load(Election().get_bdoc_conf()) self.bdoc = bdocpythonutils.BDocContainer() self.bdoc.load_bytes(votedata) self.bdoc.validateflex() res = self.__check_incoming_vote(conf) if not res.result: self.log_msg = res.error if self.user_msg == '': self.user_msg = EvMessage().\ get_str("TEHNILINE_VIGA_HAALE_VERIFITSEERIMISEL", \ evstrings.TEHNILINE_VIGA_HAALE_VERIFITSEERIMISEL) if not res.ocsp_is_good: self.user_msg = EvMessage().\ get_str("SERTIFIKAAT_ON_TYHISTATUD_VOI_PEATATUD", \ evstrings.SERTIFIKAAT_ON_TYHISTATUD_VOI_PEATATUD) raise HTSStoreException, evcommon.EVOTE_CERT_ERROR raise HTSStoreException, evcommon.EVOTE_ERROR self.signercode = regrights.get_personal_code(res.subject) self.ocsp_time = res.ocsp_time self.signed_vote = self.bdoc.get_bytes()
def verify(self, vote_id): verifier = HTSVerify() try: verifier.verify_id(vote_id) except HTSVerifyException as e: return e.ret, EvMessage().get_str(\ "INVALID_VOTE_ID", evstrings.INVALID_VOTE_ID) evlog.log("Verifying vote with ID %s" % vote_id) try: return evcommon.VERIFY_OK, verifier.get_response() except HTSVerifyException as e: return e.ret, EvMessage().get_str(\ "TECHNICAL_ERROR_VOTE_VERIFICATION", \ evstrings.TECHNICAL_ERROR_VOTE_VERIFICATION)
def bad_cgi_input(): ret = evcommon.EVOTE_ERROR msg = EvMessage().get_str("VIGASED_SISENDPARAMEETRID", \ evstrings.VIGASED_SISENDPARAMEETRID) AppLog().set_app('HTS-ALL') AppLog().log_error(msg) return __return_message(ret, msg)
def store_vote(sha_in, code_in, vote_in): _htsd = HTSAllDispatcher() ret = evcommon.EVOTE_ERROR msg = EvMessage().get_str("TEHNILINE_VIGA_HAALE_TALLETAMISEL", \ evstrings.TEHNILINE_VIGA_HAALE_TALLETAMISEL) ret_cons = _htsd.kooskolaline(sha_in) if ret_cons == evcommon.EVOTE_CONSISTENCY_NO: ret = evcommon.EVOTE_ERROR msg = EvMessage().get_str("HOOLDUS", evstrings.HOOLDUS) elif ret_cons == evcommon.EVOTE_CONSISTENCY_YES: AppLog().set_person(code_in) ret, msg = _htsd.talleta_base64(vote_in) else: ret = evcommon.EVOTE_ERROR msg = EvMessage().get_str("TEHNILINE_VIGA_KOOSKOLASTUSE_KONTROLLIL", \ evstrings.TEHNILINE_VIGA_KOOSKOLASTUSE_KONTROLLIL) return __return_message(ret, msg)
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 check_repeat(sha_in, code_in): _htsd = HTSAllDispatcher() ret = evcommon.EVOTE_REPEAT_ERROR msg = EvMessage().get_str("TEHNILINE_VIGA_KOOSKOLASTUSE_KONTROLLIL", \ evstrings.TEHNILINE_VIGA_KOOSKOLASTUSE_KONTROLLIL) AppLog().set_person(code_in) ret_cons = _htsd.kooskolaline(sha_in) if ret_cons == evcommon.EVOTE_CONSISTENCY_NO: ret = evcommon.EVOTE_REPEAT_NOT_CONSISTENT msg = EvMessage().get_str("HOOLDUS", evstrings.HOOLDUS) elif ret_cons == evcommon.EVOTE_CONSISTENCY_YES: ok, ret_rep, msg_rep = _htsd.haaletanud(code_in) if ok: if ret_rep: ret = evcommon.EVOTE_REPEAT_YES else: ret = evcommon.EVOTE_REPEAT_NO msg = msg_rep return __return_message(ret, msg)
def verify(self, vote_id): try: AppLog().log("Vote verification: START") if ElectionState().election_on(): return self.__all.verify(vote_id) ret, msg = ElectionState().election_off_msg() AppLog().log_error(msg) return evcommon.VERIFY_ERROR, msg except: AppLog().log_exception() return evcommon.VERIFY_ERROR, EvMessage().get_str( "TECHNICAL_ERROR_VOTE_VERIFICATION", evstrings.TECHNICAL_ERROR_VOTE_VERIFICATION) finally: AppLog().log("Vote verification: END")
def verification_configuration(self): try: AppLog().log("Load verification configuration: START") if ElectionState().election_on(): return evcommon.VERIFY_OK, "BLOB" # TODO msg-seadistus ret, msg = ElectionState().election_off_msg() AppLog().log_error(msg) return evcommon.VERIFY_ERROR, msg except: AppLog().log_exception() return evcommon.VERIFY_ERROR, EvMessage().get_str(\ "TECHNICAL_ERROR_LOAD_CONFIGURATION", \ evstrings.TECHNICAL_ERROR_LOAD_CONFIGURATION) finally: AppLog().log("Load verification configuration: END")
def talleta_base64(self, data): try: try: AppLog().log('Hääle talletamine: ALGUS') if ElectionState().election_on(): return self.__all.talleta_base64(data) r1, msg = ElectionState().election_off_msg() AppLog().log_error(msg) return evcommon.EVOTE_ERROR, msg except: AppLog().log_exception() return evcommon.EVOTE_ERROR, \ EvMessage().get_str("TEHNILINE_VIGA_HAALE_TALLETAMISEL", \ evstrings.TEHNILINE_VIGA_HAALE_TALLETAMISEL) finally: AppLog().log('Hääle talletamine: LõPP')
def store_votes(self): for el in self.actions: el[0].talleta_haal( signercode=self.signercode, signedvote=self.signed_vote, vote=el[2], timestamp=self.ocsp_time, valija=el[1]) if not el[0].haaletanud(self.signercode): self.user_msg = EvMessage().get_str(\ "TEHNILINE_VIGA_HAALE_TALLETAMISEL", \ evstrings.TEHNILINE_VIGA_HAALE_TALLETAMISEL) self.log_msg = \ 'Hääle talletamisjärgne kontroll andis '\ 'vigase tulemuse (%s)' % self.signercode raise HTSStoreException, evcommon.EVOTE_ERROR
def haaletanud(self, ik): try: try: AppLog().log('Korduvhääletuse kontroll: ALGUS') if ElectionState().election_on(): ok, msg = self.__all.haaletanud(ik) return True, ok, msg r1, msg = ElectionState().election_off_msg() AppLog().log_error(msg) return False, False, msg except: AppLog().log_exception() return False, False, \ EvMessage().get_str(\ "TEHNILINE_VIGA_KORDUVHAALETUSE_KONTROLLIL",\ evstrings.TEHNILINE_VIGA_KORDUVHAALETUSE_KONTROLLIL) finally: AppLog().log('Korduvhääletuse kontroll: LõPP')
def extract_questions(self): self.log_msg = \ "Allkirjastatud hääl '%s' ei vasta formaadinõuetele" % \ self.signercode self.user_msg = EvMessage().get_str(\ "TEHNILINE_VIGA_HAALE_TALLETAMISEL", \ evstrings.TEHNILINE_VIGA_HAALE_TALLETAMISEL) for dfn in self.bdoc.documents: quest = dfn.split('.') if len(quest) != 2: raise HTSStoreException, evcommon.EVOTE_ERROR if quest[1] != 'evote': raise HTSStoreException, evcommon.EVOTE_ERROR if not quest[0] in Election().get_questions(): raise HTSStoreException, evcommon.EVOTE_ERROR vote = self.bdoc.documents[dfn] self.questions.append([quest[0], vote])
def plain_error_election_off_after(): return evcommon.EVOTE_ERROR, EvMessage().\ get_str("HAALETUS_ON_LOPPENUD", evstrings.HAALETUS_ON_LOPPENUD)
def plain_error_maintainance(): return evcommon.EVOTE_ERROR, EvMessage().\ get_str("HOOLDUS", evstrings.HOOLDUS)
def plain_error_election_off_before(): return evcommon.EVOTE_ERROR, EvMessage().\ get_str("HAALETUS_POLE_ALANUD", evstrings.HAALETUS_POLE_ALANUD)
def plain_error_technical(code): return code, EvMessage().\ get_str("TEHNILINE_VIGA", evstrings.TEHNILINE_VIGA)