mirror of
https://github.com/kotatogram/kotatogram-desktop
synced 2025-08-29 05:37:45 +00:00
[Option][Non-stored] Custom API ID and hash
This commit is contained in:
parent
826a0b935e
commit
f09d824616
@ -364,9 +364,12 @@ int main(int argc, char *argv[]) {
|
||||
bool startintray = false;
|
||||
bool customWorkingDir = false;
|
||||
bool justUpdate = false;
|
||||
bool useEnvApi = true;
|
||||
|
||||
char *key = 0;
|
||||
char *workdir = 0;
|
||||
char *customApiId = 0;
|
||||
char *customApiHash = 0;
|
||||
for (int i = 1; i < argc; ++i) {
|
||||
if (equal(argv[i], "-noupdate")) {
|
||||
needupdate = false;
|
||||
@ -395,6 +398,12 @@ int main(int argc, char *argv[]) {
|
||||
exePath = argv[i];
|
||||
} else if (equal(argv[i], "-argv0") && ++i < argc) {
|
||||
argv0 = argv[i];
|
||||
} else if (equal(argv[i], "-no-env-api")) {
|
||||
useEnvApi = false;
|
||||
} else if (equal(argv[i], "-api-id") && ++i < argc) {
|
||||
customApiId = argv[i];
|
||||
} else if (equal(argv[i], "-api-hash") && ++i < argc) {
|
||||
customApiHash = argv[i];
|
||||
}
|
||||
}
|
||||
if (exeName.empty() || exeName.find('/') != string::npos) {
|
||||
@ -502,6 +511,20 @@ int main(int argc, char *argv[]) {
|
||||
}
|
||||
args.push_back(nullptr);
|
||||
|
||||
if (!useEnvApi) push("-no-env-api");
|
||||
if (customApiId && customApiHash) {
|
||||
push("-api-id");
|
||||
push(customApiId);
|
||||
push("-api-hash");
|
||||
push(customApiHash);
|
||||
}
|
||||
|
||||
auto args = vector<char*>();
|
||||
for (auto &arg : values) {
|
||||
args.push_back(arg.data());
|
||||
}
|
||||
args.push_back(nullptr);
|
||||
|
||||
pid_t pid = fork();
|
||||
switch (pid) {
|
||||
case -1:
|
||||
|
@ -93,8 +93,10 @@ int main(int argc, const char * argv[]) {
|
||||
openLog();
|
||||
pid_t procId = 0;
|
||||
BOOL update = YES, toSettings = NO, autoStart = NO, startInTray = NO;
|
||||
BOOL customWorkingDir = NO;
|
||||
BOOL customWorkingDir = NO, useEnvApi = YES;
|
||||
NSString *key = nil;
|
||||
NSString *customApiId = nil;
|
||||
NSString *customApiHash = nil;
|
||||
for (int i = 0; i < argc; ++i) {
|
||||
if ([@"-workpath" isEqualToString:[NSString stringWithUTF8String:argv[i]]]) {
|
||||
if (++i < argc) {
|
||||
@ -120,6 +122,12 @@ int main(int argc, const char * argv[]) {
|
||||
customWorkingDir = YES;
|
||||
} else if ([@"-key" isEqualToString:[NSString stringWithUTF8String:argv[i]]]) {
|
||||
if (++i < argc) key = [NSString stringWithUTF8String:argv[i]];
|
||||
} else if ([@"-no-env-api" isEqualToString:[NSString stringWithUTF8String:argv[i]]]) {
|
||||
useEnvApi = NO;
|
||||
} else if ([@"-api-id" isEqualToString:[NSString stringWithUTF8String:argv[i]]]) {
|
||||
if (++i < argc) customApiId = [NSString stringWithUTF8String:argv[i]];
|
||||
} else if ([@"-api-hash" isEqualToString:[NSString stringWithUTF8String:argv[i]]]) {
|
||||
if (++i < argc) customApiHash = [NSString stringWithUTF8String:argv[i]];
|
||||
}
|
||||
}
|
||||
if (!workDir) {
|
||||
@ -261,6 +269,13 @@ int main(int argc, const char * argv[]) {
|
||||
[args addObject:@"-workdir"];
|
||||
[args addObject:workDir];
|
||||
}
|
||||
if (!useEnvApi) [args addObject:@"-no-env-api"];
|
||||
if (customApiId && customApiHash) {
|
||||
[args addObject:@"-api-id"];
|
||||
[args addObject:customApiId];
|
||||
[args addObject:@"-api-hash"];
|
||||
[args addObject:customApiHash];
|
||||
}
|
||||
writeLog([[NSArray arrayWithObjects:@"Running application '", appPath, @"' with args '", [args componentsJoinedByString:@"' '"], @"'..", nil] componentsJoinedByString:@""]);
|
||||
|
||||
for (int i = 0; i < 5; ++i) {
|
||||
|
@ -12,6 +12,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
bool _debug = false;
|
||||
|
||||
wstring updaterName, updaterDir, updateTo, exeName, customWorkingDir, customKeyFile;
|
||||
wstring customApiId, customApiHash;
|
||||
|
||||
bool equal(const wstring &a, const wstring &b) {
|
||||
return !_wcsicmp(a.c_str(), b.c_str());
|
||||
@ -344,6 +345,7 @@ int APIENTRY wWinMain(HINSTANCE instance, HINSTANCE prevInstance, LPWSTR cmdPara
|
||||
int argsCount;
|
||||
|
||||
bool needupdate = false, autostart = false, debug = false, writeprotected = false, startintray = false;
|
||||
bool useEnvApi = true;
|
||||
args = CommandLineToArgvW(GetCommandLine(), &argsCount);
|
||||
if (args) {
|
||||
for (int i = 1; i < argsCount; ++i) {
|
||||
@ -381,6 +383,14 @@ int APIENTRY wWinMain(HINSTANCE instance, HINSTANCE prevInstance, LPWSTR cmdPara
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else if (equal(args[i], L"-no-env-api")) {
|
||||
useEnvApi = false;
|
||||
} else if (equal(args[i], L"-api-id") && ++i < argsCount) {
|
||||
writeLog(std::wstring(L"Argument: ") + args[i]);
|
||||
customApiId = args[i];
|
||||
} else if (equal(args[i], L"-api-hash") && ++i < argsCount) {
|
||||
writeLog(std::wstring(L"Argument: ") + args[i]);
|
||||
customApiHash = args[i];
|
||||
}
|
||||
}
|
||||
if (exeName.empty()) {
|
||||
@ -432,6 +442,11 @@ int APIENTRY wWinMain(HINSTANCE instance, HINSTANCE prevInstance, LPWSTR cmdPara
|
||||
if (!customKeyFile.empty()) {
|
||||
targs += L" -key \"" + customKeyFile + L"\"";
|
||||
}
|
||||
if (!useEnvApi) targs += L" -no-env-api";
|
||||
if (!customApiId.empty() && !customApiHash.empty()) {
|
||||
targs += L" -api-id \"" + customApiId + L"\"";
|
||||
targs += L" -api-hash \"" + customApiHash + L"\"";
|
||||
}
|
||||
writeLog(L"Result arguments: " + targs);
|
||||
|
||||
bool executed = false;
|
||||
|
@ -63,35 +63,6 @@ v1/0UnkegO4jNkSY3ycDqn+T3NjxNxnL0EsKh7MjinyMUe3ZISzaIyrdq/8v4bvB\n\
|
||||
-----END RSA PUBLIC KEY-----\
|
||||
";
|
||||
|
||||
#if defined TDESKTOP_API_ID && defined TDESKTOP_API_HASH
|
||||
|
||||
constexpr auto ApiId = TDESKTOP_API_ID;
|
||||
constexpr auto ApiHash = QT_STRINGIFY(TDESKTOP_API_HASH);
|
||||
|
||||
#else // TDESKTOP_API_ID && TDESKTOP_API_HASH
|
||||
|
||||
// To build your version of Telegram Desktop you're required to provide
|
||||
// your own 'api_id' and 'api_hash' for the Telegram API access.
|
||||
//
|
||||
// How to obtain your 'api_id' and 'api_hash' is described here:
|
||||
// https://core.telegram.org/api/obtaining_api_id
|
||||
//
|
||||
// If you're building the application not for deployment,
|
||||
// but only for test purposes you can comment out the error below.
|
||||
//
|
||||
// This will allow you to use TEST ONLY 'api_id' and 'api_hash' which are
|
||||
// very limited by the Telegram API server.
|
||||
//
|
||||
// Your users will start getting internal server errors on login
|
||||
// if you deploy an app using those 'api_id' and 'api_hash'.
|
||||
|
||||
#error You are required to provide API_ID and API_HASH.
|
||||
|
||||
constexpr auto ApiId = 17349;
|
||||
constexpr auto ApiHash = "344583e45741c457fe1862106095a5eb";
|
||||
|
||||
#endif // TDESKTOP_API_ID && TDESKTOP_API_HASH
|
||||
|
||||
#if Q_BYTE_ORDER == Q_BIG_ENDIAN
|
||||
#error "Only little endian is supported!"
|
||||
#endif // Q_BYTE_ORDER == Q_BIG_ENDIAN
|
||||
|
@ -7,6 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
*/
|
||||
#include "core/crash_reports.h"
|
||||
|
||||
#include "kotato/kotato_settings.h"
|
||||
#include "kotato/kotato_version.h"
|
||||
#include "platform/platform_specific.h"
|
||||
#include "base/platform/base_platform_info.h"
|
||||
@ -317,7 +318,7 @@ QString PlatformString() {
|
||||
void StartCatching() {
|
||||
#ifndef TDESKTOP_DISABLE_CRASH_REPORTS
|
||||
ProcessAnnotations["Binary"] = cExeName().toUtf8().constData();
|
||||
ProcessAnnotations["ApiId"] = QString::number(ApiId).toUtf8().constData();
|
||||
ProcessAnnotations["ApiId"] = QString::number(::Kotato::JsonSettings::GetInt("api_id")).toUtf8().constData();
|
||||
ProcessAnnotations["Version"] = (cAlphaVersion()
|
||||
? u"%1 %2"_q.arg(cAlphaVersion()).arg(AppKotatoTestBranch)
|
||||
: (AppBetaVersion
|
||||
|
@ -27,6 +27,9 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
namespace Core {
|
||||
namespace {
|
||||
|
||||
constexpr auto kApiIdVarName = "KTGDESKTOP_API_ID"_cs;
|
||||
constexpr auto kApiHashVarName = "KTGDESKTOP_API_HASH"_cs;
|
||||
|
||||
uint64 InstallationTag = 0;
|
||||
|
||||
base::options::toggle OptionFreeType({
|
||||
@ -395,6 +398,15 @@ int Launcher::exec() {
|
||||
|
||||
// Must be started before Sandbox is created.
|
||||
Platform::start();
|
||||
|
||||
if (::Kotato::JsonSettings::GetBool("api_use_env")
|
||||
&& qEnvironmentVariableIsSet(kApiIdVarName.utf8().constData())
|
||||
&& qEnvironmentVariableIsSet(kApiHashVarName.utf8().constData())) {
|
||||
::Kotato::JsonSettings::Set("api_id", qgetenv(kApiIdVarName.utf8().constData()).toInt());
|
||||
::Kotato::JsonSettings::Set("api_hash", QString::fromLatin1(qgetenv(kApiHashVarName.utf8().constData())));
|
||||
::Kotato::JsonSettings::Set("api_start_params", false);
|
||||
}
|
||||
|
||||
auto result = executeApplication();
|
||||
|
||||
DEBUG_LOG(("Kotatogram finished, result: %1").arg(result));
|
||||
@ -529,6 +541,9 @@ void Launcher::processArguments() {
|
||||
{ "-workdir" , KeyFormat::OneValue },
|
||||
{ "--" , KeyFormat::OneValue },
|
||||
{ "-scale" , KeyFormat::OneValue },
|
||||
{ "-no-env-api" , KeyFormat::NoValues },
|
||||
{ "-api-id" , KeyFormat::OneValue },
|
||||
{ "-api-hash" , KeyFormat::OneValue },
|
||||
};
|
||||
auto parseResult = QMap<QByteArray, QStringList>();
|
||||
auto parsingKey = QByteArray();
|
||||
@ -583,6 +598,15 @@ void Launcher::processArguments() {
|
||||
? kScaleAuto
|
||||
: value;
|
||||
}
|
||||
|
||||
::Kotato::JsonSettings::Set("api_use_env", !parseResult.contains("-no-env-api"));
|
||||
auto customApiId = parseResult.value("-api-id", {}).join(QString()).toInt();
|
||||
auto customApiHash = parseResult.value("-api-hash", {}).join(QString());
|
||||
if (customApiId > 0 && !customApiHash.isEmpty()) {
|
||||
::Kotato::JsonSettings::Set("api_id", customApiId);
|
||||
::Kotato::JsonSettings::Set("api_hash", customApiHash);
|
||||
::Kotato::JsonSettings::Set("api_start_params", true);
|
||||
}
|
||||
}
|
||||
|
||||
int Launcher::executeApplication() {
|
||||
|
@ -7,6 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
*/
|
||||
#include "intro/intro_phone.h"
|
||||
|
||||
#include "kotato/kotato_settings.h"
|
||||
#include "lang/lang_keys.h"
|
||||
#include "intro/intro_code.h"
|
||||
#include "intro/intro_qr.h"
|
||||
@ -194,8 +195,8 @@ void PhoneWidget::submit() {
|
||||
api().instance().setUserPhone(_sentPhone);
|
||||
_sentRequest = api().request(MTPauth_SendCode(
|
||||
MTP_string(_sentPhone),
|
||||
MTP_int(ApiId),
|
||||
MTP_string(ApiHash),
|
||||
MTP_int(::Kotato::JsonSettings::GetInt("api_id")),
|
||||
MTP_string(::Kotato::JsonSettings::GetString("api_hash")),
|
||||
MTP_codeSettings(
|
||||
MTP_flags(0),
|
||||
MTPVector<MTPbytes>(),
|
||||
|
@ -7,6 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
*/
|
||||
#include "intro/intro_qr.h"
|
||||
|
||||
#include "kotato/kotato_settings.h"
|
||||
#include "boxes/abstract_box.h"
|
||||
#include "intro/intro_phone.h"
|
||||
#include "intro/intro_widget.h"
|
||||
@ -318,8 +319,8 @@ void QrWidget::refreshCode() {
|
||||
return;
|
||||
}
|
||||
_requestId = api().request(MTPauth_ExportLoginToken(
|
||||
MTP_int(ApiId),
|
||||
MTP_string(ApiHash),
|
||||
MTP_int(::Kotato::JsonSettings::GetInt("api_id")),
|
||||
MTP_string(::Kotato::JsonSettings::GetString("api_hash")),
|
||||
MTP_vector<MTPlong>(0)
|
||||
)).done([=](const MTPauth_LoginToken &result) {
|
||||
handleTokenResult(result);
|
||||
|
@ -167,6 +167,55 @@ struct Definition {
|
||||
const std::map<QString, Definition, std::greater<QString>> DefinitionMap {
|
||||
|
||||
// Non-stored settings
|
||||
|
||||
// To build your version of Kotatogram Desktop you're required to provide
|
||||
// your own 'api_id' and 'api_hash' for the Telegram API access.
|
||||
//
|
||||
// How to obtain your 'api_id' and 'api_hash' is described here:
|
||||
// https://core.telegram.org/api/obtaining_api_id
|
||||
//
|
||||
// By default Kotatogram provides empty 'api_id' and 'api_hash'
|
||||
// since you can set it them in runtime. They can be set with
|
||||
// KTGDESKTOP_API_ID and KTGDESKTOP_API_HASH environment variables.
|
||||
// You must set both variables for it to work.
|
||||
//
|
||||
// As an alternative, you can use -api-id <id> and -api_hash <hash>
|
||||
// start parameters. Note that environment variables have priority
|
||||
// over start parameters, so you should use -no-env-api if you don't
|
||||
// want them. And as with environment variables, both -api-id and
|
||||
// -api_hash must be set for it to work.
|
||||
//
|
||||
// If 'api_id' and 'api_hash' are empty, and they're not set by any
|
||||
// of these parameters, you won't be able to connect to Telegram at all.
|
||||
// Sessions created on TDesktop + forks (including Kotatogram) might
|
||||
// work, but it could be risky, so be careful with it.
|
||||
{ "api_id", {
|
||||
.storage = SettingStorage::None,
|
||||
.type = SettingType::IntSetting,
|
||||
#if defined TDESKTOP_API_ID && defined TDESKTOP_API_HASH
|
||||
.defaultValue = TDESKTOP_API_ID,
|
||||
#else
|
||||
.defaultValue = 0,
|
||||
#endif
|
||||
}},
|
||||
{ "api_hash", {
|
||||
.storage = SettingStorage::None,
|
||||
.type = SettingType::QStringSetting,
|
||||
#if defined TDESKTOP_API_ID && defined TDESKTOP_API_HASH
|
||||
.defaultValue = QT_STRINGIFY(TDESKTOP_API_HASH),
|
||||
#else
|
||||
.defaultValue = QString(),
|
||||
#endif
|
||||
}},
|
||||
{ "api_use_env", {
|
||||
.storage = SettingStorage::None,
|
||||
.type = SettingType::BoolSetting,
|
||||
.defaultValue = true, }},
|
||||
{ "api_start_params", {
|
||||
.storage = SettingStorage::None,
|
||||
.type = SettingType::BoolSetting,
|
||||
.defaultValue = false, }},
|
||||
|
||||
// Stored settings
|
||||
};
|
||||
|
||||
|
@ -7,6 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
*/
|
||||
#include "mtproto/session_private.h"
|
||||
|
||||
#include "kotato/kotato_settings.h"
|
||||
#include "kotato/kotato_version.h"
|
||||
#include "mtproto/details/mtproto_bound_key_creator.h"
|
||||
#include "mtproto/details/mtproto_dcenter.h"
|
||||
@ -685,7 +686,7 @@ void SessionPrivate::tryToSend() {
|
||||
initWrapper = MTPInitConnection<SerializedRequest>(
|
||||
MTP_flags(Flag::f_params
|
||||
| (mtprotoProxy ? Flag::f_proxy : Flag(0))),
|
||||
MTP_int(ApiId),
|
||||
MTP_int(::Kotato::JsonSettings::GetInt("api_id")),
|
||||
MTP_string(deviceModel),
|
||||
MTP_string(systemVersion),
|
||||
MTP_string(appVersion),
|
||||
|
@ -7,6 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
*/
|
||||
#include "platform/linux/launcher_linux.h"
|
||||
|
||||
#include "kotato/kotato_settings.h"
|
||||
#include "core/crash_reports.h"
|
||||
#include "core/update_checker.h"
|
||||
#include "webview/platform/linux/webview_linux_webkitgtk.h"
|
||||
@ -104,6 +105,17 @@ bool Launcher::launchUpdater(UpdaterLaunch action) {
|
||||
}
|
||||
}
|
||||
|
||||
if (!::Kotato::JsonSettings::GetBool("api_use_env")) {
|
||||
argumentsList.push_back("-no-env-api");
|
||||
}
|
||||
|
||||
if (::Kotato::JsonSettings::GetBool("api_start_params")) {
|
||||
argumentsList.push_back("-api-id");
|
||||
argumentsList.push_back(std::to_string(::Kotato::JsonSettings::GetInt("api_id")));
|
||||
argumentsList.push_back("-api-hash");
|
||||
argumentsList.push_back(::Kotato::JsonSettings::GetString("api_hash").toStdString());
|
||||
}
|
||||
|
||||
Logs::closeMain();
|
||||
CrashReports::Finish();
|
||||
|
||||
|
@ -7,6 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
*/
|
||||
#include "platform/mac/launcher_mac.h"
|
||||
|
||||
#include "kotato/kotato_settings.h"
|
||||
#include "core/crash_reports.h"
|
||||
#include "core/update_checker.h"
|
||||
#include "base/base_file_utilities.h"
|
||||
@ -67,6 +68,13 @@ bool Launcher::launchUpdater(UpdaterLaunch action) {
|
||||
if (customWorkingDir()) {
|
||||
[args addObject:@"-workdir_custom"];
|
||||
}
|
||||
if (!::Kotato::JsonSettings::GetBool("api_use_env")) [args addObject:@"-no-env-api"];
|
||||
if (::Kotato::JsonSettings::GetBool("api_start_params")) {
|
||||
[args addObject:@"-api-id"];
|
||||
[args addObject:Q2NSString(QString::number(::Kotato::JsonSettings::GetInt("api_id")))];
|
||||
[args addObject:@"-api-hash"];
|
||||
[args addObject:Q2NSString(::Kotato::JsonSettings::GetString("api_hash"))];
|
||||
}
|
||||
|
||||
DEBUG_LOG(("Application Info: executing %1 %2").arg(NS2QString(path)).arg(NS2QString([args componentsJoinedByString:@" "])));
|
||||
Logs::closeMain();
|
||||
|
@ -7,6 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
*/
|
||||
#include "platform/win/launcher_win.h"
|
||||
|
||||
#include "kotato/kotato_settings.h"
|
||||
#include "core/crash_reports.h"
|
||||
#include "core/update_checker.h"
|
||||
|
||||
@ -90,6 +91,16 @@ bool Launcher::launchUpdater(UpdaterLaunch action) {
|
||||
pushArgument('"' + cExeDir() + '"');
|
||||
}
|
||||
}
|
||||
|
||||
if (!::Kotato::JsonSettings::GetBool("api_use_env")) {
|
||||
pushArgument(qsl("-no-env-api"));
|
||||
}
|
||||
if (::Kotato::JsonSettings::GetBool("api_start_params")) {
|
||||
pushArgument(qsl("-api-id"));
|
||||
pushArgument('"' + QString::number(::Kotato::JsonSettings::GetInt("api_id")) + '"');
|
||||
pushArgument(qsl("-api-hash"));
|
||||
pushArgument('"' + ::Kotato::JsonSettings::GetString("api_hash") + '"');
|
||||
}
|
||||
return launch(operation, binaryPath, argumentsList);
|
||||
}
|
||||
|
||||
|
@ -14,29 +14,6 @@ if (TDESKTOP_API_TEST)
|
||||
set(TDESKTOP_API_HASH 344583e45741c457fe1862106095a5eb)
|
||||
endif()
|
||||
|
||||
if (TDESKTOP_API_ID STREQUAL "0" OR TDESKTOP_API_HASH STREQUAL "")
|
||||
message(FATAL_ERROR
|
||||
" \n"
|
||||
" PROVIDE: -D TDESKTOP_API_ID=[API_ID] -D TDESKTOP_API_HASH=[API_HASH]\n"
|
||||
" \n"
|
||||
" > To build your version of Telegram Desktop you're required to provide\n"
|
||||
" > your own 'api_id' and 'api_hash' for the Telegram API access.\n"
|
||||
" >\n"
|
||||
" > How to obtain your 'api_id' and 'api_hash' is described here:\n"
|
||||
" > https://core.telegram.org/api/obtaining_api_id\n"
|
||||
" >\n"
|
||||
" > If you're building the application not for deployment,\n"
|
||||
" > but only for test purposes you can use TEST ONLY credentials,\n"
|
||||
" > which are very limited by the Telegram API server:\n"
|
||||
" >\n"
|
||||
" > api_id: 17349\n"
|
||||
" > api_hash: 344583e45741c457fe1862106095a5eb\n"
|
||||
" >\n"
|
||||
" > Your users will start getting internal server errors on login\n"
|
||||
" > if you deploy an app using those 'api_id' and 'api_hash'.\n"
|
||||
" ")
|
||||
endif()
|
||||
|
||||
if (DESKTOP_APP_DISABLE_AUTOUPDATE)
|
||||
target_compile_definitions(Telegram PRIVATE TDESKTOP_DISABLE_AUTOUPDATE)
|
||||
endif()
|
||||
|
Loading…
x
Reference in New Issue
Block a user