/** * @copyright Copyright (c) 2020 John Molakvoæ * * @author John Molakvoæ * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ import axios from '@nextcloud/axios' import Config from '../services/ConfigService.js' import { showError, showSuccess } from '@nextcloud/dialogs' const config = new Config() // note: some chars removed on purpose to make them human friendly when read out const passwordSet = 'abcdefgijkmnopqrstwxyzABCDEFGHJKLMNPQRSTWXYZ23456789' /** * Generate a valid policy password or * request a valid password if password_policy * is enabled * * @return {string} a valid password */ export default async function() { // password policy is enabled, let's request a pass if (config.passwordPolicy.api && config.passwordPolicy.api.generate) { try { const request = await axios.get(config.passwordPolicy.api.generate) if (request.data.ocs.data.password) { showSuccess(t('files_sharing', 'Password created successfully')) return request.data.ocs.data.password } } catch (error) { console.info('Error generating password from password_policy', error) showError(t('files_sharing', 'Error generating password from password policy')) } } const array = new Uint8Array(10) const ratio = passwordSet.length / 255 self.crypto.getRandomValues(array) let password = '' for (let i = 0; i < array.length; i++) { password += passwordSet.charAt(array[i] * ratio) } return password }