Struct Profile#

Struct Documentation#

struct Profile#

A single research-group profile stored in the profiles manifest.

Passwords are never stored in plain text. Only the PBKDF2-SHA256 hash and the random salt used to compute it are persisted.

Profiles are loaded from and saved to ~/.config/CSRU/mosaic/profiles.json by ProfileManager.

See also

ProfileManager

Public Types

enum class Role : uint8_t#

Privilege level for this profile.

Values:

enumerator User#

Regular research-group profile.

enumerator Admin#

Full administrator — can manage all profiles and global settings.

Public Functions

inline bool is_guest() const noexcept#
Returns:

true if this is the built-in unauthenticated guest session.

inline bool has_password() const noexcept#
Returns:

true if a password hash is stored for this profile. Profiles without a password always pass authentication.

inline bool is_admin() const noexcept#
Returns:

true if this profile has administrator privileges.

Public Members

QString username#

Unique login key — lowercase alphanumeric + underscore, 3–32 chars.

QString displayName#

Human-readable group name shown in the login dialog and session metadata. Example: "Cognitive Science Lab".

QString initials#

One or two uppercase letters derived from displayName, shown inside the avatar circle. Example: "CL" for Cognitive Lab.

QString accentColour#

Hex RGB colour for the avatar background. Assigned round-robin from a fixed palette on registration. Example: "#5566dd".

QString salt#

Hex-encoded random 32-byte salt used in the password hash. Empty string means no password was set.

QString passwordHash#

Hex-encoded PBKDF2-HMAC-SHA256 output (100 000 iterations, 32-byte key). Empty string means no password was set — any login attempt succeeds.

QDateTime lastLogin#

UTC timestamp of the most recent successful login.

QDateTime created#

UTC timestamp when this profile was first created.

Role role = Role::User#

Privilege level — only Admin profiles open the admin panel after login.

QString institution#

Optional lab / university / department name (shown in admin panel and status bar).