void PhoneWidget::submit() { if (_sentRequest || isHidden()) return; const auto phone = fullNumber(); if (!AllowPhoneAttempt(phone)) { showPhoneError(langFactory(lng_bad_phone)); _phone->setFocus(); return; } hidePhoneError(); _checkRequest->start(1000); _sentPhone = phone; Core::App().mtp()->setUserPhone(_sentPhone); //_sentRequest = MTP::send(MTPauth_CheckPhone(MTP_string(_sentPhone)), rpcDone(&PhoneWidget::phoneCheckDone), rpcFail(&PhoneWidget::phoneSubmitFail)); _sentRequest = MTP::send( MTPauth_SendCode( MTP_string(_sentPhone), MTP_int(ApiId), MTP_string(ApiHash), MTP_codeSettings( MTP_flags(0), MTPstring())), rpcDone(&PhoneWidget::phoneSubmitDone), rpcFail(&PhoneWidget::phoneSubmitFail)); }
// For testing: Just apply random subset or your sticker sets as archived. bool ApplyArchivedResultFake() { auto sets = QVector<MTPStickerSetCovered>(); for (auto &set : Auth().data().stickerSetsRef()) { if ((set.flags & MTPDstickerSet::Flag::f_installed_date) && !(set.flags & MTPDstickerSet_ClientFlag::f_special)) { if (rand_value<uint32>() % 128 < 64) { const auto data = MTP_stickerSet( MTP_flags(set.flags | MTPDstickerSet::Flag::f_archived), MTP_int(set.installDate), MTP_long(set.id), MTP_long(set.access), MTP_string(set.title), MTP_string(set.shortName), MTP_photoSizeEmpty(MTP_string(QString())), MTP_int(0), MTP_int(set.count), MTP_int(set.hash)); sets.push_back(MTP_stickerSetCovered( data, MTP_documentEmpty(MTP_long(0)))); } } } if (sets.size() > 3) { sets = sets.mid(0, 3); } auto fakeResult = MTP_messages_stickerSetInstallResultArchive( MTP_vector<MTPStickerSetCovered>(sets)); ApplyArchivedResult(fakeResult.c_messages_stickerSetInstallResultArchive()); return true; }
void PhoneWidget::submit() { if (_sentRequest || isHidden()) return; if (!App::isValidPhone(fullNumber())) { showPhoneError(langFactory(lng_bad_phone)); _phone->setFocus(); return; } hidePhoneError(); _checkRequest->start(1000); _sentPhone = fullNumber(); Messenger::Instance().mtp()->setUserPhone(_sentPhone); //_sentRequest = MTP::send(MTPauth_CheckPhone(MTP_string(_sentPhone)), rpcDone(&PhoneWidget::phoneCheckDone), rpcFail(&PhoneWidget::phoneSubmitFail)); _sentRequest = MTP::send( MTPauth_SendCode( MTP_flags(0), MTP_string(_sentPhone), MTPBool(), MTP_int(ApiId), MTP_string(ApiHash)), rpcDone(&PhoneWidget::phoneSubmitDone), rpcFail(&PhoneWidget::phoneSubmitFail)); }
void Application::uploadProfilePhoto(const QImage &tosend, const PeerId &peerId) { PreparedPhotoThumbs photoThumbs; QVector<MTPPhotoSize> photoSizes; QPixmap thumb = QPixmap::fromImage(tosend.scaled(160, 160, Qt::KeepAspectRatio, Qt::SmoothTransformation)); photoThumbs.insert('a', thumb); photoSizes.push_back(MTP_photoSize(MTP_string("a"), MTP_fileLocationUnavailable(MTP_long(0), MTP_int(0), MTP_long(0)), MTP_int(thumb.width()), MTP_int(thumb.height()), MTP_int(0))); QPixmap full = QPixmap::fromImage(tosend); photoThumbs.insert('c', full); photoSizes.push_back(MTP_photoSize(MTP_string("c"), MTP_fileLocationUnavailable(MTP_long(0), MTP_int(0), MTP_long(0)), MTP_int(full.width()), MTP_int(full.height()), MTP_int(0))); QByteArray jpeg; QBuffer jpegBuffer(&jpeg); full.save(&jpegBuffer, "JPG", 87); PhotoId id = MTP::nonce<PhotoId>(); MTPPhoto photo(MTP_photo(MTP_long(id), MTP_long(0), MTP_int(MTP::authedId()), MTP_int(unixtime()), MTP_string(""), MTP_geoPointEmpty(), MTP_vector<MTPPhotoSize>(photoSizes))); QString file, filename; int32 filesize = 0; QByteArray data; ReadyLocalMedia ready(ToPreparePhoto, file, filename, filesize, data, id, id, peerId, photo, photoThumbs, MTP_documentEmpty(MTP_long(0)), jpeg); connect(App::uploader(), SIGNAL(photoReady(MsgId, const MTPInputFile &)), App::app(), SLOT(photoUpdated(MsgId, const MTPInputFile &)), Qt::UniqueConnection); MsgId newId = clientMsgId(); App::app()->regPhotoUpdate(peerId, newId); App::uploader()->uploadMedia(newId, ready); }
void IntroCode::onSendCall() { if (!--waitTillCall) { callTimer.stop(); MTP::send(MTPauth_SendCall(MTP_string(intro()->getPhone()), MTP_string(intro()->getPhoneHash())), rpcDone(&IntroCode::callDone)); } update(); }
void AddContactBox::onSave() { if (_addRequest) return; QString firstName = prepareText(_first->getLastText()); QString lastName = prepareText(_last->getLastText()); QString phone = _phone->getLastText().trimmed(); if (firstName.isEmpty() && lastName.isEmpty()) { if (_invertOrder) { _last->setFocus(); _last->showError(); } else { _first->setFocus(); _first->showError(); } return; } else if (!_user && !App::isValidPhone(phone)) { _phone->setFocus(); _phone->showError(); return; } if (firstName.isEmpty()) { firstName = lastName; lastName = QString(); } _sentName = firstName; if (_user) { _contactId = rand_value<uint64>(); QVector<MTPInputContact> v(1, MTP_inputPhoneContact(MTP_long(_contactId), MTP_string(_user->phone()), MTP_string(firstName), MTP_string(lastName))); _addRequest = MTP::send(MTPcontacts_ImportContacts(MTP_vector<MTPInputContact>(v), MTP_bool(false)), rpcDone(&AddContactBox::onSaveUserDone), rpcFail(&AddContactBox::onSaveUserFail)); } else { _contactId = rand_value<uint64>(); QVector<MTPInputContact> v(1, MTP_inputPhoneContact(MTP_long(_contactId), MTP_string(phone), MTP_string(firstName), MTP_string(lastName))); _addRequest = MTP::send(MTPcontacts_ImportContacts(MTP_vector<MTPInputContact>(v), MTP_bool(false)), rpcDone(&AddContactBox::onImportDone)); } }
void AddContactBox::onSend() { if (_addRequest) return; QString firstName = _firstInput.text().trimmed(), lastName = _lastInput.text().trimmed(), phone = _phoneInput.text().trimmed(); if (firstName.isEmpty() && lastName.isEmpty()) { _firstInput.setFocus(); _firstInput.notaBene(); return; } else if (!_peer && !App::isValidPhone(phone)) { _phoneInput.setFocus(); _phoneInput.notaBene(); return; } if (firstName.isEmpty()) { firstName = lastName; lastName = QString(); } _sentName = firstName; if (_peer == App::self()) { _addRequest = MTP::send(MTPaccount_UpdateProfile(MTP_string(firstName), MTP_string(lastName)), rpcDone(&AddContactBox::onSaveSelfDone), rpcFail(&AddContactBox::onSaveSelfFail)); } else if (_peer) { if (_peer->chat) { _addRequest = MTP::send(MTPmessages_EditChatTitle(MTP_int(App::chatFromPeer(_peer->id)), MTP_string(firstName)), rpcDone(&AddContactBox::onSaveChatDone), rpcFail(&AddContactBox::onSaveFail)); } else { _contactId = MTP::nonce<uint64>(); QVector<MTPInputContact> v(1, MTP_inputPhoneContact(MTP_long(_contactId), MTP_string(_peer->asUser()->phone), MTP_string(firstName), MTP_string(lastName))); _addRequest = MTP::send(MTPcontacts_ImportContacts(MTP_vector<MTPInputContact>(v), MTP_bool(false)), rpcDone(&AddContactBox::onSaveUserDone), rpcFail(&AddContactBox::onSaveFail)); } } else { _contactId = MTP::nonce<uint64>(); QVector<MTPInputContact> v(1, MTP_inputPhoneContact(MTP_long(_contactId), MTP_string(phone), MTP_string(firstName), MTP_string(lastName))); _addRequest = MTP::send(MTPcontacts_ImportContacts(MTP_vector<MTPInputContact>(v), MTP_bool(false)), rpcDone(&AddContactBox::onImportDone)); } }
void ConfirmPhoneBox::onCallStatusTimer() { if (_callStatus.state == CallState::Waiting) { if (--_callStatus.timeout <= 0) { _callStatus.state = CallState::Calling; _callTimer->stop(); MTP::send(MTPauth_ResendCode(MTP_string(_phone), MTP_string(_phoneHash)), rpcDone(&ConfirmPhoneBox::callDone)); } } update(); }
void IntroCode::onSubmitCode(bool force) { if (!force && (code.text() == sentCode || !code.isEnabled())) return; code.setDisabled(true); setFocus(); showError(""); checkRequest.start(1000); sentCode = code.text(); sentRequest = MTP::send(MTPauth_SignIn(MTP_string(intro()->getPhone()), MTP_string(intro()->getPhoneHash()), MTP_string(sentCode)), rpcDone(&IntroCode::codeSubmitDone), rpcFail(&IntroCode::codeSubmitFail)); }
RSAPublicKey::RSAPublicKey(const char *key) : impl_(new Impl(key)) { if (!impl_->rsa) return; int nBytes = BN_num_bytes(impl_->rsa->n); int eBytes = BN_num_bytes(impl_->rsa->e); std::string nStr(nBytes, 0), eStr(eBytes, 0); BN_bn2bin(impl_->rsa->n, (uchar*)&nStr[0]); BN_bn2bin(impl_->rsa->e, (uchar*)&eStr[0]); mtpBuffer tmp; MTP_string(nStr).write(tmp); MTP_string(eStr).write(tmp); uchar sha1Buffer[20]; impl_->fp = *(uint64*)(hashSha1(&tmp[0], tmp.size() * sizeof(mtpPrime), sha1Buffer) + 3); }
void ConfirmPhoneBox::checkPhoneAndHash() { if (_sendCodeRequestId) { return; } MTPaccount_SendConfirmPhoneCode::Flags flags = 0; _sendCodeRequestId = MTP::send(MTPaccount_SendConfirmPhoneCode(MTP_flags(flags), MTP_string(_hash), MTPBool()), rpcDone(&ConfirmPhoneBox::sendCodeDone), rpcFail(&ConfirmPhoneBox::sendCodeFail)); }
void PhoneWidget::toSignUp() { hideError(); // Hide error, but leave the signup label visible. _checkRequest->start(1000); _sentRequest = MTP::send(MTPauth_SendCode(MTP_flags(0), MTP_string(_sentPhone), MTPBool(), MTP_int(ApiId), MTP_string(ApiHash)), rpcDone(&PhoneWidget::phoneSubmitDone), rpcFail(&PhoneWidget::phoneSubmitFail)); }
void ConfirmPhoneBox::onSendCode() { if (_sendCodeRequestId) { return; } auto code = _code->getLastText(); if (code.isEmpty()) { _code->showError(); return; } _code->setDisabled(true); setFocus(); showError(QString()); _sendCodeRequestId = MTP::send(MTPaccount_ConfirmPhone(MTP_string(_phoneHash), MTP_string(_code->getLastText())), rpcDone(&ConfirmPhoneBox::confirmDone), rpcFail(&ConfirmPhoneBox::confirmFail)); }
void IntroPhone::toSignUp() { disableAll(); showError(""); checkRequest.start(1000); sentRequest = MTP::send(MTPauth_SendCode(MTP_string(sentPhone), MTP_int(0), MTP_int(ApiId), MTP_string(ApiHash), MTP_string(Application::language())), rpcDone(&IntroPhone::phoneSubmitDone), rpcFail(&IntroPhone::phoneSubmitFail)); }
void IntroPhone::toSignUp() { disableAll(); showError(QString()); checkRequest.start(1000); MTPauth_SendCode::Flags flags = 0; sentRequest = MTP::send(MTPauth_SendCode(MTP_flags(flags), MTP_string(sentPhone), MTPBool(), MTP_int(ApiId), MTP_string(ApiHash), MTP_string(Sandbox::LangSystemISO())), rpcDone(&IntroPhone::phoneSubmitDone), rpcFail(&IntroPhone::phoneSubmitFail)); }
void UsernameBox::onCheck() { if (_checkRequest) { MTP::cancel(_checkRequest); } QString name = getName(); if (name.size() >= MinUsernameLength) { _checkUsername = getName(); _checkRequest = MTP::send(MTPaccount_CheckUsername(MTP_string(name)), rpcDone(&UsernameBox::onCheckDone), rpcFail(&UsernameBox::onCheckFail)); } }
void ChangePhoneBox::EnterCode::submit() { if (_requestId) { return; } hideError(); const auto code = _code->getDigitsOnly(); _requestId = MTP::send(MTPaccount_ChangePhone( MTP_string(_phone), MTP_string(_hash), MTP_string(code) ), rpcDone([weak = make_weak(this)](const MTPUser &result) { App::feedUser(result); if (weak) { Ui::hideLayer(); } Ui::Toast::Show(lang(lng_change_phone_success)); }), rpcFail(crl::guard(this, [this](const RPCError &error) { return sendCodeFail(error); }))); }
void Application::photoUpdated(MsgId msgId, const MTPInputFile &file) { if (!App::self()) return; QMap<MsgId, PeerId>::iterator i = photoUpdates.find(msgId); if (i != photoUpdates.end()) { PeerId peer = i.value(); if (peer == App::self()->id) { MTP::send(MTPphotos_UploadProfilePhoto(file, MTP_string(""), MTP_inputGeoPointEmpty(), MTP_inputPhotoCrop(MTP_double(0), MTP_double(0), MTP_double(100))), rpcDone(&Application::selfPhotoDone), rpcFail(&Application::peerPhotoFail, peer)); } else { MTP::send(MTPmessages_EditChatPhoto(MTP_int(peer & 0xFFFFFFFF), MTP_inputChatUploadedPhoto(file, MTP_inputPhotoCrop(MTP_double(0), MTP_double(0), MTP_double(100)))), rpcDone(&Application::chatPhotoDone, peer), rpcFail(&Application::peerPhotoFail, peer)); } } }
void CodeWidget::onSendCall() { if (_callStatus == Widget::Data::CallStatus::Waiting) { if (--_callTimeout <= 0) { _callStatus = Widget::Data::CallStatus::Calling; _callTimer->stop(); _callRequestId = MTP::send(MTPauth_ResendCode(MTP_string(getData()->phone), MTP_bytes(getData()->phoneHash)), rpcDone(&CodeWidget::callDone)); } else { getData()->callStatus = _callStatus; getData()->callTimeout = _callTimeout; } updateCallText(); } }
void ChangePhoneBox::EnterPhone::submit() { if (_requestId) { return; } hideError(); auto phoneNumber = _phone->getLastText().trimmed(); _requestId = MTP::send(MTPaccount_SendChangePhoneCode(MTP_flags(0), MTP_string(phoneNumber), MTP_bool(false)), rpcDone(crl::guard(this, [this, phoneNumber](const MTPauth_SentCode &result) { return sendPhoneDone(phoneNumber, result); })), rpcFail(crl::guard(this, [this, phoneNumber](const RPCError &error) { return sendPhoneFail(phoneNumber, error); }))); }
void CreateGroupBox::onCreate() { if (_createRequestId) return; QString name = _name.text(); if (name.isEmpty()) { _name.setFocus(); _name.notaBene(); return; } _create.setDisabled(true); _name.setDisabled(true); _createRequestId = MTP::send(MTPmessages_CreateChat(_users, MTP_string(_name.text())), rpcDone(&CreateGroupBox::created), rpcFail(&CreateGroupBox::failed)); }
void Result::createDocument() { if (_document) return; if (!_thumb_url.isEmpty()) { _thumb = ImagePtr(_thumb_url, QSize(90, 90)); } QString mime = _content_type; QVector<MTPDocumentAttribute> attributes; QSize dimensions(_width, _height); if (_type == Type::Gif) { const char *filename = (mime == qstr("video/mp4") ? "animation.gif.mp4" : "animation.gif"); attributes.push_back(MTP_documentAttributeFilename(MTP_string(filename))); attributes.push_back(MTP_documentAttributeAnimated()); attributes.push_back(MTP_documentAttributeVideo(MTP_int(_duration), MTP_int(_width), MTP_int(_height))); } else if (_type == Type::Video) { attributes.push_back(MTP_documentAttributeVideo(MTP_int(_duration), MTP_int(_width), MTP_int(_height))); } else if (_type == Type::Audio) { MTPDdocumentAttributeAudio::Flags flags = 0; if (mime == qstr("audio/ogg")) { flags |= MTPDdocumentAttributeAudio::Flag::f_voice; } else { QStringList p = mimeTypeForName(mime).globPatterns(); QString pattern = p.isEmpty() ? QString() : p.front(); QString extension = pattern.isEmpty() ? qsl(".unknown") : pattern.replace('*', QString()); QString filename = filedialogDefaultName(qsl("inline"), extension, QString(), true); attributes.push_back(MTP_documentAttributeFilename(MTP_string(filename))); } attributes.push_back(MTP_documentAttributeAudio(MTP_flags(flags), MTP_int(_duration), MTPstring(), MTPstring(), MTPbytes())); } auto documentId = rand_value<DocumentId>(); _document = App::documentSet(documentId, nullptr, 0, 0, unixtime(), attributes, mime, _thumb, MTP::maindc(), 0, StorageImageLocation()); _document->setContentUrl(_content_url); }
void PhoneWidget::phoneCheckDone(const MTPauth_CheckedPhone &result) { stopCheck(); auto &d = result.c_auth_checkedPhone(); if (mtpIsTrue(d.vphone_registered)) { hidePhoneError(); _checkRequest->start(1000); _sentRequest = MTP::send(MTPauth_SendCode(MTP_flags(0), MTP_string(_sentPhone), MTPBool(), MTP_int(ApiId), MTP_string(ApiHash)), rpcDone(&PhoneWidget::phoneSubmitDone), rpcFail(&PhoneWidget::phoneSubmitFail)); } else { showSignup(); _sentRequest = 0; } }
void IntroPwdCheck::onSubmitPwd(bool force) { if (sentRequest) return; if (_pwdField.isHidden()) { if (!force && !_codeField.isEnabled()) return; QString code = _codeField.text().trimmed(); if (code.isEmpty()) { _codeField.notaBene(); return; } sentRequest = MTP::send(MTPauth_RecoverPassword(MTP_string(code)), rpcDone(&IntroPwdCheck::pwdSubmitDone, true), rpcFail(&IntroPwdCheck::codeSubmitFail)); } else { if (!force && !_pwdField.isEnabled()) return; _pwdField.setDisabled(true); setFocus(); showError(""); QByteArray pwdData = _salt + _pwdField.text().toUtf8() + _salt, pwdHash(32, Qt::Uninitialized); hashSha256(pwdData.constData(), pwdData.size(), pwdHash.data()); sentRequest = MTP::send(MTPauth_CheckPassword(MTP_string(pwdHash)), rpcDone(&IntroPwdCheck::pwdSubmitDone, false), rpcFail(&IntroPwdCheck::pwdSubmitFail)); } }
bool DcOptions::loadFromFile(const QString &path) { QVector<MTPDcOption> options; QFile f(path); if (!f.open(QIODevice::ReadOnly)) { LOG(("MTP Error: could not read '%1'").arg(path)); return false; } QTextStream stream(&f); stream.setCodec("UTF-8"); while (!stream.atEnd()) { auto line = stream.readLine(); auto components = line.split(QRegularExpression(R"(\s)"), QString::SkipEmptyParts); if (components.isEmpty() || components[0].startsWith('#')) { continue; } auto error = [line] { LOG(("MTP Error: in .tdesktop-endpoints expected 'dcId host port [tcpo_only] [media_only]', got '%1'").arg(line)); return false; }; if (components.size() < 3) { return error(); } auto dcId = components[0].toInt(); auto ip = components[1]; auto port = components[2].toInt(); auto host = QHostAddress(); if (dcId <= 0 || dcId >= internal::kDcShift || !host.setAddress(ip) || port <= 0) { return error(); } auto flags = MTPDdcOption::Flags(0); if (host.protocol() == QAbstractSocket::IPv6Protocol) { flags |= MTPDdcOption::Flag::f_ipv6; } for (auto &option : components.mid(3)) { if (option.startsWith('#')) { break; } else if (option == qstr("tcpo_only")) { flags |= MTPDdcOption::Flag::f_tcpo_only; } else if (option == qstr("media_only")) { flags |= MTPDdcOption::Flag::f_media_only; } else { return error(); } } options.push_back(MTP_dcOption(MTP_flags(flags), MTP_int(dcId), MTP_string(ip), MTP_int(port))); }
void IntroPhone::phoneCheckDone(const MTPauth_CheckedPhone &result) { stopCheck(); const MTPDauth_checkedPhone &d(result.c_auth_checkedPhone()); if (d.vphone_registered.v) { disableAll(); showError(""); checkRequest.start(1000); sentRequest = MTP::send(MTPauth_SendCode(MTP_string(sentPhone), MTP_int(5), MTP_int(ApiId), MTP_string(ApiHash), MTP_string(Application::language())), rpcDone(&IntroPhone::phoneSubmitDone), rpcFail(&IntroPhone::phoneSubmitFail)); } else { showError(lang(lng_bad_phone_noreg), true); enableAll(true); } }
void PhoneWidget::submit() { if (_sentRequest || isHidden()) return; if (!App::isValidPhone(fullNumber())) { showPhoneError(langFactory(lng_bad_phone)); _phone->setFocus(); return; } hidePhoneError(); _checkRequest->start(1000); _sentPhone = fullNumber(); _sentRequest = MTP::send(MTPauth_CheckPhone(MTP_string(_sentPhone)), rpcDone(&PhoneWidget::phoneCheckDone), rpcFail(&PhoneWidget::phoneSubmitFail)); }
void IntroPhone::onSubmitPhone() { if (sentRequest || isHidden()) return; if (!App::isValidPhone(fullNumber())) { showError(lang(lng_bad_phone)); phone.setFocus(); return; } disableAll(); showError(QString()); checkRequest.start(1000); sentPhone = fullNumber(); sentRequest = MTP::send(MTPauth_CheckPhone(MTP_string(sentPhone)), rpcDone(&IntroPhone::phoneCheckDone), rpcFail(&IntroPhone::phoneSubmitFail)); }
void IntroPhone::phoneCheckDone(const MTPauth_CheckedPhone &result) { stopCheck(); const auto &d(result.c_auth_checkedPhone()); if (mtpIsTrue(d.vphone_registered)) { disableAll(); showError(QString()); checkRequest.start(1000); MTPauth_SendCode::Flags flags = 0; sentRequest = MTP::send(MTPauth_SendCode(MTP_flags(flags), MTP_string(sentPhone), MTPBool(), MTP_int(ApiId), MTP_string(ApiHash), MTP_string(Sandbox::LangSystemISO())), rpcDone(&IntroPhone::phoneSubmitDone), rpcFail(&IntroPhone::phoneSubmitFail)); } else { showError(lang(lng_bad_phone_noreg), true); enableAll(true); sentRequest = 0; } }
void CodeWidget::submit() { const auto text = QString( _code->getLastText() ).remove( QRegularExpression("[^\\d]") ).mid(0, getData()->codeLength); if (_sentRequest || _sentCode == text || text.size() != getData()->codeLength) { return; } hideError(); _checkRequest->start(1000); _sentCode = text; getData()->pwdRequest = Core::CloudPasswordCheckRequest(); getData()->hasRecovery = false; getData()->pwdHint = QString(); getData()->pwdNotEmptyPassport = false; _sentRequest = MTP::send(MTPauth_SignIn(MTP_string(getData()->phone), MTP_bytes(getData()->phoneHash), MTP_string(_sentCode)), rpcDone(&CodeWidget::codeSubmitDone), rpcFail(&CodeWidget::codeSubmitFail)); }