Files
canine/app/javascript/controllers/stack_manager/url_input_controller.js
2025-10-15 22:35:23 +01:00

65 lines
1.8 KiB
JavaScript

import { Controller } from "@hotwired/stimulus"
import { PortainerChecker } from "../../utils/portainer"
export default class extends Controller {
static targets = [
"urlInput",
"accessTokenInput",
"accessTokenHelp",
"verifyUrlSuccess",
"verifyUrlError",
"verifyUrlLoading",
"errorMessage",
]
async verifyUrl() {
const url = this.urlInputTarget.value.trim()
const accessToken = this.accessTokenInputTarget.value.trim()
if (url) {
this.accessTokenHelpTarget.querySelector('a').href = `${url.replace(/\/$/, '')}/#!/account`
this.accessTokenHelpTarget.classList.remove('hidden')
} else {
this.accessTokenHelpTarget.classList.add('hidden')
}
if (!url || !accessToken) {
return
}
this.hideAllStatuses()
this.showLoading()
const portainerChecker = new PortainerChecker()
const result = await portainerChecker.verifyPortainerUrl(url, accessToken)
if (result === PortainerChecker.STATUS_UNAUTHORIZED) {
this.showError('The instance is reachable but the access token is invalid.')
} else if (result === PortainerChecker.STATUS_OK) {
this.showSuccess()
} else {
this.showError('Unable to connect to the instance. Please check the URL.')
}
}
showLoading() {
this.hideAllStatuses()
this.verifyUrlLoadingTarget.classList.remove('hidden')
}
showSuccess() {
this.hideAllStatuses()
this.verifyUrlSuccessTarget.classList.remove('hidden')
}
showError(message) {
this.hideAllStatuses()
this.errorMessageTarget.textContent = message
this.verifyUrlErrorTarget.classList.remove('hidden')
}
hideAllStatuses() {
this.verifyUrlSuccessTarget.classList.add('hidden')
this.verifyUrlErrorTarget.classList.add('hidden')
this.verifyUrlLoadingTarget.classList.add('hidden')
}
}