Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from .ui_authentication import Ui_Authentication
- from PyQt5.QtGui import QImage, QPixmap
- from PyQt5.QtWidgets import QDialog
- import logging
- AUTH_URL = "https://oauth.vk.com/token"
- CLIENT_ID = 2274003
- CLIENT_SECRET = 'hHbZxrka2uZ6jB1inYsH'
- class Authentication(QDialog):
- def __init__(self,
- client,
- client_id=CLIENT_ID,
- client_secret=CLIENT_SECRET,
- scope=None,
- parent=None):
- self.client = client
- self.client_id = client_id
- self.client_secret = client_secret
- self.scope = scope
- self.logger = logging.getLogger('.'.join([
- __name__, self.__class__.__name__]))
- self.captcha_img = None
- self.captcha_sid = None
- super(QDialog, self).__init__(parent)
- self.ui = Ui_Authentication()
- self.ui.setupUi(self)
- self.hide_error()
- self.hide_captcha()
- self.connect_slots()
- def connect_slots(self):
- # Убираем пробелы у значений полей
- self.ui.username_line.editingFinished.connect(
- lambda: self.ui.username_line.setText(
- self.ui.username_line.text().strip()))
- self.ui.password_line.editingFinished.connect(
- lambda: self.ui.password_line.setText(
- self.ui.password_line.text().strip()))
- self.ui.captcha_line.editingFinished.connect(
- lambda: self.ui.captcha_line.setText(
- self.ui.captcha_line.text().strip()))
- self.ui.refresh_captcha_button.clicked.connect(self.load_captcha)
- self.ui.login_button.clicked.connect(self.login)
- def login(self):
- username = self.ui.username_line.text()
- password = self.ui.password_line.text()
- if not username or not password:
- self.show_error('Username and password are required.')
- return
- params = {
- 'username': username,
- 'password': password,
- 'v': self.client.api_version,
- 'client_id': self.client_id,
- 'client_secret': self.client_secret,
- 'grant_type': 'password'
- }
- if self.scope:
- params['scope'] = self.scope
- if self.ui.captcha_frame.isVisible():
- params['captcha_sid'] = self.captcha_sid
- params['captcha_key'] = self.ui.captcha_line.text()
- response = self.client.get(AUTH_URL, params)
- if 'captcha_sid' in response:
- self.captcha_img = response.captcha_img
- self.captcha_sid = response.captcha_sid
- self.show_error('Captcha required.')
- self.show_captcha()
- return
- if 'error' in response:
- self.logger.warning(
- "{error}: {error_description}".format(**response))
- self.show_error(response.error_description)
- self.ui.password_line.clear()
- self.ui.username_line.setFocus()
- self.ui.username_line.selectAll()
- self.hide_captcha()
- return
- self.client.access_token = response.access_token
- self.client.user_id = response.user_id
- self.client.secret = response.get('secret')
- assert response.expires_in == 0
- self.logger.info('Authentication successful')
- self.accept()
- def hide_error(self):
- self.ui.error_label.hide()
- def show_error(self, message):
- self.ui.error_label.setText(self.tr(message))
- self.ui.error_label.show()
- def hide_captcha(self):
- self.ui.captcha_frame.hide()
- def show_captcha(self):
- self.load_captcha()
- self.ui.captcha_frame.show()
- def load_captcha(self):
- data = self.client.session.get(self.captcha_img).content
- pix = QPixmap.fromImage(QImage.fromData(data))
- self.ui.captcha_image.setPixmap(pix)
- self.ui.captcha_line.clear()
- self.ui.captcha_line.setFocus()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement