77#define CONF_AUTH_USER MSRV_PROJECT_ID " .auth_user"
88#define CONF_AUTH_PASSWORD MSRV_PROJECT_ID " .auth_password"
99
10+ #define CONF_PERM_CHANGE_PLAYLISTS MSRV_PROJECT_ID " .permissions.change_playlists"
11+ #define CONF_PERM_CHANGE_OUTPUT MSRV_PROJECT_ID " .permissions.change_output"
12+ #define CONF_PERM_CHANGE_CLIENT_CONFIG MSRV_PROJECT_ID " .permissions.change_client_config"
13+
1014namespace msrv ::player_deadbeef {
1115
1216DB_misc_t PluginWrapper::definition_;
13-
1417DeadbeefLogger* PluginWrapper::logger_;
15-
1618Plugin* PluginWrapper::instance_;
17-
1819char PluginWrapper::licenseText_[] = MSRV_LICENSE_TEXT;
1920
2021const char PluginWrapper::configDialog_[] =
@@ -23,7 +24,10 @@ const char PluginWrapper::configDialog_[] =
2324 " property \" Music directories\" entry " CONF_MUSIC_DIRS " \"\" ;"
2425 " property \" Require authentication\" checkbox " CONF_AUTH_REQUIRED " 0;"
2526 " property \" User\" entry " CONF_AUTH_USER " \"\" ;"
26- " property \" Password\" password " CONF_AUTH_PASSWORD " \"\" ;" ;
27+ " property \" Password\" password " CONF_AUTH_PASSWORD " \"\" ;"
28+ " property \" Allow changing playlists\" checkbox " CONF_PERM_CHANGE_PLAYLISTS " 1;"
29+ " property \" Allow changing output device\" checkbox " CONF_PERM_CHANGE_OUTPUT " 1;"
30+ " property \" Allow changing default web interface configuration\" checkbox " CONF_PERM_CHANGE_CLIENT_CONFIG " 1;" ;
2731
2832Plugin::Plugin ()
2933 : player_(),
@@ -56,6 +60,7 @@ void Plugin::reconfigure()
5660 settings->authRequired = authRequired_;
5761 settings->authUser = authUser_;
5862 settings->authPassword = authPassword_;
63+ settings->permissions = permissions_;
5964
6065 settings->loadAll (MSRV_PLAYER_DEADBEEF);
6166
@@ -73,13 +78,15 @@ bool Plugin::refreshSettings()
7378 auto authRequired = ddbApi->conf_get_int (CONF_AUTH_REQUIRED, 0 ) != 0 ;
7479 auto authUser = ddbApi->conf_get_str_fast (CONF_AUTH_USER, " " );
7580 auto authPassword = ddbApi->conf_get_str_fast (CONF_AUTH_PASSWORD, " " );
81+ auto permissions = getPermissionsFromConfig ();
7682
7783 if (port_ == port &&
7884 allowRemote_ == allowRemote &&
7985 musicDirs_ == musicDirs &&
8086 authRequired_ == authRequired &&
8187 authUser_ == authUser &&
82- authPassword_ == authPassword)
88+ authPassword_ == authPassword &&
89+ permissions_ == permissions)
8390 {
8491 return false ;
8592 }
@@ -90,10 +97,27 @@ bool Plugin::refreshSettings()
9097 authRequired_ = authRequired;
9198 authUser_ = authUser;
9299 authPassword_ = authPassword;
100+ permissions_ = permissions;
93101
94102 return true ;
95103}
96104
105+ ApiPermissions Plugin::getPermissionsFromConfig ()
106+ {
107+ auto result = ApiPermissions::NONE;
108+
109+ if (ddbApi->conf_get_int (CONF_PERM_CHANGE_PLAYLISTS, 1 ))
110+ result |= ApiPermissions::CHANGE_PLAYLISTS;
111+
112+ if (ddbApi->conf_get_int (CONF_PERM_CHANGE_OUTPUT, 1 ))
113+ result |= ApiPermissions::CHANGE_OUTPUT;
114+
115+ if (ddbApi->conf_get_int (CONF_PERM_CHANGE_CLIENT_CONFIG, 1 ))
116+ result |= ApiPermissions::CHANGE_CLIENT_CONFIG;
117+
118+ return result;
119+ }
120+
97121void Plugin::handleMessage (uint32_t id, uintptr_t ctx, uint32_t p1, uint32_t p2)
98122{
99123 switch (id)
0 commit comments