Skip to content

Commit 9815309

Browse files
authored
Merge pull request #13876 from nextcloud/fix/noid/certificate-service-ts
2 parents d1c7079 + af7f428 commit 9815309

File tree

4 files changed

+59
-54
lines changed

4 files changed

+59
-54
lines changed

src/components/AdminSettings/TurnServer.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ import NcPasswordField from '@nextcloud/vue/dist/Components/NcPasswordField.js'
8989
import NcSelect from '@nextcloud/vue/dist/Components/NcSelect.js'
9090
import NcTextField from '@nextcloud/vue/dist/Components/NcTextField.js'
9191

92-
import { isCertificateValid } from '../../services/certificateService.js'
92+
import { isCertificateValid } from '../../services/certificateService.ts'
9393

9494
export default {
9595
name: 'TurnServer',

src/services/certificateService.js

Lines changed: 0 additions & 53 deletions
This file was deleted.

src/services/certificateService.ts

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
/**
2+
* SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
3+
* SPDX-License-Identifier: AGPL-3.0-or-later
4+
*/
5+
import axios from '@nextcloud/axios'
6+
import { generateOcsUrl } from '@nextcloud/router'
7+
8+
import type { certificateExpirationParams, certificateExpirationResponse } from '../types/index.ts'
9+
10+
/**
11+
* Retrieves the certificate expiration of the specified host
12+
*
13+
* @param host The host to check the certificate
14+
*/
15+
const getCertificateExpiration = async (host: certificateExpirationParams['host']): certificateExpirationResponse => {
16+
return axios.get(generateOcsUrl('apps/spreed/api/v1/certificate/expiration'), {
17+
params: {
18+
host,
19+
} as certificateExpirationParams,
20+
})
21+
}
22+
23+
/**
24+
* Checks if the certificate of a host is valid
25+
*
26+
* @param host The host to check the certificate
27+
* @return {boolean} true if the certificate is valid, false otherwise
28+
*/
29+
const isCertificateValid = async (host: certificateExpirationParams['host']): Promise<boolean> => {
30+
try {
31+
const response = await getCertificateExpiration(host)
32+
33+
// Null if unable to retrieve the certificates expiration, otherwise the expiration in days (negative if already expired)
34+
const expiration = response.data.ocs.data.expiration_in_days
35+
36+
if (expiration == null) {
37+
console.warn('Unable to check certificate of', host)
38+
return false
39+
} else if (expiration < 0) {
40+
console.error('Certificate of', host, 'expired')
41+
} else {
42+
console.info('Certificate of', host, 'is valid for', expiration, 'days')
43+
}
44+
return expiration > 0
45+
} catch (error) {
46+
console.error(error)
47+
return false
48+
}
49+
}
50+
51+
export {
52+
getCertificateExpiration,
53+
isCertificateValid,
54+
}

src/types/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,10 @@ export type getBotsAdminResponse = ApiResponse<operations['bot-admin-list-bots']
177177
export type enableBotResponse = ApiResponse<operations['bot-enable-bot']['responses'][201]['content']['application/json']>
178178
export type disableBotResponse = ApiResponse<operations['bot-disable-bot']['responses'][200]['content']['application/json']>
179179

180+
// Certificate
181+
export type certificateExpirationParams = operations['certificate-get-certificate-expiration']['parameters']['query']
182+
export type certificateExpirationResponse = ApiResponse<operations['certificate-get-certificate-expiration']['responses'][200]['content']['application/json']>
183+
180184
// Federations
181185
export type FederationInvite = components['schemas']['FederationInvite']
182186
type FederationInviteRichParameters = {

0 commit comments

Comments
 (0)