1 /* PCDM Login Manager: 2 * Written by Ken Moore (ken@pcbsd.org) 2012/2013 3 * Copyright(c) 2013 by the PC-BSD Project 4 * Available under the 3-clause BSD license 5 */ 6 7 #ifndef PCDM_BACKEND_H 8 #define PCDM_BACKEND_H 9 10 #include <QDebug> 11 #include <QDir> 12 #include <QFile> 13 #include <QFileSystemWatcher> 14 #include <QProcess> 15 #include <QString> 16 #include <QStringList> 17 #include <QTextStream> 18 #include <QTimer> 19 #include <QHash> 20 21 #include "pcdm-config.h" 22 //#include "pcbsd-utils.h" 23 24 #define PCSYSINSTALL QString("/usr/sbin/pc-sysinstall") 25 #define DBDIR QString("/var/db/pcdm/") 26 27 class Process : public QProcess { 28 public: Process(const QStringList & args)29 Process(const QStringList &args) { 30 setReadChannel(QProcess::StandardOutput); 31 start(PCSYSINSTALL, args); 32 } 33 }; 34 35 //Class for reading/listing the available users/info for the system 36 class UserList : public QObject{ 37 Q_OBJECT 38 public: 39 UserList(QObject *parent = 0); 40 ~UserList(); 41 42 //Environment setting functions 43 void allowUnder1K(bool allow); //flag to allow/show UID's under 1000 if other data checks out 44 void allowRootUser(bool allow); //flag to permit login with the system "root" user (uid 0) 45 void excludeUsers(QStringList exclude); //particular users which should always be excluded if their UID < 1000 46 47 //Main start function (returns almost instantly) 48 void updateList(); //results will be ready when signals are send out 49 void stopUpdates(); //stop the periodic updates/checks 50 51 //Get usernames 52 QStringList users(); 53 QString findUser(QString displayname); 54 //Return info for a username 55 QString homedir(QString user); 56 QString displayname(QString user); 57 QString shell(QString user); 58 QString status(QString user); 59 bool isReady(QString user); //always true unless a personacrypt user 60 61 private: 62 QProcess *syncProc, *userProc; 63 QTimer *syncTimer, *userTimer; 64 QHash<QString,QString> HASH; 65 66 //Special flags for running user scans 67 bool allowunder1kUID, allowroot; 68 QStringList excludedUsers; 69 70 bool parseUserLine(QString line, QStringList *oldusers, const QStringList *allPC, const QStringList *activePC); //returns true if data changed, and removes itself from oldusers as needed 71 72 private slots: 73 void userProcFinished(); 74 void syncProcFinished(); 75 76 void startSyncProc(); //start probe for personacrypt user status 77 void startUserProc(); //start probe for users 78 79 signals: 80 void UsersChanged(); 81 void UserStatusChanged(QString, QString); //[user, status] emitted when a user status changes for personacrypt/syncthing 82 }; 83 84 class Backend { 85 public: 86 static QStringList getAvailableDesktops(); 87 static QString getDesktopComment(QString); 88 static QString getNLDesktopName(QString); 89 static QString getDesktopIcon(QString); 90 static QString getDesktopBinary(QString); 91 //static void allowUidUnder1K(bool allow, QStringList excludes = QStringList() ); 92 //static QStringList getSystemUsers(bool realnames = true); 93 //static QString getUsernameFromDisplayname(QString); 94 //static QString getDisplayNameFromUsername(QString); 95 static QStringList keyModels(); 96 static QStringList keyLayouts(); 97 static QStringList keyVariants(const QString &layout, QStringList &savedKeyVariants); 98 static bool changeKbMap(QString model, QString layout, QString variant); 99 static QString resetKbdCmd(); //read the default settings, and return the command to run to re-set those settings 100 static QStringList languages(); 101 static void openLogFile(QString); 102 static void log(QString); 103 //static QString getUserHomeDir(QString); 104 //static QString getUserShell(QString); 105 static void checkLocalDirs(); 106 static QStringList runShellCommand(QString); 107 108 //Auto-login usage 109 static QString getALUsername(); 110 static QString getALDesktopCmd(); 111 static QString getALPassword(); 112 113 //Saved/Prior Settings 114 static QString getLastUser(); 115 static QString getLastDE(QString, QString); 116 static void saveLoginInfo(QString, QString, QString); 117 static void loadDPIpreference(); 118 static void setDPIpreference(QString); 119 static void readDefaultSysEnvironment(QString &lang, QString &keymodel, QString &keylayout, QString &keyvariant); 120 static void saveDefaultSysEnvironment(QString lang, QString keymodel, QString keylayout, QString keyvariant); 121 122 //Personacrypt usage 123 static QStringList getRegisteredPersonaCryptUsers(); 124 static QStringList getAvailablePersonaCryptUsers(); 125 static bool MountPersonaCryptUser(QString user, QString pass); 126 static bool UnmountPersonaCryptUser(QString user); 127 128 static bool writeFile(QString fileName, QStringList contents); 129 130 private: 131 static void loadXSessionsData(); 132 static QStringList readXSessionsFile(QString, QString); 133 //static void readSystemUsers(bool directfile = false); 134 static void readSystemLastLogin(); 135 static void writeSystemLastLogin(QString, QString); 136 static QString readUserLastDesktop(QString); 137 static void writeUserLastDesktop(QString, QString); 138 }; 139 140 141 #endif // PCDM_BACKEND_H 142