tpasswordgenerator.cpp - sailfish-safe - Sailfish frontend for safe(1)
(HTM) git clone git://git.z3bra.org/sailfish-safe.git
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
tpasswordgenerator.cpp (1344B)
---
1 /*
2 * Copyright (C) 2019 Daniel Vrátil <dvratil@kde.org>
3 * 2021 Willy Goiffon <contact@z3bra.org>
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <https://www.gnu.org/licenses/>.
17 */
18
19 #include "passwordgenerator.h"
20
21 #include <QFile>
22
23 #include <ctype.h>
24
25 PasswordGenerator::PasswordGenerator()
26 {
27 }
28
29 QString PasswordGenerator::generate(int len, bool allowSymbols)
30 {
31 QString pass;
32 pass.reserve(len);
33
34 QFile urand(QStringLiteral("/dev/urandom"));
35 if (!urand.open(QIODevice::ReadOnly)) {
36 return {};
37 }
38
39 while (pass.size() < len) {
40 const char c = urand.read(1)[0];
41 if (isalnum(c) || (allowSymbols && isprint(c))) {
42 pass.append(QLatin1Char(c));
43 }
44 }
45
46 return pass;
47 }