1 /*
2     SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
3     SPDX-FileCopyrightText: 2020 Harald Sitter <sitter@kde.org>
4 */
5 
6 #include <QObject>
7 
8 #pragma once
9 
10 class UserManager;
11 
12 class User : public QObject
13 {
14     Q_OBJECT
15     Q_PROPERTY(QString name READ name CONSTANT)
16     Q_PROPERTY(bool inSamba READ inSamba NOTIFY inSambaChanged)
17 public:
18     explicit User(const QString &name, UserManager *parent);
19 
20     void resolve();
21     QString name() const;
22     bool inSamba() const;
23 
24     Q_INVOKABLE void addToSamba(const QString &password);
25 
26 Q_SIGNALS:
27     void resolved();
28     void inSambaChanged();
29     // stderr of smbpasswd if it came back with a failure. This may be multiple lines but usually is not.
30     void addToSambaError(const QString &error);
31 
32 private:
33     const QString m_name;
34     bool m_inSamba = false; // tdbsam knows about this user already
35 };
36 
37 class UserManager : public QObject
38 {
39     Q_OBJECT
40 public:
41     using QObject::QObject;
42 
43     bool canManageSamba() const;
44     QList<User *> users() const;
45     Q_INVOKABLE User *currentUser() const;
46 
47 public Q_SLOTS:
48     void load();
49 
50 Q_SIGNALS:
51     void loaded();
52 
53 private:
54     QList<User *> m_users;
55     User *m_currentUser = nullptr;
56     bool m_canManageSamba = false;
57     int m_waitingForResolution = 0;
58 };
59