NOISSUE Provide dummy implementation for the secrets library
This commit is contained in:
		@@ -289,7 +289,10 @@ add_subdirectory(buildconfig)
 | 
			
		||||
 | 
			
		||||
if(MultiMC_EMBED_SECRETS)
 | 
			
		||||
    add_subdirectory(secrets)
 | 
			
		||||
else()
 | 
			
		||||
    add_subdirectory(notsecrets)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# NOTE: this must always be last to appease the CMake deity of quirky install command evaluation order.
 | 
			
		||||
add_subdirectory(launcher)
 | 
			
		||||
 
 | 
			
		||||
@@ -949,9 +949,7 @@ install(TARGETS MultiMC
 | 
			
		||||
    RUNTIME DESTINATION ${BINARY_DEST_DIR} COMPONENT Runtime
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
if(MultiMC_EMBED_SECRETS)
 | 
			
		||||
    target_link_libraries(MultiMC_logic secrets)
 | 
			
		||||
endif()
 | 
			
		||||
target_link_libraries(MultiMC_logic secrets)
 | 
			
		||||
 | 
			
		||||
#### The MultiMC bundle mess! ####
 | 
			
		||||
# Bundle utilities are used to complete the portable packages - they add all the libraries that would otherwise be missing on the target system.
 | 
			
		||||
 
 | 
			
		||||
@@ -18,9 +18,7 @@
 | 
			
		||||
#include "katabasis/Globals.h"
 | 
			
		||||
#include "AuthRequest.h"
 | 
			
		||||
 | 
			
		||||
#ifdef EMBED_SECRETS
 | 
			
		||||
#include "Secrets.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "Env.h"
 | 
			
		||||
 | 
			
		||||
@@ -53,13 +51,18 @@ void AuthContext::finishActivity() {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AuthContext::initMSA() {
 | 
			
		||||
#ifdef EMBED_SECRETS
 | 
			
		||||
    if(m_oauth2) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    auto clientId = Secrets::getMSAClientID('-');
 | 
			
		||||
    if(clientId.isEmpty()) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Katabasis::OAuth2::Options opts;
 | 
			
		||||
    opts.scope = "XboxLive.signin offline_access";
 | 
			
		||||
    opts.clientIdentifier = Secrets::getMSAClientID('-');
 | 
			
		||||
    opts.clientIdentifier = clientId;
 | 
			
		||||
    opts.authorizationUrl = "https://login.microsoftonline.com/consumers/oauth2/v2.0/devicecode";
 | 
			
		||||
    opts.accessTokenUrl = "https://login.microsoftonline.com/consumers/oauth2/v2.0/token";
 | 
			
		||||
    opts.listenerPorts = {28562, 28563, 28564, 28565, 28566};
 | 
			
		||||
@@ -71,7 +74,6 @@ void AuthContext::initMSA() {
 | 
			
		||||
    connect(m_oauth2, &OAuth2::linkingSucceeded, this, &AuthContext::onOAuthLinkingSucceeded);
 | 
			
		||||
    connect(m_oauth2, &OAuth2::showVerificationUriAndCode, this, &AuthContext::showVerificationUriAndCode);
 | 
			
		||||
    connect(m_oauth2, &OAuth2::activityChanged, this, &AuthContext::onOAuthActivityChanged);
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AuthContext::initMojang() {
 | 
			
		||||
 
 | 
			
		||||
@@ -37,6 +37,8 @@
 | 
			
		||||
#include "BuildConfig.h"
 | 
			
		||||
#include <dialogs/MSALoginDialog.h>
 | 
			
		||||
 | 
			
		||||
#include "Secrets.h"
 | 
			
		||||
 | 
			
		||||
AccountListPage::AccountListPage(QWidget *parent)
 | 
			
		||||
    : QMainWindow(parent), ui(new Ui::AccountListPage)
 | 
			
		||||
{
 | 
			
		||||
@@ -70,11 +72,8 @@ AccountListPage::AccountListPage(QWidget *parent)
 | 
			
		||||
 | 
			
		||||
    updateButtonStates();
 | 
			
		||||
 | 
			
		||||
    // Xbox authentication won't work without a client identifier, so disable the button
 | 
			
		||||
    // if the build didn't specify one (GH-4012)
 | 
			
		||||
#ifndef EMBED_SECRETS
 | 
			
		||||
    ui->actionAddMicrosoft->setVisible(false);
 | 
			
		||||
#endif
 | 
			
		||||
    // Xbox authentication won't work without a client identifier, so disable the button if it is missing
 | 
			
		||||
    ui->actionAddMicrosoft->setVisible(Secrets::hasMSAClientID());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
AccountListPage::~AccountListPage()
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								notsecrets/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								notsecrets/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
			
		||||
add_library(secrets STATIC Secrets.cpp Secrets.h)
 | 
			
		||||
target_link_libraries(secrets Qt5::Core)
 | 
			
		||||
target_compile_definitions(secrets PUBLIC -DEMBED_SECRETS)
 | 
			
		||||
target_include_directories(secrets PUBLIC .)
 | 
			
		||||
							
								
								
									
										42
									
								
								notsecrets/Secrets.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								notsecrets/Secrets.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,42 @@
 | 
			
		||||
#include "Secrets.h"
 | 
			
		||||
 | 
			
		||||
#include <array>
 | 
			
		||||
#include <cstdio>
 | 
			
		||||
 | 
			
		||||
namespace {
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This is the MSA client ID. It is confidential and should not be reused.
 | 
			
		||||
 * You can obtain one for yourself by using azure app registration:
 | 
			
		||||
 * https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-register-app
 | 
			
		||||
 *
 | 
			
		||||
 * The app registration should:
 | 
			
		||||
 * - Be only for personal accounts.
 | 
			
		||||
 * - Not have any redirect URI.
 | 
			
		||||
 * - Not have any platform.
 | 
			
		||||
 * - Have no credentials.
 | 
			
		||||
 * - No certificates.
 | 
			
		||||
 * - No client secrets.
 | 
			
		||||
 * - Enable 'Live SDK support' for access to XBox APIs.
 | 
			
		||||
 * - Enable 'public client flows' for OAuth2 device flow.
 | 
			
		||||
 *
 | 
			
		||||
 * By putting one in here, you accept the terms and conditions for using the MS Identity Plaform and assume all responsibilities associated with it.
 | 
			
		||||
 * See: https://docs.microsoft.com/en-us/legal/microsoft-identity-platform/terms-of-use
 | 
			
		||||
 *
 | 
			
		||||
 * Above all else, do not impersonate other applications! This includes the Mojang Launcher and MultiMC - your builds are *NOT* MultiMC.
 | 
			
		||||
 *
 | 
			
		||||
 * If you intend to base your own launcher on this code, take care and customize this to obfuscate the client ID, so it cannot be trivially found by casual attackers.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
QString MSAClientID = "";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
namespace Secrets {
 | 
			
		||||
bool hasMSAClientID() {
 | 
			
		||||
    return !MSAClientID.isEmpty();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QString getMSAClientID(uint8_t separator) {
 | 
			
		||||
    return MSAClientID;
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										8
									
								
								notsecrets/Secrets.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								notsecrets/Secrets.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
#include <QString>
 | 
			
		||||
#include <cstdint>
 | 
			
		||||
 | 
			
		||||
namespace Secrets {
 | 
			
		||||
bool hasMSAClientID();
 | 
			
		||||
QString getMSAClientID(uint8_t separator);
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user