File indexing completed on 2024-06-23 05:14:19

0001 /*
0002     utils/userinfo.cpp
0003 
0004     This file is part of Kleopatra, the KDE keymanager
0005     SPDX-FileCopyrightText: 2021 g10 Code GmbH
0006     SPDX-FileContributor: Ingo Klöcker <dev@ingo-kloecker.de>
0007 
0008     SPDX-License-Identifier: GPL-2.0-or-later
0009 */
0010 
0011 #include "userinfo.h"
0012 
0013 // Needed for global defines
0014 #include <QtSystemDetection>
0015 
0016 #ifdef Q_OS_WIN
0017 #include "userinfo_win_p.h"
0018 #endif
0019 
0020 #include <KEMailSettings>
0021 #include <KEmailAddress>
0022 
0023 namespace
0024 {
0025 enum UserInfoDetail {
0026     UserInfoName,
0027     UserInfoEmailAddress,
0028 };
0029 
0030 static QString env_get_user_name(UserInfoDetail detail)
0031 {
0032     const auto var = qEnvironmentVariable("EMAIL");
0033     if (!var.isEmpty()) {
0034         QString name, addrspec, comment;
0035         const auto result = KEmailAddress::splitAddress(var, name, addrspec, comment);
0036         if (result == KEmailAddress::AddressOk) {
0037             return (detail == UserInfoEmailAddress ? addrspec : name);
0038         }
0039     }
0040     return QString();
0041 }
0042 }
0043 
0044 QString Kleo::userFullName()
0045 {
0046     const KEMailSettings e;
0047     auto name = e.getSetting(KEMailSettings::RealName);
0048 #ifdef Q_OS_WIN
0049     if (name.isEmpty()) {
0050         name = win_get_user_name(NameDisplay);
0051     }
0052     if (name.isEmpty()) {
0053         name = win_get_user_name(NameUnknown);
0054     }
0055 #endif
0056     if (name.isEmpty()) {
0057         name = env_get_user_name(UserInfoName);
0058     }
0059     return name;
0060 }
0061 
0062 QString Kleo::userEmailAddress()
0063 {
0064     const KEMailSettings e;
0065     auto mbox = e.getSetting(KEMailSettings::EmailAddress);
0066 #ifdef Q_OS_WIN
0067     if (mbox.isEmpty()) {
0068         mbox = win_get_user_name(NameUserPrincipal);
0069     }
0070 #endif
0071     if (mbox.isEmpty()) {
0072         mbox = env_get_user_name(UserInfoEmailAddress);
0073     }
0074     return mbox;
0075 }
0076 
0077 bool Kleo::userIsElevated()
0078 {
0079 #ifdef Q_OS_WIN
0080     static bool ret = win_user_is_elevated();
0081     return ret;
0082 #else
0083     return false;
0084 #endif
0085 }