fix: ensure reload after applying licence key
All checks were successful
Build / Build-and-ng-test (pull_request) Successful in 4m2s
Build / Build-and-test-development (pull_request) Successful in 8m49s
Lighthouse Checks / lighthouse (20.15.1) (pull_request) Successful in 18m48s

This commit is contained in:
Trevor Moody
2025-10-14 12:05:27 +01:00
parent 387f5122f1
commit cb1978bcaf

View File

@@ -1,179 +1,181 @@
import { Component, OnInit, ViewEncapsulation } from '@angular/core'
import { ActivatedRoute, Router } from '@angular/router'
import { AppService, LicenceService, SasService } from '../services'
import { LicenseKeyData } from '../models/LicenseKeyData'
import { RequestWrapperResponse } from '../models/request-wrapper/RequestWrapperResponse'
enum LicenseActions {
key = 'key',
register = 'register',
limit = 'limit',
update = 'update'
}
@Component({
selector: 'app-licensing',
templateUrl: './licensing.component.html',
styleUrls: ['./licensing.component.scss'],
encapsulation: ViewEncapsulation.None
})
export class LicensingComponent implements OnInit {
public action: LicenseActions | null = null
public licenseErrors: { [key: string]: string } = {
missing: `Licence key is missing - please contact <a class="color-green" href="mailto: support@datacontroller.io">support@datacontroller.io</a> and enter valid keys below.`,
expired: `Licence key is expired - please contact <a class="color-green" href="mailto: support@datacontroller.io">support@datacontroller.io</a> and enter valid keys below.`,
invalid: `Licence key is invalid - please contact <a class="color-green" href="mailto: support@datacontroller.io">support@datacontroller.io</a> and enter valid keys below.`,
missmatch: `Your SYSSITE (below) is not found in the licence key - please contact <a class="color-green" href="mailto: support@datacontroller.io">support@datacontroller.io</a> and enter valid keys below.`
}
public keyError: string | undefined
public errorDetails: string | undefined
public missmatchedKey: string | undefined
public licenceKeyValue: string = ''
public activationKeyValue: string = ''
public applyingKeys: boolean = false
public syssite = this.appService.syssite
public currentLicenceKey = this.licenceService.licenceKey
public currentActivationKey = this.licenceService.activationKey
public isAppFreeTier = this.licenceService.isAppFreeTier
public userCountLimitation = this.licenceService.userCountLimitation
public licenseKeyData: LicenseKeyData | null = null
public inputType: 'file' | 'paste' = 'file'
public licenceFileError: string | undefined
public licenceFileLoading: boolean = false
public licencefile: { filename: string } = {
filename: ''
}
constructor(
private route: ActivatedRoute,
private router: Router,
private licenceService: LicenceService,
private sasService: SasService,
private appService: AppService
) {}
ngOnInit(): void {
this.licenceKeyValue = this.currentLicenceKey || ''
this.activationKeyValue = this.currentActivationKey || ''
this.route.queryParams.subscribe((queryParams: any) => {
this.keyError = queryParams.error
this.missmatchedKey = queryParams.missmatchId
if (queryParams.details) {
this.errorDetails = atob(queryParams.details)
}
})
this.route.params.subscribe((params: any) => {
let actionInUrl = params.action
if (actionInUrl) {
if (Object.values(LicenseActions).includes(actionInUrl)) {
this.action = actionInUrl
}
}
})
this.licenseKeyData = this.licenceService.getLicenseKeyData()
}
public trimKeys() {
this.licenceKeyValue = this.licenceKeyValue.trim()
this.activationKeyValue = this.activationKeyValue.trim()
}
public copySyssite(copyIconRef: any, copyTooltip: any, syssite: string[]) {
const syssiteString = syssite.join('\n')
navigator.clipboard.writeText(syssiteString).then(() => {
copyIconRef.setAttribute('shape', 'check')
copyIconRef.setAttribute('class', 'is-success')
copyTooltip.innerText = 'Copied!'
setTimeout(() => {
copyIconRef.setAttribute('shape', 'copy')
copyIconRef.removeAttribute('class')
copyTooltip.innerText = 'Copy to clipboard'
}, 1000)
})
}
public applyKeys() {
this.applyingKeys = true
let table = {
keyupload: [
{
ACTIVATION_KEY: this.activationKeyValue,
LICENCE_KEY: this.licenceKeyValue
}
]
}
this.sasService
.request('admin/registerkey', table)
.then((res: RequestWrapperResponse) => {
if (
res.adapterResponse.return &&
res.adapterResponse.return[0] &&
res.adapterResponse.return[0].MSG === 'SUCCESS'
) {
this.router.navigateByUrl('/')
}
})
.finally(() => {
this.applyingKeys = false
})
}
public onFileCapture(event: any, dropped = false) {
let file = dropped ? event[0] : event.target.files[0]
this.licencefile.filename = file.name
if (!file) return
this.licenceFileLoading = true
const reader = new FileReader()
reader.onload = (evt) => {
this.licenceFileError = 'Error reading file.'
if (!evt || !evt.target) return
if (evt.target.readyState != 2) return
if (evt.target.error) return
if (!evt.target.result) return
this.licenceFileLoading = false
this.licenceFileError = undefined
const fileArr = evt.target.result.toString().split('\n')
this.activationKeyValue = fileArr[1]
this.licenceKeyValue = fileArr[0]
}
reader.readAsText(file)
}
public switchType(type: 'paste' | 'file') {
this.inputType = type
}
get disableApplyButton(): boolean {
if (this.licenceKeyValue.length < 1 || this.activationKeyValue.length < 1)
return true
if (
this.licenceKeyValue === this.currentLicenceKey &&
this.activationKeyValue === this.currentActivationKey
)
return true
return false
}
}
import { Component, OnInit, ViewEncapsulation } from '@angular/core'
import { ActivatedRoute, Router } from '@angular/router'
import { AppService, LicenceService, SasService } from '../services'
import { LicenseKeyData } from '../models/LicenseKeyData'
import { RequestWrapperResponse } from '../models/request-wrapper/RequestWrapperResponse'
enum LicenseActions {
key = 'key',
register = 'register',
limit = 'limit',
update = 'update'
}
@Component({
selector: 'app-licensing',
templateUrl: './licensing.component.html',
styleUrls: ['./licensing.component.scss'],
encapsulation: ViewEncapsulation.None
})
export class LicensingComponent implements OnInit {
public action: LicenseActions | null = null
public licenseErrors: { [key: string]: string } = {
missing: `Licence key is missing - please contact <a class="color-green" href="mailto: support@datacontroller.io">support@datacontroller.io</a> and enter valid keys below.`,
expired: `Licence key is expired - please contact <a class="color-green" href="mailto: support@datacontroller.io">support@datacontroller.io</a> and enter valid keys below.`,
invalid: `Licence key is invalid - please contact <a class="color-green" href="mailto: support@datacontroller.io">support@datacontroller.io</a> and enter valid keys below.`,
missmatch: `Your SYSSITE (below) is not found in the licence key - please contact <a class="color-green" href="mailto: support@datacontroller.io">support@datacontroller.io</a> and enter valid keys below.`
}
public keyError: string | undefined
public errorDetails: string | undefined
public missmatchedKey: string | undefined
public licenceKeyValue: string = ''
public activationKeyValue: string = ''
public applyingKeys: boolean = false
public syssite = this.appService.syssite
public currentLicenceKey = this.licenceService.licenceKey
public currentActivationKey = this.licenceService.activationKey
public isAppFreeTier = this.licenceService.isAppFreeTier
public userCountLimitation = this.licenceService.userCountLimitation
public licenseKeyData: LicenseKeyData | null = null
public inputType: 'file' | 'paste' = 'file'
public licenceFileError: string | undefined
public licenceFileLoading: boolean = false
public licencefile: { filename: string } = {
filename: ''
}
constructor(
private route: ActivatedRoute,
private router: Router,
private licenceService: LicenceService,
private sasService: SasService,
private appService: AppService
) {}
ngOnInit(): void {
this.licenceKeyValue = this.currentLicenceKey || ''
this.activationKeyValue = this.currentActivationKey || ''
this.route.queryParams.subscribe((queryParams: any) => {
this.keyError = queryParams.error
this.missmatchedKey = queryParams.missmatchId
if (queryParams.details) {
this.errorDetails = atob(queryParams.details)
}
})
this.route.params.subscribe((params: any) => {
let actionInUrl = params.action
if (actionInUrl) {
if (Object.values(LicenseActions).includes(actionInUrl)) {
this.action = actionInUrl
}
}
})
this.licenseKeyData = this.licenceService.getLicenseKeyData()
}
public trimKeys() {
this.licenceKeyValue = this.licenceKeyValue.trim()
this.activationKeyValue = this.activationKeyValue.trim()
}
public copySyssite(copyIconRef: any, copyTooltip: any, syssite: string[]) {
const syssiteString = syssite.join('\n')
navigator.clipboard.writeText(syssiteString).then(() => {
copyIconRef.setAttribute('shape', 'check')
copyIconRef.setAttribute('class', 'is-success')
copyTooltip.innerText = 'Copied!'
setTimeout(() => {
copyIconRef.setAttribute('shape', 'copy')
copyIconRef.removeAttribute('class')
copyTooltip.innerText = 'Copy to clipboard'
}, 1000)
})
}
public applyKeys() {
this.applyingKeys = true
let table = {
keyupload: [
{
ACTIVATION_KEY: this.activationKeyValue,
LICENCE_KEY: this.licenceKeyValue
}
]
}
this.sasService
.request('admin/registerkey', table)
.then((res: RequestWrapperResponse) => {
if (
res.adapterResponse.return &&
res.adapterResponse.return[0] &&
res.adapterResponse.return[0].MSG === 'SUCCESS'
) {
this.router.navigateByUrl('/').then(() => {
window.location.reload()
})
}
})
.finally(() => {
this.applyingKeys = false
})
}
public onFileCapture(event: any, dropped = false) {
let file = dropped ? event[0] : event.target.files[0]
this.licencefile.filename = file.name
if (!file) return
this.licenceFileLoading = true
const reader = new FileReader()
reader.onload = (evt) => {
this.licenceFileError = 'Error reading file.'
if (!evt || !evt.target) return
if (evt.target.readyState != 2) return
if (evt.target.error) return
if (!evt.target.result) return
this.licenceFileLoading = false
this.licenceFileError = undefined
const fileArr = evt.target.result.toString().split('\n')
this.activationKeyValue = fileArr[1]
this.licenceKeyValue = fileArr[0]
}
reader.readAsText(file)
}
public switchType(type: 'paste' | 'file') {
this.inputType = type
}
get disableApplyButton(): boolean {
if (this.licenceKeyValue.length < 1 || this.activationKeyValue.length < 1)
return true
if (
this.licenceKeyValue === this.currentLicenceKey &&
this.activationKeyValue === this.currentActivationKey
)
return true
return false
}
}