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 }