Advertisement
Guest User

Untitled

a guest
Sep 25th, 2016
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.11 KB | None | 0 0
  1. import random
  2. import smtplib
  3. import paramiko
  4. import os
  5. import sys
  6. from email.mime.text import MIMEText
  7.  
  8. host = '127.0.0.1'
  9. user = 'geoolekom'
  10. pwd = 'WC3TFTDOTA'
  11. host_port = 22
  12.  
  13. def get_bulletin():
  14.    
  15.     transport = paramiko.Transport((host, host_port))
  16.     transport.connect(username=user, password=pwd)
  17.  
  18.     sftp = paramiko.SFTPClient.from_transport(transport)
  19.  
  20.     bulletin = sftp.file('./DGAP16/bulletin.txt', 'r')
  21.     for line in bulletin:
  22.         print(line, end='')
  23.  
  24.     sftp.close()
  25.     transport.close()
  26.     return
  27.  
  28. def recieve_email(name):
  29.  
  30.     transport = paramiko.Transport((host, host_port))
  31.     transport.connect(username=user, password=pwd)
  32.  
  33.     sftp = paramiko.SFTPClient.from_transport(transport)
  34.  
  35.     emails = sftp.file('./DGAP16/emails.txt', 'r')
  36.     for line in emails:
  37.         if len(line.split()) == 2 and line.split()[0] == name:
  38.             email = line.split()[1]
  39.             break
  40.     else:
  41.         email = 'Doesn\'t exist'
  42.    
  43.     sftp.close()
  44.     transport.close()
  45.     return email
  46.  
  47. def generate_code():
  48.     random.seed()
  49.     code = random.randint(0, 100000)
  50.     return code
  51.  
  52. def send_code(code, email):
  53.  
  54.     sender = 'dgap.vote.2016'
  55.     sender_pwd = 'Qwerty123'
  56.     smtp_server = 'smtp.yandex.ru'
  57.     port = 587
  58.  
  59.     msg = MIMEText('Hello. Here is your secret voter code: '+code+'\nUse your vote very carefully!\nBest regards, Electoral Commission.')
  60.  
  61.     msg['To'] = email
  62.     msg['From'] ='dgap.vote.2016@yandex.ru'
  63.     msg['Subject'] = 'Your secret code for election'
  64.  
  65.     mail_server = smtplib.SMTP(smtp_server, port)
  66.     mail_server.starttls()
  67.     mail_server.login(sender, sender_pwd)
  68.     mail_server.sendmail(sender+'@yandex.ru', email, msg.as_string())
  69.     mail_server.quit()
  70.     return 1
  71.  
  72. def verify(code):
  73.     try:
  74.         given_code = int(input())
  75.     except ValueError:
  76.         return -1
  77.     if code == given_code:
  78.         return 1
  79.     else:
  80.         return 0
  81.  
  82. def send_vote(vote, email):
  83.  
  84.     transport = paramiko.Transport((host, host_port))
  85.     transport.connect(username=user, password=pwd)
  86.  
  87.     sftp = paramiko.SFTPClient.from_transport(transport)
  88.     k = 0
  89.     bulletin = sftp.open('./DGAP16/bulletin.txt', 'r')
  90.     size = len(bulletin.readlines())
  91.     bulletin.close()
  92.     for i in range(1, size+1):
  93.         try:
  94.             f = sftp.file('./DGAP16/votes/'+str(i)+'_'+email, 'r')
  95.         except IOError as e:
  96.             True
  97.         else:
  98.             with f:
  99.                 k+=1
  100.     if k > 0:
  101.         return 0
  102.     else:
  103.         sftp.file('./DGAP16/votes/'+vote+'_'+email, 'w')
  104.  
  105.     sftp.close()
  106.     transport.close()
  107.  
  108.     return 1
  109.  
  110. def main():
  111.  
  112.     get_bulletin()
  113.  
  114.     print("Enter your name:")
  115.     name = input()
  116.     email = recieve_email(name)
  117.  
  118.     if email == 'Doesn\'t exist':
  119.         print("Name is invalid.")
  120.         sys.exit()
  121.     else:
  122.         print("Trying to send verification code.")
  123.  
  124.     code = generate_code()
  125.  
  126.     send_code(str(code), email)
  127.     print("Code is successfully sent.")
  128.  
  129.  
  130.     print("Enter secret code:")
  131.     v = verify(code)
  132.     if v == 1:
  133.         print("Access allowed. Now vote:")
  134.     elif v == -1:
  135.         print("This is not a number. Access denied.")
  136.         sys.exit()
  137.     elif v == 0:
  138.         print("Wrong code. Access denied.")
  139.         sys.exit()
  140.  
  141.     vote = input()
  142.  
  143.     if send_vote(vote, email) == 1:
  144.         print("You've successfully voted. Congradulations!")
  145.     else:
  146.         print("Vote isn't sent. You've already voted.")
  147.  
  148.     return
  149.  
  150. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement