Advertisement
Guest User

Untitled

a guest
Jan 11th, 2016
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.15 KB | None | 0 0
  1. import time
  2. from PyQt5.QtCore import pyqtSignal, Qt
  3. from PyQt5.QtGui import QPixmap
  4. from PyQt5.QtWidgets import (QCheckBox, QDialog, QDialogButtonBox, QFormLayout,
  5.                              QGridLayout, QLabel, QLineEdit, QMessageBox,
  6.                              QSizePolicy, QSpacerItem, QVBoxLayout)
  7. from vkclient import *
  8.  
  9.  
  10. class GuiClient(Client):
  11.     pass
  12.  
  13.  
  14. class Captcha(QDialog):
  15.     def __init__(self, client, captchaImg, captchaSid):
  16.         self.client = client
  17.         self.captchaImg = captchaImg
  18.         self.captchaSid = captchaSid
  19.         super().__init__()
  20.         self.setWindowModality(Qt.ApplicationModal)
  21.         self.setObjectName("Captcha")
  22.         self.setFixedSize(250, 150)
  23.         self.setWindowTitle(self.tr("Captcha"))
  24.         mainLayout = QVBoxLayout()
  25.         grid = QGridLayout()
  26.         spacer = QSpacerItem(0, 0, QSizePolicy.Minimum, QSizePolicy.Expanding)
  27.         grid.addItem(spacer, 0, 1)
  28.         spacer = QSpacerItem(0, 0, QSizePolicy.Expanding, QSizePolicy.Minimum)
  29.         grid.addItem(spacer, 1, 0)
  30.         verticalLayout = QVBoxLayout()
  31.         self.captchaImage = ClickableLabel()
  32.         self.captchaImage.setFixedSize(130, 50)
  33.         self.captchaImage.setToolTip(self.tr("Click to refresh image"))
  34.         verticalLayout.addWidget(self.captchaImage)
  35.         self.captchaText = QLineEdit()
  36.         self.captchaText.setPlaceholderText(self.tr("Enter Captcha Code"))
  37.         self.captchaText.setFixedWidth(130)
  38.         verticalLayout.addWidget(self.captchaText)
  39.         grid.addLayout(verticalLayout, 1, 1)
  40.         spacer = QSpacerItem(0, 0, QSizePolicy.Expanding, QSizePolicy.Minimum)
  41.         grid.addItem(spacer, 1, 2)
  42.         spacer = QSpacerItem(0, 0, QSizePolicy.Minimum, QSizePolicy.Expanding)
  43.         grid.addItem(spacer, 2, 1)
  44.         mainLayout.addLayout(grid)
  45.         flags = QDialogButtonBox.Ok | QDialogButtonBox.Cancel
  46.         self.buttonBox = QDialogButtonBox(flags)
  47.         mainLayout.addWidget(self.buttonBox)
  48.         self.setLayout(mainLayout)
  49.         self.captchaImage.clicked.connect(self.refreshCaptcha)
  50.         self.okButton = self.buttonBox.button(QDialogButtonBox.Ok)
  51.         self.okButton.clicked.connect(self.accept)
  52.         self.cancelButton = self.buttonBox.button(QDialogButtonBox.Cancel)
  53.         self.cancelButton.clicked.connect(self.reject)
  54.         self.loadCaptcha()
  55.  
  56.     def loadCaptcha(self):
  57.         pixmap = QPixmap()
  58.         pixmap.loadFromData(self.client.getContent(self.captchaImg))
  59.         self.captchaImage.setPixmap(pixmap)
  60.  
  61.     def refreshCaptcha(self):
  62.         self.loadCaptcha()
  63.         self.captchaText.setFocus()
  64.  
  65.     def getCaptchaText(self):
  66.         return self.captchaText.text()
  67.  
  68.  
  69. class ClickableLabel(QLabel):
  70.     clicked = pyqtSignal()
  71.  
  72.     def mousePressEvent(self, ev):
  73.         self.clicked.emit()
  74.  
  75.  
  76. class ClientAuth(QDialog):
  77.     def __init__(self, client, clientId, clientSecret, scope, parent=None):
  78.         self.client = client
  79.         self.clientId = clientId
  80.         self.clientSecret = clientSecret
  81.         self.scope = scope
  82.         super().__init__(parent)
  83.         self.setObjectName("ClientAuth")
  84.         self.resize(250, 150)
  85.         self.setWindowTitle(self.tr("Log In Into Vk"))
  86.         verticalLayout = QVBoxLayout(self)
  87.         formLayout = QFormLayout()
  88.         self.usernameLabel = QLabel(self.tr("Username:"))
  89.         self.usernameField = QLineEdit()
  90.         formLayout.addRow(self.usernameLabel, self.usernameField)
  91.         self.passwordLabel = QLabel(self.tr("Password:"))
  92.         self.passwordField = QLineEdit()
  93.         self.passwordField.setEchoMode(QLineEdit.Password)
  94.         formLayout.addRow(self.passwordLabel, self.passwordField)
  95.         self.showPasswordCheck = QCheckBox(self.tr("Show password"))
  96.         self.showPasswordCheck.stateChanged.connect(self.togglePassword)
  97.         formLayout.addRow(None, self.showPasswordCheck)
  98.         verticalLayout.addLayout(formLayout)
  99.         flags = QDialogButtonBox.Ok | QDialogButtonBox.Cancel
  100.         self.buttonBox = QDialogButtonBox(flags)
  101.         verticalLayout.addWidget(self.buttonBox)
  102.         self.okButton = self.buttonBox.button(QDialogButtonBox.Ok)
  103.         self.okButton.clicked.connect(self.login)
  104.         self.cancelButton = self.buttonBox.button(QDialogButtonBox.Cancel)
  105.         self.cancelButton.clicked.connect(self.reject)
  106.  
  107.     def login(self):
  108.         username = self.usernameField.text()
  109.         password = self.passwordField.text()
  110.         if username and password:
  111.             self._login(username, password)
  112.  
  113.     def _login(self, username, password, captcha=None):
  114.         params = dict(username=username,
  115.                       password=password,
  116.                       client_id=self.clientId,
  117.                       client_secret=self.clientSecret,
  118.                       scope=self.scope,
  119.                       grant_type="password")
  120.         if captcha:
  121.             params.update({'captcha_key': captcha.getCaptchaText(),
  122.                            'captcha_sid': captcha.captchaSid})
  123.         response = self.client.get('https://oauth.vk.com/token', params)
  124.         if 'error' in response:
  125.             if response['error'] == 'need_captcha':
  126.                 captcha = Captcha(self.client,
  127.                                   response['captcha_img'],
  128.                                   response['captcha_sid'])
  129.                 if captcha.exec_():
  130.                     return self._login(username, password, captcha)
  131.                 return
  132.             message = "<b>{error}:</b> {error_description}".format(**response)
  133.             return QMessageBox.warning(self, "Error", message)
  134.         token = response['access_token']
  135.         userId = response['user_id']
  136.         expires = response['expires_in']
  137.         if expires > 0:
  138.             expires += time.time()
  139.         secret = response['secret']
  140.         accessToken = AccessToken(token, userId, expires, secret)
  141.         self.client.accessToken = accessToken
  142.         self.accept()
  143.  
  144.     def togglePassword(self, state):
  145.         if state == Qt.Checked:
  146.             self.passwordField.setEchoMode(QLineEdit.Normal)
  147.         elif state == Qt.Unchecked:
  148.             self.passwordField.setEchoMode(QLineEdit.Password)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement