Ring Daemon 16.0.0
Loading...
Searching...
No Matches
account_config.cpp
Go to the documentation of this file.
1/*
2 * Copyright (C) 2004-2025 Savoir-faire Linux Inc.
3 *
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <https://www.gnu.org/licenses/>.
16 */
17#include "account_config.h"
18#include "account_const.h"
19#include "account_schema.h"
20#include "string_utils.h"
21#include "fileutils.h"
23
24#include <fmt/compile.h>
25#include <fmt/ranges.h>
26
27namespace jami {
28
29constexpr const char* RINGTONE_PATH_KEY = "ringtonePath";
30constexpr const char* RINGTONE_ENABLED_KEY = "ringtoneEnabled";
31constexpr const char* VIDEO_ENABLED_KEY = "videoEnabled";
32constexpr const char* DISPLAY_NAME_KEY = "displayName";
33constexpr const char* ALIAS_KEY = "alias";
34constexpr const char* TYPE_KEY = "type";
35constexpr const char* AUTHENTICATION_USERNAME_KEY = "authenticationUsername";
36constexpr const char* USERNAME_KEY = "username";
37constexpr const char* PASSWORD_KEY = "password";
38constexpr const char* HOSTNAME_KEY = "hostname";
39constexpr const char* ACCOUNT_ENABLE_KEY = "enable";
40constexpr const char* ACCOUNT_AUTOANSWER_KEY = "autoAnswer";
41constexpr const char* DENY_SECOND_CALL_KEY = "denySecondCall";
42constexpr const char* ACCOUNT_READRECEIPT_KEY = "sendReadReceipt";
43constexpr const char* ACCOUNT_COMPOSING_KEY = "sendComposing";
44constexpr const char* ACCOUNT_ISRENDEZVOUS_KEY = "rendezVous";
45constexpr const char* ACCOUNT_ACTIVE_CALL_LIMIT_KEY = "activeCallLimit";
46constexpr const char* MAILBOX_KEY = "mailbox";
47constexpr const char* USER_AGENT_KEY = "useragent";
48constexpr const char* HAS_CUSTOM_USER_AGENT_KEY = "hasCustomUserAgent";
49constexpr const char* UPNP_ENABLED_KEY = "upnpEnabled";
50constexpr const char* ACTIVE_CODEC_KEY = "activeCodecs";
51constexpr const char* DEFAULT_MODERATORS_KEY = "defaultModerators";
52constexpr const char* LOCAL_MODERATORS_ENABLED_KEY = "localModeratorsEnabled";
53constexpr const char* ALL_MODERATORS_ENABLED_KEY = "allModeratorsEnabled";
54constexpr const char* PROXY_PUSH_TOKEN_KEY = "proxyPushToken";
55constexpr const char* PROXY_PUSH_PLATFORM_KEY = "proxyPushPlatform";
56constexpr const char* PROXY_PUSH_TOPIC_KEY = "proxyPushiOSTopic";
57constexpr const char* UI_CUSTOMIZATION = "uiCustomization";
58
60
61void
63{
70 out << YAML::Key << ACTIVE_CODEC_KEY << YAML::Value
71 << fmt::format(FMT_COMPILE("{}"), fmt::join(activeCodecs, "/"));
83 out << YAML::Key << DEFAULT_MODERATORS_KEY << YAML::Value
84 << fmt::format(FMT_COMPILE("{}"), fmt::join(defaultModerators, "/"));
92}
93
94void
95AccountConfig::unserialize(const YAML::Node& node)
96{
97 parseValueOptional(node, ALIAS_KEY, alias);
98 // parseValueOptional(node, TYPE_KEY, type);
99 parseValueOptional(node, ACCOUNT_ENABLE_KEY, enabled);
100 parseValueOptional(node, HOSTNAME_KEY, hostname);
101 parseValueOptional(node, ACCOUNT_AUTOANSWER_KEY, autoAnswerEnabled);
102 parseValueOptional(node, DENY_SECOND_CALL_KEY, denySecondCallEnabled);
103 parseValueOptional(node, ACCOUNT_READRECEIPT_KEY, sendReadReceipt);
104 parseValueOptional(node, ACCOUNT_COMPOSING_KEY, sendComposing);
105 parseValueOptional(node, ACCOUNT_ISRENDEZVOUS_KEY, isRendezVous);
106 parseValueOptional(node, ACCOUNT_ACTIVE_CALL_LIMIT_KEY, activeCallLimit);
107 parseValueOptional(node, MAILBOX_KEY, mailbox);
108
109 std::string codecs;
110 if (parseValueOptional(node, ACTIVE_CODEC_KEY, codecs))
112
113 parseValueOptional(node, DISPLAY_NAME_KEY, displayName);
114
115 parseValueOptional(node, USER_AGENT_KEY, customUserAgent);
116 parseValueOptional(node, RINGTONE_PATH_KEY, ringtonePath);
117 parseValueOptional(node, RINGTONE_ENABLED_KEY, ringtoneEnabled);
118 parseValueOptional(node, VIDEO_ENABLED_KEY, videoEnabled);
119
120 parseValueOptional(node, UPNP_ENABLED_KEY, upnpEnabled);
121
122 std::string defMod;
123 parseValueOptional(node, DEFAULT_MODERATORS_KEY, defMod);
125 parseValueOptional(node, LOCAL_MODERATORS_ENABLED_KEY, localModeratorsEnabled);
126 parseValueOptional(node, ALL_MODERATORS_ENABLED_KEY, allModeratorsEnabled);
127 parseValueOptional(node, PROXY_PUSH_TOKEN_KEY, deviceKey);
128 parseValueOptional(node, PROXY_PUSH_PLATFORM_KEY, platform);
129 parseValueOptional(node, PROXY_PUSH_TOPIC_KEY, notificationTopic);
130 parseValueOptional(node, UI_CUSTOMIZATION, uiCustomization);
131}
132
133std::map<std::string, std::string>
135{
158}
159
160void
161AccountConfig::fromMap(const std::map<std::string, std::string>& details)
162{
179 std::string defMod;
184
188
190}
191
192void
193parsePath(const std::map<std::string, std::string>& details,
194 const char* key,
195 std::string& s,
196 const std::filesystem::path& base)
197{
198 auto it = details.find(key);
199 if (it != details.end())
200 s = fileutils::getFullPath(base, it->second).string();
201}
202
203} // namespace jami
#define SERIALIZE_CONFIG(key, name)
Account specific keys/constants that must be shared in daemon and clients.
static const char *const CONFIG_RINGTONE_ENABLED
static const char *const CONFIG_ACCOUNT_USERNAME
static const char *const CONFIG_ACCOUNT_MAILBOX
static const char *const CONFIG_ACCOUNT_UICUSTOMIZATION
static const char *const CONFIG_LOCAL_MODERATORS_ENABLED
static const char *const CONFIG_VIDEO_ENABLED
static const char *const CONFIG_ACCOUNT_HOSTNAME
static const char *const CONFIG_ACCOUNT_ISRENDEZVOUS
static const char *const CONFIG_ACCOUNT_DISPLAYNAME
static const char *const CONFIG_DEFAULT_MODERATORS
static const char *const CONFIG_ACCOUNT_USERAGENT
static const char *const CONFIG_ACCOUNT_DENY_SECOND_CALL
static const char *const CONFIG_ACCOUNT_SENDCOMPOSING
static const char *const CONFIG_ACCOUNT_ENABLE
static const char *const CONFIG_ACCOUNT_SENDREADRECEIPT
static const char *const CONFIG_ALL_MODERATORS_ENABLED
static const char *const CONFIG_UPNP_ENABLED
static const char *const CONFIG_ACCOUNT_ALIAS
static const char *const CONFIG_RINGTONE_PATH
static const char *const CONFIG_ACCOUNT_TYPE
static const char *const CONFIG_ACCOUNT_AUTOANSWER
std::filesystem::path getFullPath(const std::filesystem::path &base, const std::filesystem::path &path)
If path is relative, it is appended to base.
bool parseValueOptional(const YAML::Node &node, const char *key, T &value)
Definition yamlparser.h:38
constexpr const char * PROXY_PUSH_TOKEN_KEY
constexpr const char * ACCOUNT_AUTOANSWER_KEY
void parseBool(const std::map< std::string, std::string > &details, const char *key, bool &s)
constexpr const char * PROXY_PUSH_PLATFORM_KEY
static constexpr const char TRUE_STR[]
constexpr const char * DENY_SECOND_CALL_KEY
constexpr const char * TYPE_KEY
constexpr const char * PROXY_PUSH_TOPIC_KEY
void emitSignal(Args... args)
Definition ring_signal.h:64
constexpr const char * HOSTNAME_KEY
std::string string_join(const std::set< std::string > &set, std::string_view separator)
constexpr const char * ACCOUNT_COMPOSING_KEY
constexpr const char * MAILBOX_KEY
constexpr const char * RINGTONE_ENABLED_KEY
constexpr const char * DEFAULT_MODERATORS_KEY
void parseInt(const std::map< std::string, std::string > &details, const char *key, T &s)
constexpr const char * ACCOUNT_ACTIVE_CALL_LIMIT_KEY
std::vector< unsigned > split_string_to_unsigned(std::string_view str, char delim)
constexpr const char * PASSWORD_KEY
constexpr const char * UI_CUSTOMIZATION
constexpr const char * VIDEO_ENABLED_KEY
constexpr const char * ACCOUNT_ISRENDEZVOUS_KEY
constexpr const char * UPNP_ENABLED_KEY
static constexpr const char FALSE_STR[]
constexpr const char * ALL_MODERATORS_ENABLED_KEY
void parseString(const std::map< std::string, std::string > &details, const char *key, std::string &s)
constexpr const char * ACTIVE_CODEC_KEY
void parsePath(const std::map< std::string, std::string > &details, const char *key, std::string &s, const std::filesystem::path &base)
constexpr const char * RINGTONE_PATH_KEY
constexpr const char * HAS_CUSTOM_USER_AGENT_KEY
constexpr const char * ACCOUNT_READRECEIPT_KEY
constexpr const char * USERNAME_KEY
constexpr const char * USER_AGENT_KEY
constexpr const char * ALIAS_KEY
static const JamiAccountConfig DEFAULT_CONFIG
constexpr const char * AUTHENTICATION_USERNAME_KEY
constexpr const char * DISPLAY_NAME_KEY
std::set< std::string > string_split_set(std::string &str, std::string_view separator)
constexpr const char * ACCOUNT_ENABLE_KEY
constexpr const char * LOCAL_MODERATORS_ENABLED_KEY
static constexpr const char ACTIVE_CALL_LIMIT[]
static constexpr const char PROXY_PUSH_TOKEN[]
std::string platform
Device push notification platform.
std::vector< unsigned > activeCodecs
std::string deviceKey
Device push notification token.
bool ringtoneEnabled
Play ringtone when receiving a call.
bool enabled
True if the account is enabled.
std::string alias
A user-defined name for this account.
std::string hostname
SIP hostname (SIP account) or DHT bootstrap nodes (Jami account)
bool autoAnswerEnabled
If true, automatically answer calls to this account.
std::set< std::string > defaultModerators
bool denySecondCallEnabled
If true, automatically deny new calls when already in one call to this account.
virtual void fromMap(const std::map< std::string, std::string > &)
const std::string type
Account type.
virtual std::map< std::string, std::string > toMap() const
int activeCallLimit
The number of concurrent calls for the account -1: Unlimited 0: Do not disturb 1: Single call +: Mult...
bool upnpEnabled
UPnP IGD controller and the mutex to access it.
std::string uiCustomization
information about the customization of ui
std::string mailbox
Account mail box.
bool sendReadReceipt
If true, send displayed status (and emit to the client)
std::string notificationTopic
Push notification topic.
void serializeDiff(YAML::Emitter &out, const AccountConfig &def) const
bool isRendezVous
If true mix calls into a conference.
std::string displayName
Display name when calling.
std::string ringtonePath
Ringtone file used for this account.
bool videoEnabled
Allows user to temporarily disable video calling.
std::string customUserAgent
User-agent used for registration.
virtual void unserialize(const YAML::Node &node)
bool sendComposing
If true, send composing status (and emit to the client)