stable result
This commit is contained in:
parent
588801ea06
commit
088ec70928
8
.idea/.gitignore
generated
vendored
8
.idea/.gitignore
generated
vendored
@ -1,8 +0,0 @@
|
|||||||
# Default ignored files
|
|
||||||
/shelf/
|
|
||||||
/workspace.xml
|
|
||||||
# Editor-based HTTP Client requests
|
|
||||||
/httpRequests/
|
|
||||||
# Datasource local storage ignored files
|
|
||||||
/dataSources/
|
|
||||||
/dataSources.local.xml
|
|
7
.idea/SkirdaElectronLauncher.iml
generated
7
.idea/SkirdaElectronLauncher.iml
generated
@ -1,4 +1,9 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<module version="4">
|
<module type="WEB_MODULE" version="4">
|
||||||
<component name="Go" enabled="true" />
|
<component name="Go" enabled="true" />
|
||||||
|
<component name="NewModuleRootManager">
|
||||||
|
<content url="file://$MODULE_DIR$" />
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
</module>
|
</module>
|
1
.idea/codeStyles/Project.xml
generated
1
.idea/codeStyles/Project.xml
generated
@ -1,5 +1,6 @@
|
|||||||
<component name="ProjectCodeStyleConfiguration">
|
<component name="ProjectCodeStyleConfiguration">
|
||||||
<code_scheme name="Project" version="173">
|
<code_scheme name="Project" version="173">
|
||||||
|
<option name="LINE_SEPARATOR" value=" " />
|
||||||
<JSCodeStyleSettings version="0">
|
<JSCodeStyleSettings version="0">
|
||||||
<option name="USE_SEMICOLON_AFTER_STATEMENT" value="false" />
|
<option name="USE_SEMICOLON_AFTER_STATEMENT" value="false" />
|
||||||
<option name="FORCE_SEMICOLON_STYLE" value="true" />
|
<option name="FORCE_SEMICOLON_STYLE" value="true" />
|
||||||
|
6
.idea/jsLibraryMappings.xml
generated
6
.idea/jsLibraryMappings.xml
generated
@ -1,6 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="JavaScriptLibraryMappings">
|
|
||||||
<includedPredefinedLibrary name="Node.js Core" />
|
|
||||||
</component>
|
|
||||||
</project>
|
|
104
.idea/workspace.xml
generated
Normal file
104
.idea/workspace.xml
generated
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="AutoImportSettings">
|
||||||
|
<option name="autoReloadType" value="ALL" />
|
||||||
|
</component>
|
||||||
|
<component name="ChangeListManager">
|
||||||
|
<list default="true" id="efee9cb0-966d-4623-845a-f3b0398ae3ab" name="Changes" comment="">
|
||||||
|
<change afterPath="$PROJECT_DIR$/app/assets/js/scripts/skirda/auth/telegram.js" afterDir="false" />
|
||||||
|
<change afterPath="$PROJECT_DIR$/app/loginSkirdaTelegram.ejs" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/.idea/.gitignore" beforeDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/.idea/SkirdaElectronLauncher.iml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/SkirdaElectronLauncher.iml" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/.idea/codeStyles/Project.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/codeStyles/Project.xml" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/.idea/jsLibraryMappings.xml" beforeDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/app/app.ejs" beforeDir="false" afterPath="$PROJECT_DIR$/app/app.ejs" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/app/assets/js/authmanager.js" beforeDir="false" afterPath="$PROJECT_DIR$/app/assets/js/authmanager.js" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/app/assets/js/configmanager.js" beforeDir="false" afterPath="$PROJECT_DIR$/app/assets/js/configmanager.js" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/app/assets/js/distromanager.js" beforeDir="false" afterPath="$PROJECT_DIR$/app/assets/js/distromanager.js" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/app/assets/js/scripts/landing.js" beforeDir="false" afterPath="$PROJECT_DIR$/app/assets/js/scripts/landing.js" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/app/assets/js/scripts/loginOptions.js" beforeDir="false" afterPath="$PROJECT_DIR$/app/assets/js/scripts/loginOptions.js" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/app/assets/js/scripts/loginSkirdaDiscord.js" beforeDir="false" afterPath="$PROJECT_DIR$/app/assets/js/scripts/loginSkirdaDiscord.js" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/app/assets/js/scripts/settings.js" beforeDir="false" afterPath="$PROJECT_DIR$/app/assets/js/scripts/settings.js" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/app/assets/js/scripts/uibinder.js" beforeDir="false" afterPath="$PROJECT_DIR$/app/assets/js/scripts/uibinder.js" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/app/loginOptions.ejs" beforeDir="false" afterPath="$PROJECT_DIR$/app/loginOptions.ejs" afterDir="false" />
|
||||||
|
</list>
|
||||||
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||||
|
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||||
|
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||||
|
</component>
|
||||||
|
<component name="FileTemplateManagerImpl">
|
||||||
|
<option name="RECENT_TEMPLATES">
|
||||||
|
<list>
|
||||||
|
<option value="JavaScript File" />
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
<component name="GOROOT" url="file:///usr/lib/go" />
|
||||||
|
<component name="Git.Settings">
|
||||||
|
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
||||||
|
</component>
|
||||||
|
<component name="ProjectColorInfo">{
|
||||||
|
"customColor": "",
|
||||||
|
"associatedIndex": 6
|
||||||
|
}</component>
|
||||||
|
<component name="ProjectId" id="2s9MOcrLwV3Eo1Om9BlW30GzkjW" />
|
||||||
|
<component name="ProjectViewState">
|
||||||
|
<option name="hideEmptyMiddlePackages" value="true" />
|
||||||
|
<option name="showLibraryContents" value="true" />
|
||||||
|
</component>
|
||||||
|
<component name="PropertiesComponent"><![CDATA[{
|
||||||
|
"keyToString": {
|
||||||
|
"RunOnceActivity.ShowReadmeOnStart": "true",
|
||||||
|
"RunOnceActivity.git.unshallow": "true",
|
||||||
|
"RunOnceActivity.go.formatter.settings.were.checked": "true",
|
||||||
|
"RunOnceActivity.go.migrated.go.modules.settings": "true",
|
||||||
|
"RunOnceActivity.go.modules.go.list.on.any.changes.was.set": "true",
|
||||||
|
"git-widget-placeholder": "offline-mode",
|
||||||
|
"go.import.settings.migrated": "true",
|
||||||
|
"go.sdk.automatically.set": "true",
|
||||||
|
"last_opened_file_path": "/home/dart/repo/skirda/SkirdaElectronLauncher",
|
||||||
|
"node.js.detected.package.eslint": "true",
|
||||||
|
"node.js.selected.package.eslint": "(autodetect)",
|
||||||
|
"nodejs_package_manager_path": "npm",
|
||||||
|
"npm.start.executor": "Debug",
|
||||||
|
"ts.external.directory.path": "/opt/goland/plugins/javascript-plugin/jsLanguageServicesImpl/external"
|
||||||
|
}
|
||||||
|
}]]></component>
|
||||||
|
<component name="RecentsManager">
|
||||||
|
<key name="CopyFile.RECENT_KEYS">
|
||||||
|
<recent name="$PROJECT_DIR$/app" />
|
||||||
|
</key>
|
||||||
|
<key name="MoveFile.RECENT_KEYS">
|
||||||
|
<recent name="$PROJECT_DIR$/app/assets/js/scripts/skirda/auth" />
|
||||||
|
<recent name="$PROJECT_DIR$/app/assets/js/scripts" />
|
||||||
|
</key>
|
||||||
|
</component>
|
||||||
|
<component name="RunManager">
|
||||||
|
<configuration name="start" type="js.build_tools.npm" nameIsGenerated="true">
|
||||||
|
<package-json value="$PROJECT_DIR$/package.json" />
|
||||||
|
<command value="run" />
|
||||||
|
<scripts>
|
||||||
|
<script value="start" />
|
||||||
|
</scripts>
|
||||||
|
<node-interpreter value="project" />
|
||||||
|
<envs />
|
||||||
|
<method v="2" />
|
||||||
|
</configuration>
|
||||||
|
</component>
|
||||||
|
<component name="SharedIndexes">
|
||||||
|
<attachedChunks>
|
||||||
|
<set>
|
||||||
|
<option value="bundled-gosdk-d297c17c1fbd-85c80fddc9a6-org.jetbrains.plugins.go.sharedIndexes.bundled-GO-243.23654.119" />
|
||||||
|
<option value="bundled-js-predefined-d6986cc7102b-822845ee3bb5-JavaScript-GO-243.23654.119" />
|
||||||
|
</set>
|
||||||
|
</attachedChunks>
|
||||||
|
</component>
|
||||||
|
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
|
||||||
|
<component name="TypeScriptGeneratedFilesManager">
|
||||||
|
<option name="version" value="3" />
|
||||||
|
</component>
|
||||||
|
<component name="VgoProject">
|
||||||
|
<settings-migrated>true</settings-migrated>
|
||||||
|
</component>
|
||||||
|
</project>
|
@ -35,6 +35,7 @@
|
|||||||
<%- include('loginOptions') %>
|
<%- include('loginOptions') %>
|
||||||
<%- include('loginOffline') %>
|
<%- include('loginOffline') %>
|
||||||
<%- include('loginSkirdaDiscord') %>
|
<%- include('loginSkirdaDiscord') %>
|
||||||
|
<%- include('loginSkirdaTelegram') %>
|
||||||
<%- include('settings') %>
|
<%- include('settings') %>
|
||||||
<%- include('landing') %>
|
<%- include('landing') %>
|
||||||
</div>
|
</div>
|
||||||
|
9
app/assets/images/icons/telegram.svg
Normal file
9
app/assets/images/icons/telegram.svg
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 240.1 240.1">
|
||||||
|
<linearGradient id="Oval_1_" gradientUnits="userSpaceOnUse" x1="-838.041" y1="660.581" x2="-838.041" y2="660.3427" gradientTransform="matrix(1000 0 0 -1000 838161 660581)">
|
||||||
|
<stop offset="0" style="stop-color:#2AABEE"/>
|
||||||
|
<stop offset="1" style="stop-color:#229ED9"/>
|
||||||
|
</linearGradient>
|
||||||
|
<circle fill-rule="evenodd" clip-rule="evenodd" fill="url(#Oval_1_)" cx="120.1" cy="120.1" r="120.1"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M54.3,118.8c35-15.2,58.3-25.3,70-30.2 c33.3-13.9,40.3-16.3,44.8-16.4c1,0,3.2,0.2,4.7,1.4c1.2,1,1.5,2.3,1.7,3.3s0.4,3.1,0.2,4.7c-1.8,19-9.6,65.1-13.6,86.3 c-1.7,9-5,12-8.2,12.3c-7,0.6-12.3-4.6-19-9c-10.6-6.9-16.5-11.2-26.8-18c-11.9-7.8-4.2-12.1,2.6-19.1c1.8-1.8,32.5-29.8,33.1-32.3 c0.1-0.3,0.1-1.5-0.6-2.1c-0.7-0.6-1.7-0.4-2.5-0.2c-1.1,0.2-17.9,11.4-50.6,33.5c-4.8,3.3-9.1,4.9-13,4.8 c-4.3-0.1-12.5-2.4-18.7-4.4c-7.5-2.4-13.5-3.7-13-7.9C45.7,123.3,48.7,121.1,54.3,118.8z"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.1 KiB |
@ -188,7 +188,6 @@ exports.addSkirdaAccount = async function(uuid, accessToken, username, displayNa
|
|||||||
}
|
}
|
||||||
|
|
||||||
exports.addOfflineAccount = async function(usernameOffline){
|
exports.addOfflineAccount = async function(usernameOffline){
|
||||||
//TODO: check for forbidden symbols and lenght!!
|
|
||||||
ConfigManager.addOfflineAccount(usernameOffline)
|
ConfigManager.addOfflineAccount(usernameOffline)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -207,7 +206,7 @@ const AUTH_MODE = { FULL: 0, MS_REFRESH: 1, MC_REFRESH: 2 }
|
|||||||
*/
|
*/
|
||||||
async function fullMicrosoftAuthFlow(entryCode, authMode) {
|
async function fullMicrosoftAuthFlow(entryCode, authMode) {
|
||||||
try {
|
try {
|
||||||
console.error("try auth from ms")
|
console.error('try auth from ms')
|
||||||
return Promise.reject(microsoftErrorDisplayable(MicrosoftErrorCode.UNKNOWN))
|
return Promise.reject(microsoftErrorDisplayable(MicrosoftErrorCode.UNKNOWN))
|
||||||
let accessTokenRaw
|
let accessTokenRaw
|
||||||
let accessToken
|
let accessToken
|
||||||
@ -405,7 +404,6 @@ async function validateSelectedMojangAccount(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
// require('./scripts/loginSkirdaDiscord')
|
|
||||||
/**
|
/**
|
||||||
* Validate the selected account with Skirda's authserver. If the account is not valid,
|
* Validate the selected account with Skirda's authserver. If the account is not valid,
|
||||||
* we will attempt to refresh the access token and update that value. If that fails, a
|
* we will attempt to refresh the access token and update that value. If that fails, a
|
||||||
@ -414,30 +412,19 @@ async function validateSelectedMojangAccount(){
|
|||||||
* @returns {Promise.<boolean>} Promise which resolves to true if the access token is valid,
|
* @returns {Promise.<boolean>} Promise which resolves to true if the access token is valid,
|
||||||
* otherwise false.
|
* otherwise false.
|
||||||
*/
|
*/
|
||||||
|
const auth_api_url = 'https://skirda.brzezinski.ru'
|
||||||
async function validateSelectedSkirdaAccount(){
|
async function validateSelectedSkirdaAccount(){
|
||||||
const current = ConfigManager.getSelectedAccount()
|
const current = ConfigManager.getSelectedAccount()
|
||||||
const result = await SkirdaDiscordAuth.ValidateAccount(current.accessToken)
|
|
||||||
// const response = await MojangRestAPI.validate(current.accessToken, ConfigManager.getClientToken())
|
const resp = await fetch(`${auth_api_url}/auth/refresh`, {
|
||||||
// const isValid = response.data
|
headers: {
|
||||||
if(!result){
|
'Content-Type': 'application/json',
|
||||||
const refreshResponse = await MojangRestAPI.refresh(current.accessToken, ConfigManager.getClientToken())
|
'Authorization': current.accessToken,
|
||||||
if(refreshResponse.responseStatus === RestResponseStatus.SUCCESS) {
|
|
||||||
const session = refreshResponse.data
|
|
||||||
ConfigManager.updateMojangAuthAccount(current.uuid, session.accessToken)
|
|
||||||
ConfigManager.save()
|
|
||||||
} else {
|
|
||||||
log.error('Error while validating selected profile:', refreshResponse.error)
|
|
||||||
log.info('Account access token is invalid.')
|
|
||||||
return false
|
|
||||||
}
|
}
|
||||||
log.info('Account access token validated.')
|
})
|
||||||
return true
|
|
||||||
} else {
|
|
||||||
log.info('Account access token validated.')
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
console.log(resp)
|
||||||
|
return resp.status === 200
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -365,6 +365,7 @@ exports.addOfflineAccount = function(usernameOffline){
|
|||||||
}
|
}
|
||||||
|
|
||||||
exports.addSkirdaAccount = function(uuid, accessToken, username, displayName, skirdaToken){
|
exports.addSkirdaAccount = function(uuid, accessToken, username, displayName, skirdaToken){
|
||||||
|
console.log(username)
|
||||||
config.selectedAccount = uuid
|
config.selectedAccount = uuid
|
||||||
config.authenticationDatabase[uuid] = {
|
config.authenticationDatabase[uuid] = {
|
||||||
type: 'skirda',
|
type: 'skirda',
|
||||||
@ -372,7 +373,7 @@ exports.addSkirdaAccount = function(uuid, accessToken, username, displayName, sk
|
|||||||
username: username.trim(),
|
username: username.trim(),
|
||||||
uuid: uuid.trim(),
|
uuid: uuid.trim(),
|
||||||
displayName: displayName.trim(),
|
displayName: displayName.trim(),
|
||||||
skirdaJWT: skirdaToken
|
skirdaJWT: skirdaToken.trim()
|
||||||
}
|
}
|
||||||
return config.authenticationDatabase[uuid]
|
return config.authenticationDatabase[uuid]
|
||||||
}
|
}
|
||||||
|
@ -2,8 +2,9 @@ const {DistributionAPI} = require('helios-core/common')
|
|||||||
const ConfigManager = require('./configmanager')
|
const ConfigManager = require('./configmanager')
|
||||||
|
|
||||||
// Old WesterosCraft url.
|
// Old WesterosCraft url.
|
||||||
exports.REMOTE_DISTRO_URL = 'http://mc.westeroscraft.com/WesterosCraftLauncher/distribution.json'
|
// exports.REMOTE_DISTRO_URL = 'http://mc.westeroscraft.com/WesterosCraftLauncher/distribution.json'
|
||||||
exports.REMOTE_DISTRO_URL = 'https://helios-files.geekcorner.eu.org/distribution.json'
|
exports.REMOTE_DISTRO_URL = 'http://localhost:8090/distribution.json'
|
||||||
|
// exports.REMOTE_DISTRO_URL = 'https://helios-files.geekcorner.eu.org/distribution.json'
|
||||||
// exports.REMOTE_DISTRO_URL = 'https://skirda-minecraft-distribution.brzezinski.ru/distribution.json'
|
// exports.REMOTE_DISTRO_URL = 'https://skirda-minecraft-distribution.brzezinski.ru/distribution.json'
|
||||||
// exports.REMOTE_DISTRO_URL = 'https://helios-files.geekcorner.eu.org/distribution.json'
|
// exports.REMOTE_DISTRO_URL = 'https://helios-files.geekcorner.eu.org/distribution.json'
|
||||||
// exports.REMOTE_DISTRO_URL = 'http://192.168.88.10:8081/distribution/manifest'
|
// exports.REMOTE_DISTRO_URL = 'http://192.168.88.10:8081/distribution/manifest'
|
||||||
|
@ -144,7 +144,7 @@ document.getElementById('avatarOverlay').onclick = async e => {
|
|||||||
// Bind selected account
|
// Bind selected account
|
||||||
function updateSelectedAccount(authUser){
|
function updateSelectedAccount(authUser){
|
||||||
let username = Lang.queryJS('landing.selectedAccount.noAccountSelected')
|
let username = Lang.queryJS('landing.selectedAccount.noAccountSelected')
|
||||||
console.log(authUser)
|
// console.log(authUser)
|
||||||
if(authUser != null){
|
if(authUser != null){
|
||||||
if(authUser.displayName != null){
|
if(authUser.displayName != null){
|
||||||
username = authUser.displayName
|
username = authUser.displayName
|
||||||
|
@ -3,6 +3,7 @@ const loginOptionMicrosoft = document.getElementById('loginOptionMicrosoft')
|
|||||||
const loginOptionMojang = document.getElementById('loginOptionMojang')
|
const loginOptionMojang = document.getElementById('loginOptionMojang')
|
||||||
const loginOptionOffline = document.getElementById('loginOptionOffline')
|
const loginOptionOffline = document.getElementById('loginOptionOffline')
|
||||||
const loginOptionSkirdaDiskord = document.getElementById('loginOptionSkirdaDiscord')
|
const loginOptionSkirdaDiskord = document.getElementById('loginOptionSkirdaDiscord')
|
||||||
|
const loginOptionSkirdaTelegram = document.getElementById('loginOptionSkirdaTelegram')
|
||||||
const loginOptionsCancelButton = document.getElementById('loginOptionCancelButton')
|
const loginOptionsCancelButton = document.getElementById('loginOptionCancelButton')
|
||||||
|
|
||||||
let loginOptionsCancellable = false
|
let loginOptionsCancellable = false
|
||||||
@ -47,7 +48,7 @@ loginOptionOffline.onclick = (e) => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
loginOptionSkirdaDiscord.onclick = (e) => {
|
loginOptionSkirdaDiskord.onclick = (e) => {
|
||||||
InitSkirdaDiscordLogin()
|
InitSkirdaDiscordLogin()
|
||||||
switchView(getCurrentView(), VIEWS.loginSkirdaDiscord, 500, 500, () => {
|
switchView(getCurrentView(), VIEWS.loginSkirdaDiscord, 500, 500, () => {
|
||||||
loginViewOnSuccess = loginOptionsViewOnLoginSuccess
|
loginViewOnSuccess = loginOptionsViewOnLoginSuccess
|
||||||
@ -56,6 +57,15 @@ loginOptionSkirdaDiscord.onclick = (e) => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
loginOptionSkirdaTelegram.onclick = (e) => {
|
||||||
|
InitSkirdaTelegramAuth()
|
||||||
|
switchView(getCurrentView(), VIEWS.loginSkirdaTelegram, 500, 500, () => {
|
||||||
|
loginViewOnSuccess = loginOptionsViewOnLoginSuccess
|
||||||
|
loginViewOnCancel = loginOptionsViewOnLoginCancel
|
||||||
|
// loginCancelEnabled(true)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
loginOptionsCancelButton.onclick = (e) => {
|
loginOptionsCancelButton.onclick = (e) => {
|
||||||
switchView(getCurrentView(), loginOptionsViewOnCancel, 500, 500, () => {
|
switchView(getCurrentView(), loginOptionsViewOnCancel, 500, 500, () => {
|
||||||
// Clear login values (Mojang login)
|
// Clear login values (Mojang login)
|
||||||
|
@ -3,14 +3,18 @@
|
|||||||
// const {addSkirdaAccount} = require('configmanager')
|
// const {addSkirdaAccount} = require('configmanager')
|
||||||
// const auth_api_url = 'http://192.168.88.10:8083'
|
// const auth_api_url = 'http://192.168.88.10:8083'
|
||||||
// const auth_api_url = 'http://localhost:8083'
|
// const auth_api_url = 'http://localhost:8083'
|
||||||
const auth_api_url = 'http://skirda-auth.brzezinski.ru'
|
const ConfigManager = require('../configmanager')
|
||||||
|
const {MojangRestAPI} = require('helios-core/mojang')
|
||||||
|
const {RestResponseStatus} = require('helios-core/common')
|
||||||
|
const auth_api_url = 'http://skirda.brzezinski.ru'
|
||||||
|
|
||||||
function uuidv4() {
|
function uuidv4() {
|
||||||
return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, c =>
|
return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, c =>
|
||||||
(c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)
|
(c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
class SkirdaDiscordAuth{
|
|
||||||
|
class SkirdaAuth {
|
||||||
/**
|
/**
|
||||||
* @typedef {Object} DiscordRedirectAuth
|
* @typedef {Object} DiscordRedirectAuth
|
||||||
* @property {string} redirectUrl how the person is called
|
* @property {string} redirectUrl how the person is called
|
||||||
@ -19,10 +23,11 @@ class SkirdaDiscordAuth{
|
|||||||
* @return {Promise<DiscordRedirectAuth | string>}
|
* @return {Promise<DiscordRedirectAuth | string>}
|
||||||
* */
|
* */
|
||||||
static temp_installId = uuidv4()
|
static temp_installId = uuidv4()
|
||||||
static async Init(){
|
|
||||||
const resp = await fetch(`${auth_api_url}/v1/auth/discord/init?installId=${SkirdaDiscordAuth.temp_installId}`)
|
|
||||||
|
|
||||||
if (resp.statusCode !== 200){
|
static async Init() {
|
||||||
|
const resp = await fetch(`${auth_api_url}/v1/auth/discord/init?installId=${SkirdaAuth.temp_installId}`)
|
||||||
|
|
||||||
|
if (resp.statusCode !== 200) {
|
||||||
return await resp.text()
|
return await resp.text()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -34,13 +39,13 @@ class SkirdaDiscordAuth{
|
|||||||
// * @param timeout {number} Timeout to poll in seconds
|
// * @param timeout {number} Timeout to poll in seconds
|
||||||
* @return {SkirdaUserResp | string} Result of OAuth login
|
* @return {SkirdaUserResp | string} Result of OAuth login
|
||||||
*/
|
*/
|
||||||
static async CyclePolling(requestId){
|
static async CyclePolling(requestId) {
|
||||||
for (let i = 0; i < 15; i++) {
|
for (let i = 0; i < 15; i++) {
|
||||||
const resp = await SkirdaDiscordAuth._poll(requestId)
|
const resp = await SkirdaAuth._poll(requestId)
|
||||||
|
|
||||||
switch (resp.status){
|
switch (resp.status) {
|
||||||
case 204:
|
case 204:
|
||||||
await SkirdaDiscordAuth._sleep(4000)
|
await SkirdaAuth._sleep(4000)
|
||||||
continue
|
continue
|
||||||
case 200:
|
case 200:
|
||||||
return await resp.json()
|
return await resp.json()
|
||||||
@ -64,15 +69,15 @@ class SkirdaDiscordAuth{
|
|||||||
* @param jwtToken {string} JWT Token for auth
|
* @param jwtToken {string} JWT Token for auth
|
||||||
* @return {YggProfile | string} Result of auth
|
* @return {YggProfile | string} Result of auth
|
||||||
*/
|
*/
|
||||||
static async YggdrasilAuth(jwtToken){
|
static async YggdrasilAuth(jwtToken) {
|
||||||
const resp = await fetch(`${auth_api_url}/yggdrasil/skirda/authenticate`, {
|
const resp = await fetch(`${auth_api_url}/yggdrasil/skirda/authenticate`, {
|
||||||
headers:{
|
headers: {
|
||||||
'Content-Type': 'application/json',
|
'Content-Type': 'application/json',
|
||||||
'Authorization': jwtToken
|
'Authorization': jwtToken
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
if (resp.statusCode !== 200){
|
if (resp.statusCode !== 200) {
|
||||||
return await resp.text()
|
return await resp.text()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -89,11 +94,12 @@ class SkirdaDiscordAuth{
|
|||||||
* @param requestId {string}
|
* @param requestId {string}
|
||||||
* @return {Response}
|
* @return {Response}
|
||||||
* */
|
* */
|
||||||
static async _poll(requestId){
|
static async _poll(requestId) {
|
||||||
return await fetch(`${auth_api_url}/v1/auth/discord/periodicPolling?installId=${SkirdaDiscordAuth.temp_installId}&requestId=${requestId}`)
|
return await fetch(`${auth_api_url}/v1/auth/discord/periodicPolling?installId=${SkirdaAuth.temp_installId}&requestId=${requestId}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
static _sleepSetTimeout_ctrl
|
static _sleepSetTimeout_ctrl
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param ms {number}
|
* @param ms {number}
|
||||||
* @return {boolean}
|
* @return {boolean}
|
||||||
@ -104,8 +110,8 @@ class SkirdaDiscordAuth{
|
|||||||
}
|
}
|
||||||
|
|
||||||
static async ValidateAccount(jwtToken) {
|
static async ValidateAccount(jwtToken) {
|
||||||
const resp = await fetch(`${auth_api_url}/v1/auth/refresh`,{
|
const resp = await fetch(`${auth_api_url}/auth/refresh`, {
|
||||||
headers:{
|
headers: {
|
||||||
'Content-Type': 'application/json',
|
'Content-Type': 'application/json',
|
||||||
'Authorization': jwtToken
|
'Authorization': jwtToken
|
||||||
}
|
}
|
||||||
@ -113,18 +119,58 @@ class SkirdaDiscordAuth{
|
|||||||
// console.log(resp, resp.statusCode)
|
// console.log(resp, resp.statusCode)
|
||||||
return resp.status === 200
|
return resp.status === 200
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static async ValidateSelected() {
|
||||||
|
const current = ConfigManager.getSelectedAccount()
|
||||||
|
if (current === null) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
const resp = await fetch(`${auth_api_url}/auth/refresh`, {
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
'Authorization': jwtToken
|
||||||
|
}
|
||||||
|
})
|
||||||
|
if (resp.status !== 200) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
const result = await resp.json()
|
||||||
|
|
||||||
|
return result !== null
|
||||||
|
|
||||||
|
// const response = await MojangRestAPI.validate(current.accessToken, ConfigManager.getClientToken())
|
||||||
|
// const isValid = response.data
|
||||||
|
// if (!result) {
|
||||||
|
// const refreshResponse = await MojangRestAPI.refresh(current.accessToken, ConfigManager.getClientToken())
|
||||||
|
// if (refreshResponse.responseStatus === RestResponseStatus.SUCCESS) {
|
||||||
|
// const session = refreshResponse.data
|
||||||
|
// ConfigManager.updateMojangAuthAccount(current.uuid, session.accessToken)
|
||||||
|
// ConfigManager.save()
|
||||||
|
// } else {
|
||||||
|
// log.error('Error while validating selected profile:', refreshResponse.error)
|
||||||
|
// log.info('Account access token is invalid.')
|
||||||
|
// return false
|
||||||
|
// }
|
||||||
|
// log.info('Account access token validated.')
|
||||||
|
// return true
|
||||||
|
// } else {
|
||||||
|
// log.info('Account access token validated.')
|
||||||
|
// return true
|
||||||
|
// }
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// const skAuth = new SkirdaDiscordAuth()
|
// const skAuth = new SkirdaDiscordAuth()
|
||||||
const loginSkirdaDiscordButton = document.getElementById('loginSkirdaDiscordInitAuth')
|
const loginSkirdaDiscordButton = document.getElementById('loginSkirdaDiscordInitAuth')
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return boolean
|
* @return boolean
|
||||||
* */
|
* */
|
||||||
async function InitSkirdaDiscordLogin (){
|
async function InitSkirdaDiscordLogin() {
|
||||||
const res = await SkirdaDiscordAuth.Init()
|
const res = await SkirdaAuth.Init()
|
||||||
let redir
|
let redir
|
||||||
try {
|
try {
|
||||||
redir = JSON.parse(res)
|
redir = JSON.parse(res)
|
||||||
@ -137,16 +183,16 @@ async function InitSkirdaDiscordLogin (){
|
|||||||
|
|
||||||
const resOpenUrl = await shell.openExternal(redir.redirectUrl)
|
const resOpenUrl = await shell.openExternal(redir.redirectUrl)
|
||||||
|
|
||||||
const skirdaAuth = await SkirdaDiscordAuth.CyclePolling(redir.requestId)
|
const skirdaAuth = await SkirdaAuth.CyclePolling(redir.requestId)
|
||||||
//TODO validate resp
|
//TODO validate resp
|
||||||
// console.log(skirdaAuth)
|
// console.log(skirdaAuth)
|
||||||
|
|
||||||
if (typeof skirdaAuth.token !== 'string'){
|
if (typeof skirdaAuth.token !== 'string') {
|
||||||
SpawnError(Lang.queryJS('login.error.unknown'))
|
SpawnError(Lang.queryJS('login.error.unknown'))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
const yggAuth = await SkirdaDiscordAuth.YggdrasilAuth(skirdaAuth.token)
|
const yggAuth = await SkirdaAuth.YggdrasilAuth(skirdaAuth.token)
|
||||||
let yggAuthRes
|
let yggAuthRes
|
||||||
try {
|
try {
|
||||||
yggAuthRes = JSON.parse(yggAuth)
|
yggAuthRes = JSON.parse(yggAuth)
|
||||||
@ -167,7 +213,7 @@ async function InitSkirdaDiscordLogin (){
|
|||||||
}, 1000)
|
}, 1000)
|
||||||
}
|
}
|
||||||
|
|
||||||
function SpawnError(actualDisplayableError){
|
function SpawnError(actualDisplayableError) {
|
||||||
setOverlayContent(actualDisplayableError.title, actualDisplayableError.desc, Lang.queryJS('login.tryAgain'))
|
setOverlayContent(actualDisplayableError.title, actualDisplayableError.desc, Lang.queryJS('login.tryAgain'))
|
||||||
setOverlayHandler(() => {
|
setOverlayHandler(() => {
|
||||||
formDisabled(false)
|
formDisabled(false)
|
||||||
|
@ -354,6 +354,8 @@ document.getElementById('settingsAddMojangAccount').onclick = (e) => {
|
|||||||
document.getElementById('settingsAddSkirdaDiscord').onclick = (e) => {
|
document.getElementById('settingsAddSkirdaDiscord').onclick = (e) => {
|
||||||
// console.log("kekekekekek")
|
// console.log("kekekekekek")
|
||||||
switchView(getCurrentView(), VIEWS.loginSkirdaDiscord, 500, 500, () => {
|
switchView(getCurrentView(), VIEWS.loginSkirdaDiscord, 500, 500, () => {
|
||||||
|
loginViewOnCancel = VIEWS.settings
|
||||||
|
loginViewOnSuccess = VIEWS.settings
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
109
app/assets/js/scripts/skirda/auth/telegram.js
Normal file
109
app/assets/js/scripts/skirda/auth/telegram.js
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
const sk_tg_auth_api_url = 'https://skirda.brzezinski.ru/auth'
|
||||||
|
|
||||||
|
/**@typedef {Object} SkirdaTelegramAuthInitResponse
|
||||||
|
* @property {string} redirect_url
|
||||||
|
* @property {string} subscribe_url
|
||||||
|
* */
|
||||||
|
|
||||||
|
/** @typedef {Object} SkirdaTelegramAuthResultResponse
|
||||||
|
* @property {string} name
|
||||||
|
* @property {string} sk_user_id
|
||||||
|
* @property {string} token
|
||||||
|
**/
|
||||||
|
|
||||||
|
/**@typedef {Object} YggdrasilProfile
|
||||||
|
* @property {string} id
|
||||||
|
* @property {string} name
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**@typedef {Object} SkirdaYggdrasilAuthResponse
|
||||||
|
* @property {YggdrasilProfile} profile
|
||||||
|
*/
|
||||||
|
|
||||||
|
class skirdaTelegramAuth {
|
||||||
|
/**
|
||||||
|
* @return SkirdaTelegramAuthInitResponse
|
||||||
|
* */
|
||||||
|
async init() {
|
||||||
|
const resp = await fetch(`${sk_tg_auth_api_url}/telegram/init`, {})
|
||||||
|
try {
|
||||||
|
if (!resp.ok) {
|
||||||
|
throw new Error(`Response status: ${resp.status}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
// console.log(await resp.json())
|
||||||
|
return await resp.json()
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error.message)
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string} in_sub_url
|
||||||
|
* @return SkirdaTelegramAuthResultResponse
|
||||||
|
* */
|
||||||
|
async subscribe(in_sub_url) {
|
||||||
|
const resp = await fetch(in_sub_url, {})
|
||||||
|
try {
|
||||||
|
if (!resp.ok) {
|
||||||
|
throw new Error(`Response status: ${resp.status}`)
|
||||||
|
}
|
||||||
|
return await resp.json()
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error.message)
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string} jwtToken
|
||||||
|
* @return SkirdaYggdrasilAuthResponse
|
||||||
|
* */
|
||||||
|
async yggdrasilAuth(jwtToken) {
|
||||||
|
const ygg_auth_api_url = 'https://skirda.brzezinski.ru'
|
||||||
|
const resp = await fetch(`${ygg_auth_api_url}/yggdrasil/skirda/authenticate`, {
|
||||||
|
headers: {
|
||||||
|
// 'Content-Type': 'application/json',
|
||||||
|
'Authorization': jwtToken
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
try {
|
||||||
|
return await resp.json()
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error.message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function InitSkirdaTelegramAuth() {
|
||||||
|
const auth = new skirdaTelegramAuth()
|
||||||
|
|
||||||
|
const initResp = await auth.init()
|
||||||
|
if (initResp === null) {
|
||||||
|
console.error('tg auth init failed')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
console.log(initResp)
|
||||||
|
await shell.openExternal(initResp.redirect_url)
|
||||||
|
|
||||||
|
const authResult = await auth.subscribe(initResp.subscribe_url)
|
||||||
|
console.log(authResult)
|
||||||
|
|
||||||
|
const yggResp = await auth.yggdrasilAuth(authResult.token)
|
||||||
|
// console.log(yggResp)
|
||||||
|
// console.log(yggResp.profile)
|
||||||
|
|
||||||
|
AuthManager.addSkirdaAccount(yggResp.profile.id, authResult.token, authResult.name, authResult.name, authResult.token).then((value) => {
|
||||||
|
console.log(value)
|
||||||
|
updateSelectedAccount(value)
|
||||||
|
}).then((value) => {
|
||||||
|
switchView(VIEWS.loginSkirdaTelegram, VIEWS.landing, 500, 500, async () => {
|
||||||
|
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -19,6 +19,7 @@ const VIEWS = {
|
|||||||
loginOptions: '#loginOptionsContainer',
|
loginOptions: '#loginOptionsContainer',
|
||||||
login: '#loginContainer',
|
login: '#loginContainer',
|
||||||
loginSkirdaDiscord: '#loginSkirdaDiscordContainer',
|
loginSkirdaDiscord: '#loginSkirdaDiscordContainer',
|
||||||
|
loginSkirdaTelegram: '#loginSkirdaTelegramContainer',
|
||||||
loginOffline: '#loginOfflineContainer',
|
loginOffline: '#loginOfflineContainer',
|
||||||
settings: '#settingsContainer',
|
settings: '#settingsContainer',
|
||||||
welcome: '#welcomeContainer',
|
welcome: '#welcomeContainer',
|
||||||
|
@ -4,6 +4,19 @@
|
|||||||
<h2><%- lang('loginOptions.loginOptionsTitle') %></h2>
|
<h2><%- lang('loginOptions.loginOptionsTitle') %></h2>
|
||||||
<div class="loginOptionActions">
|
<div class="loginOptionActions">
|
||||||
<!-- Отключенные авторизации -->
|
<!-- Отключенные авторизации -->
|
||||||
|
<div class="loginOptionButtonContainer">
|
||||||
|
<button id="loginOptionSkirdaTelegram" class="loginOptionButton">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 23 23">
|
||||||
|
<path fill="#f35325" d="M1 1h10v10H1z" />
|
||||||
|
<path fill="#81bc06" d="M12 1h10v10H12z" />
|
||||||
|
<path fill="#05a6f0" d="M1 12h10v10H1z" />
|
||||||
|
<path fill="#ffba08" d="M12 12h10v10H12z" />
|
||||||
|
</svg>
|
||||||
|
<!-- FIXME -->
|
||||||
|
<!-- <span><%- lang('loginOptions.loginWithSkirdaTelegram') %></span>-->
|
||||||
|
<span>Telegram</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
<div class="loginOptionButtonContainer" style="display: none;">
|
<div class="loginOptionButtonContainer" style="display: none;">
|
||||||
<button id="loginOptionMicrosoft" class="loginOptionButton">
|
<button id="loginOptionMicrosoft" class="loginOptionButton">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 23 23">
|
<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 23 23">
|
||||||
@ -25,7 +38,8 @@
|
|||||||
<span><%- lang('loginOptions.loginWithMojang') %></span>
|
<span><%- lang('loginOptions.loginWithMojang') %></span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="loginOptionButtonContainer" style="display: none;">
|
<div class="loginOptionButtonContainer">
|
||||||
|
<!-- <div class="loginOptionButtonContainer" style="display: none;">-->
|
||||||
<button id="loginOptionOffline" class="loginOptionButton">
|
<button id="loginOptionOffline" class="loginOptionButton">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 9.677 9.667">
|
<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 9.677 9.667">
|
||||||
<path d="M-26.332-12.098h2.715c-1.357.18-2.574 1.23-2.715 2.633z" fill="#fff" />
|
<path d="M-26.332-12.098h2.715c-1.357.18-2.574 1.23-2.715 2.633z" fill="#fff" />
|
||||||
|
42
app/loginSkirdaTelegram.ejs
Normal file
42
app/loginSkirdaTelegram.ejs
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
<div id="loginSkirdaTelegramContainer" style="display: none;" class="Centered">
|
||||||
|
|
||||||
|
<!--Окно открытия браузера (ожидание ответа)-->
|
||||||
|
<div id="loginSkirdaAuthorizationWindow">
|
||||||
|
<div id="settingsAboutCurrentContent" class="Centered">
|
||||||
|
<div id="settingsAboutCurrentHeadline">
|
||||||
|
<img id="settingsAboutLogo" src="./assets/images/SealCircle.png">
|
||||||
|
<span id="settingsAboutTitle">Authorize through Skirda Discord</span>
|
||||||
|
</div>
|
||||||
|
<div id="settingsAboutCurrentVersion" class="Centered">
|
||||||
|
<span>Мы открыли браузер для дальнейшей авторизации через DiscordAAAAAAAAAAA</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="settingsAboutButtons">
|
||||||
|
<span id="loginSkirdaAuthorizationNote">В случае, если это не произошло, откройте его самостоятельно</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!--Ошибка-->
|
||||||
|
<!-- <div id="loginSkirdaAuthorizationWindow">-->
|
||||||
|
<!-- <div id="settingsAboutCurrentContent" class="Centered">-->
|
||||||
|
<!-- <div id="settingsAboutCurrentHeadline">-->
|
||||||
|
<!-- <img id="settingsAboutLogo" src="./assets/images/SealCircle.png">-->
|
||||||
|
<!-- <span id="settingsAboutTitle">Authorize through Skirda Discord</span>-->
|
||||||
|
<!-- </div>-->
|
||||||
|
<!-- <div id="settingsAboutCurrentVersion" class="Centered">-->
|
||||||
|
<!-- <span>Ошибка при авторизации :(</span>-->
|
||||||
|
<!-- </div>-->
|
||||||
|
<!-- <div class="settingsAboutCurrentContent">-->
|
||||||
|
<!-- <button id="loginSkirdaAuthorizationRetryButton">Повторить</button>-->
|
||||||
|
<!-- <button class="settingsAuthAccountLogOut" style="opacity: 100%;">Отменить</button>-->
|
||||||
|
<!-- </div>-->
|
||||||
|
|
||||||
|
<!-- </div>-->
|
||||||
|
<!-- <div id="settingsAboutButtons">-->
|
||||||
|
<!-- <span id="loginSkirdaAuthorizationNote">Не получается? Обратитесь к администрации проекта за помощью</span>-->
|
||||||
|
<!-- </div> -->
|
||||||
|
|
||||||
|
<!-- </div>-->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script src="./assets/js/scripts/skirda/auth/telegram.js"></script>
|
Loading…
x
Reference in New Issue
Block a user