sailfish-safe

Sailfish frontend for safe(1)
git clone git://git.z3bra.org/sailfish-safe.git
Log | Files | Refs | README | LICENSE

passwordgenerator.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 }