14 #include <unordered_map>
45 p =
static_cast<Privilege>(int (prior) + 1);
70 using UserDataPair = std::pair <std::string, UserData::DataStore *>;
71 using UserDataMap = std::unordered_map <std::string, UserData::DataStore *>;
76 User (
const std::string &
username,
const std::string &pass,
bool encrypt =
false);
86 bool changePassword (
const std::string &old,
const std::string &pass);
88 bool assumeShadowPassword (
const std::string &old,
const std::string &pass);
104 void removeData (
const std::string &datatype,
const std::string &dataid =
"");
110 return name.compare (other);
117 static void shadow (
bool mode);
Generic data type.
Definition: parsnip.h:81
Connection to a pianod client, along with context and state of that connection.
Definition: connection.h:54
Pianod service, a customized FootballService for Pianod connections.
Definition: connection.h:115
Storage mechanism for user data.
Definition: datastore.h:56
Data about each user.
Definition: user.h:53
bool havePrivilege(const Privilege priv) const
Definition: user.cpp:293
UserData::DataStore * getData(const std::string &datatype, const std::string &dataid="") const
Get data associated with a user.
Definition: user.cpp:346
User(const std::string &username, const std::string &pass, bool encrypt=false)
Create a new user with the username and password.
Definition: user.cpp:131
std::string name
User's login name.
Definition: user.h:64
bool operator<(const User &other)
Definition: user.h:106
void updateData(void)
Definition: user.h:102
std::unordered_map< std::string, UserData::DataStore * > UserDataMap
Definition: user.h:71
UserDataMap data
Data sets attached to the user.
Definition: user.h:72
void removeData(const std::string &datatype, const std::string &dataid="")
Remove data associated with a user.
Definition: user.cpp:354
EnumeratedArray< Privilege, bool > privileges
Assigned privileges.
Definition: user.h:67
std::pair< std::string, UserData::DataStore * > UserDataPair
Definition: user.h:70
const std::string & username(void) const
Definition: user.h:82
static User * getStartscriptUser(void)
Retrieve a user for processing the startup script.
Definition: user.cpp:491
void assignRank(Rank newrank)
Set a user's rank.
Definition: user.cpp:265
Rank rank
Assigned rank.
Definition: user.h:66
void setPassword(const std::string &pass)
Change the password in a user's record.
Definition: user.cpp:149
void setPrivilege(const Privilege priv, bool setting)
Definition: user.cpp:288
const char * getRankName(void) const
Get the rank name for the current user.
Definition: user.cpp:475
bool authenticate(const char *trypass) const
Validate a user's credentials (username/password).
Definition: user.cpp:210
User & operator=(User &&)=default
static time_t write_time
Definition: user.h:56
User(const User &)=delete
bool attachData(UserData::DataStore *)
Attach some data to a user.
Definition: user.cpp:321
bool changePassword(const std::string &old, const std::string &pass)
Change a user's password, authenticating the old one.
Definition: user.cpp:231
static bool shadow_mode
Definition: user.h:55
Parsnip::Data persist() const
Prepare data for persistence.
Definition: user.cpp:365
bool online(const PianodService &service) const
Determine if a user is online.
Definition: user.cpp:300
~User()
Definition: user.cpp:140
static bool shadow()
Definition: user.h:118
std::string password
Encrypted password.
Definition: user.h:65
user_write_priority_t
Definition: user.h:58
@ IMPORTANT
User creation.
Definition: user.h:60
@ TRIVIAL
Ratings.
Definition: user.h:62
@ CRITICAL
User removal, privilege change, etc.
Definition: user.h:59
@ NOMINAL
Sources, preferences, data attachments, etc.
Definition: user.h:61
static User reconstitute_user(const Parsnip::Data &data)
Create (restore) a user from a Parsnip object.
Definition: user.cpp:404
Rank getRank(void) const
Definition: user.h:94
static const Privilege getPrivilege(const std::string &privilege)
Translate a privilege to its enumerator.
Definition: user.cpp:453
static void scheduleWrite(WritePriority priority)
Definition: user.cpp:57
static void setVisitorRank(const std::string &rank)
Definition: user.cpp:485
static bool reconstituteUserData(User &user, const Parsnip::Data &data)
static Rank visitor_rank
Rank for users that have not authenticated.
Definition: user.h:115
static Rank getVisitorRank()
Definition: user.h:123
bool authenticate(const std::string &trypass) const
Definition: user.h:85
enum User::user_write_priority_t WritePriority
bool haveRank(const Rank rank) const
Determine if a user has a rank or better.
Definition: user.cpp:284
static const char * getPrivilegeName(Privilege privilege)
Translate a privilege enumerator to its text.
Definition: user.cpp:481
User & operator=(const User &)=delete
Container and manager class for users.
Definition: users.h:32
User data storage mechanism.
Essential data structures and support.
Debug/event logging interface.
Privilege
User privilege flags, corresponding to an array position.
Definition: user.h:32
@ Tuner
User may set other users' presence, for autotuning.
@ Shadow
Attribute: User was created automatically, shadowing a user account.
@ Queue
User may queue or cancel songs. (Automatic for standard rank.)
@ Service
User may add or remove sources. (Automatic for admin rank.)
@ Influence
User's playlist preferences influence autotuning selections.
@ Present
Attribute: Consider user present, even if not logged in.
void register_user_commands(Football::ServiceBase *service)
static Privilege operator++(Privilege &p, int)
Postfix increment operator to allow Privilege iteration.
Definition: user.h:43
Rank
User types in ascending ranks/level of authority.
Definition: user.h:24
@ Listener
User can query and view song-related data, but not change selections.
@ None
User is unauthorized to do anything except log in.
@ Administrator
User has full authorization, except for accessing others' private data.
@ Standard
User can query, choose playlist, request music, change volume.