mirror of
https://github.com/end-4/dots-hyprland.git
synced 2026-06-05 14:59:27 -05:00
94 lines
2.6 KiB
QML
94 lines
2.6 KiB
QML
pragma Singleton
|
|
pragma ComponentBehavior: Bound
|
|
import QtQuick
|
|
import Quickshell
|
|
import qs.modules.common.utils
|
|
|
|
Singleton {
|
|
id: root
|
|
|
|
property var keyContent: ({})
|
|
property string keyProjectId: keyContent.project_id
|
|
property bool keyError: false
|
|
property bool keyReady: false
|
|
property string token: ""
|
|
property bool tokenError: false
|
|
property bool tokenReady: false
|
|
readonly property string projectId: keyProjectId
|
|
|
|
readonly property bool loaded: keyReady && tokenReady
|
|
|
|
readonly property string tokenForKeyScriptPath: Quickshell.shellPath("services/gCloud/token-from-key-venv.sh")
|
|
|
|
function load() {
|
|
// Dummy for init
|
|
}
|
|
|
|
function setKeyJson(str: string): bool {
|
|
try {
|
|
var keyData = JSON.parse(str)
|
|
KeyringStorage.setNestedField(["googleCloud", "serviceAccountKey"], keyData);
|
|
return true;
|
|
} catch(e) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function getToken() {
|
|
if (root.keyError) {
|
|
root.tokenError = true;
|
|
root.tokenReady = true;
|
|
return;
|
|
}
|
|
tokenProc.runSequence([(() => { // prep token fetcher
|
|
tokenProc.environment.SERVICE_KEY_CONTENT = JSON.stringify(root.keyContent);
|
|
tokenProc.command = [ //
|
|
"bash", "-c" //
|
|
, `${tokenForKeyScriptPath} "$SERVICE_KEY_CONTENT"`];
|
|
}), [] // run token fetcher
|
|
, (out => {
|
|
if (out.startsWith("Error")) {
|
|
root.tokenError = true;
|
|
} else {
|
|
root.tokenError = false;
|
|
root.token = out.trim();
|
|
}
|
|
root.tokenReady = true;
|
|
})]);
|
|
}
|
|
|
|
function loadKeyIfPossible() {
|
|
if (KeyringStorage.loaded) {
|
|
root.keyContent = KeyringStorage.keyringData?.googleCloud?.serviceAccountKey;
|
|
if (!root.keyContent?.project_id) {
|
|
root.keyError = true;
|
|
} else {
|
|
root.keyError = false;
|
|
root.keyProjectId = root.keyContent.project_id;
|
|
}
|
|
root.keyReady = true;
|
|
root.getToken();
|
|
} else {
|
|
KeyringStorage.fetchKeyringData();
|
|
}
|
|
}
|
|
|
|
Component.onCompleted: {
|
|
loadKeyIfPossible();
|
|
}
|
|
|
|
Connections {
|
|
target: KeyringStorage
|
|
function onLoadedChanged() {
|
|
root.loadKeyIfPossible();
|
|
}
|
|
function onDataChanged() {
|
|
root.loadKeyIfPossible();
|
|
}
|
|
}
|
|
|
|
MultiTurnProcess {
|
|
id: tokenProc
|
|
}
|
|
}
|