blob: dbc72427a34799a2502626a9a3dde3f7ea3373a5 [file] [log] [blame]
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
import hashlib, json, random, os, sys, time
try:
from __main__ import config
except:
import ConfigParser as configparser
config = configparser.RawConfigParser()
config.read("%s/../../../steve.cfg" % (os.path.dirname(__file__)))
# SMTP Lib
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from smtplib import SMTPException
from lib import constants, election
backend = constants.initBackend(config)
def get(election, basedata, uid):
xhash = hashlib.sha512(basedata['hash'] + uid).hexdigest()
return backend.voter_get_uid(election, xhash)
def add(election, basedata, PID):
uid = hashlib.sha224("%s%s%s%s" % (PID, basedata['hash'], time.time(), random.randint(1,99999999))).hexdigest()
xhash = hashlib.sha512(basedata['hash'] + uid).hexdigest()
backend.voter_add(election, PID, xhash)
return uid, xhash
def remove(election, basedata, UID):
backend.voter_remove(election, UID)
def hasVoted(election, issue, uid):
# Cut away .json endings if found. This is seemingly only used with the file-based db backend.
# TODO: Test if this is still needed.
if issue.endswith(".json"):
issue = issue[:-5]
return backend.voter_has_voted(election, issue, uid)
def ballots():
try:
from lib import gateway
uid = gateway.uid()
return backend.voter_ballots(uid) if uid else {}
except:
return {}
def regenerate(election, basedata, xhash):
try:
from lib import gateway
uid = gateway.uid()
valid = backend.ballot_scrub(election, xhash)
if valid:
ballot, xhash = add(election, basedata, uid)
return {
'election': election,
'ballot': ballot
}
else:
return {
'error': "Not a valid ballot!"
}
except:
return {'error': "No suitable gateway mechanism found"}
def email(rcpt, subject, message):
sender = config.get("email", "sender")
signature = config.get("email", "signature")
receivers = [rcpt]
# py 2 vs 3 conversion
if type(message) is bytes:
message = message.decode('utf-8', errors='replace')
msg = u"""From: %s
To: %s
Subject: %s
%s
With regards,
%s
--
Powered by Apache STeVe - https://steve.apache.org
""" % (sender, rcpt, subject, message, signature)
msg = msg.encode('utf-8', errors='replace')
try:
smtpObj = smtplib.SMTP(config.get("email", "mta"))
smtpObj.sendmail(sender, receivers, msg)
except SMTPException:
raise Exception("Could not send email - SMTP server down?")