Guest User

Untitled

a guest
Jan 11th, 2016
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.14 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 = "{error}: {error_description}".format(**response)
  133.             return QMessageBox.warning(self, "Error", message)
  134.         if expires > 0:
  135.             expires += time.time()
  136.         self.client.accessToken = AccessToken(response['access_token'],
  137.                                               response['user_id'],
  138.                                               expires,
  139.                                               response.get('secret'))
  140.         self.accept()
  141.  
  142.     def togglePassword(self, state):
  143.         if state == Qt.Checked:
  144.             self.passwordField.setEchoMode(QLineEdit.Normal)
  145.         elif state == Qt.Unchecked:
  146.             self.passwordField.setEchoMode(QLineEdit.Password)
Add Comment
Please, Sign In to add comment