Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import time
- from PyQt5.QtCore import pyqtSignal, Qt
- from PyQt5.QtGui import QPixmap
- from PyQt5.QtWidgets import (QCheckBox, QDialog, QDialogButtonBox, QFormLayout,
- QGridLayout, QLabel, QLineEdit, QMessageBox,
- QSizePolicy, QSpacerItem, QVBoxLayout)
- from vkclient import *
- class GuiClient(Client):
- pass
- class Captcha(QDialog):
- def __init__(self, client, captchaImg, captchaSid):
- self.client = client
- self.captchaImg = captchaImg
- self.captchaSid = captchaSid
- super().__init__()
- self.setWindowModality(Qt.ApplicationModal)
- self.setObjectName("Captcha")
- self.setFixedSize(250, 150)
- self.setWindowTitle(self.tr("Captcha"))
- mainLayout = QVBoxLayout()
- grid = QGridLayout()
- spacer = QSpacerItem(0, 0, QSizePolicy.Minimum, QSizePolicy.Expanding)
- grid.addItem(spacer, 0, 1)
- spacer = QSpacerItem(0, 0, QSizePolicy.Expanding, QSizePolicy.Minimum)
- grid.addItem(spacer, 1, 0)
- verticalLayout = QVBoxLayout()
- self.captchaImage = ClickableLabel()
- self.captchaImage.setFixedSize(130, 50)
- self.captchaImage.setToolTip(self.tr("Click to refresh image"))
- verticalLayout.addWidget(self.captchaImage)
- self.captchaText = QLineEdit()
- self.captchaText.setPlaceholderText(self.tr("Enter Captcha Code"))
- self.captchaText.setFixedWidth(130)
- verticalLayout.addWidget(self.captchaText)
- grid.addLayout(verticalLayout, 1, 1)
- spacer = QSpacerItem(0, 0, QSizePolicy.Expanding, QSizePolicy.Minimum)
- grid.addItem(spacer, 1, 2)
- spacer = QSpacerItem(0, 0, QSizePolicy.Minimum, QSizePolicy.Expanding)
- grid.addItem(spacer, 2, 1)
- mainLayout.addLayout(grid)
- flags = QDialogButtonBox.Ok | QDialogButtonBox.Cancel
- self.buttonBox = QDialogButtonBox(flags)
- mainLayout.addWidget(self.buttonBox)
- self.setLayout(mainLayout)
- self.captchaImage.clicked.connect(self.refreshCaptcha)
- self.okButton = self.buttonBox.button(QDialogButtonBox.Ok)
- self.okButton.clicked.connect(self.accept)
- self.cancelButton = self.buttonBox.button(QDialogButtonBox.Cancel)
- self.cancelButton.clicked.connect(self.reject)
- self.loadCaptcha()
- def loadCaptcha(self):
- pixmap = QPixmap()
- pixmap.loadFromData(self.client.getContent(self.captchaImg))
- self.captchaImage.setPixmap(pixmap)
- def refreshCaptcha(self):
- self.loadCaptcha()
- self.captchaText.setFocus()
- def getCaptchaText(self):
- return self.captchaText.text()
- class ClickableLabel(QLabel):
- clicked = pyqtSignal()
- def mousePressEvent(self, ev):
- self.clicked.emit()
- class ClientAuth(QDialog):
- def __init__(self, client, clientId, clientSecret, scope, parent=None):
- self.client = client
- self.clientId = clientId
- self.clientSecret = clientSecret
- self.scope = scope
- super().__init__(parent)
- self.setObjectName("ClientAuth")
- self.resize(250, 150)
- self.setWindowTitle(self.tr("Log In Into Vk"))
- verticalLayout = QVBoxLayout(self)
- formLayout = QFormLayout()
- self.usernameLabel = QLabel(self.tr("Username:"))
- self.usernameField = QLineEdit()
- formLayout.addRow(self.usernameLabel, self.usernameField)
- self.passwordLabel = QLabel(self.tr("Password:"))
- self.passwordField = QLineEdit()
- self.passwordField.setEchoMode(QLineEdit.Password)
- formLayout.addRow(self.passwordLabel, self.passwordField)
- self.showPasswordCheck = QCheckBox(self.tr("Show password"))
- self.showPasswordCheck.stateChanged.connect(self.togglePassword)
- formLayout.addRow(None, self.showPasswordCheck)
- verticalLayout.addLayout(formLayout)
- flags = QDialogButtonBox.Ok | QDialogButtonBox.Cancel
- self.buttonBox = QDialogButtonBox(flags)
- verticalLayout.addWidget(self.buttonBox)
- self.okButton = self.buttonBox.button(QDialogButtonBox.Ok)
- self.okButton.clicked.connect(self.login)
- self.cancelButton = self.buttonBox.button(QDialogButtonBox.Cancel)
- self.cancelButton.clicked.connect(self.reject)
- def login(self):
- username = self.usernameField.text()
- password = self.passwordField.text()
- if username and password:
- self._login(username, password)
- def _login(self, username, password, captcha=None):
- params = dict(username=username,
- password=password,
- client_id=self.clientId,
- client_secret=self.clientSecret,
- scope=self.scope,
- grant_type="password")
- if captcha:
- params.update({'captcha_key': captcha.getCaptchaText(),
- 'captcha_sid': captcha.captchaSid})
- response = self.client.get('https://oauth.vk.com/token', params)
- if 'error' in response:
- if response['error'] == 'need_captcha':
- captcha = Captcha(self.client,
- response['captcha_img'],
- response['captcha_sid'])
- if captcha.exec_():
- return self._login(username, password, captcha)
- return
- message = "<b>{error}:</b> {error_description}".format(**response)
- return QMessageBox.warning(self, "Error", message)
- token = response['access_token']
- userId = response['user_id']
- expires = response['expires_in']
- if expires > 0:
- expires += time.time()
- secret = response['secret']
- accessToken = AccessToken(token, userId, expires, secret)
- self.client.accessToken = accessToken
- self.accept()
- def togglePassword(self, state):
- if state == Qt.Checked:
- self.passwordField.setEchoMode(QLineEdit.Normal)
- elif state == Qt.Unchecked:
- self.passwordField.setEchoMode(QLineEdit.Password)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement