Remoto - VFS
|
VFS_sessionManager manages connected clients and their session data. More...
#include <VFS_sessionManager.h>
Public Member Functions | |
Q_INVOKABLE | VFS_sessionManager (QString cwd, QString userdata, qint64 ttl, QString tokendata="", QString developerGroup="", double pruneProbability=0.1) |
Create a session node, whose job is to return session data for a user. More... | |
virtual | ~VFS_sessionManager () |
virtual VFS_node * | find (VFS_request *r) |
Find a node using a VFS_request. More... | |
virtual QString | getCWD () |
Return the manager's _cwd value. More... | |
virtual QString | reportDetails () |
Return information about any current sessions. More... | |
![]() | |
Q_INVOKABLE | VFS_node () |
The VFS_node constructor will add its instance to the VFS_node::__allNodes global node registry, observing thread safety rules. More... | |
virtual | ~VFS_node () |
VFS_node destructor. More... | |
virtual VFS_node * | append (QString name, VFS_node *node, bool containerCheck=true, QString user="server") |
Append a VFS_node as a child of this node. More... | |
QString | className () |
Return the class name of a node. More... | |
virtual VFS_request * | createRequest (VFS_request::requestType type, QString path, QString user="unknown", QJsonDocument data=QJsonDocument(), QJsonObject metadata=QJsonObject(), bool dontDelete=false) |
Create a new VFS_request with this object as _origin. More... | |
VFS_node * | find (QString path) |
Find a node by string path. More... | |
VFS_node * | findChildWithName (QString name) |
Check if a child with a given name exists. More... | |
virtual bool | isContainer () |
A VFS_node may have children. More... | |
virtual VFS_node * | mount () |
Mount this node. More... | |
QString | uniqueChildName (QString name) |
Generate a unique child name. More... | |
virtual VFS_node * | unmount () |
Unmount this node. More... | |
virtual bool | validChildName (QString name) |
Check if a node name is valid. More... | |
Protected Slots | |
virtual void | receiveResponse (VFS_request *t) |
VFS_sessionManager::receiveResponse. More... | |
Protected Member Functions | |
virtual QByteArray | icon () |
Return the user icon from VFS_icons. More... | |
virtual void | read (VFS_request *r) |
Read from the sessionManager. More... | |
virtual void | write (VFS_request *r) |
Write to the session manager to create a session. More... | |
![]() | |
virtual void | aclDefaults (VFS_request *r) |
Return default values and features associated wth this node. More... | |
void | addACLDefault (QJsonObject &acl, bool value, QString description="") |
Add a default value to the acl object. More... | |
void | addACLFeature (QJsonObject &acl, QString feature, bool value, QString description="") |
Add a feature to the acl object. More... | |
void | addACLFeatureGroup (QJsonObject &acl, QString feature, QString group, bool value) |
Add a feature group to the acl object. More... | |
void | addACLFeatureUser (QJsonObject &acl, QString feature, QString user, bool value) |
Add a feature user to the acl object. More... | |
void | addACLGroup (QJsonObject &acl, QString group, bool value) |
Add a group to the acl object. More... | |
void | addACLUser (QJsonObject &acl, QString user, bool value) |
Add a user to the acl object. More... | |
virtual void | issueRequest (VFS_node *target, VFS_request *t) |
Issue a VFS_request to its target. More... | |
virtual void | issueRequest (VFS_request *t) |
A convenience function. More... | |
virtual void | issueResponse (VFS_request *t) |
Once a request has been completed, issue a response. More... | |
virtual void | ls (VFS_request *r) |
List the contents of this node. More... | |
virtual void | metadata (VFS_request *r) |
Fetch the metadata of this node. More... | |
virtual void | releaseLock (VFS_request *r) |
Release a lock on this node. More... | |
virtual void | report (VFS_request *r) |
Report debugging information about the current state of this node. More... | |
virtual void | requestLock (VFS_request *r) |
Request a lock on this node. More... | |
virtual void | rm (VFS_request *r) |
Remove a child entry from a node, or the node itself. More... | |
virtual void | submit (VFS_request *r) |
Submit a diff to a node. More... | |
virtual void | subscribe (VFS_request *r) |
Add an entry to this node's _subscription list. More... | |
virtual void | unsubscribe (VFS_request *r) |
Remove an entry from this node's _subscription list. More... | |
virtual void | unsubscribePath (QString path) |
Unsubscribe all references to a subpath. More... | |
Protected Attributes | |
QString | _cwd |
The VFS path of this node. More... | |
QString | _developerGroup |
Name of the group used for development mode. Members of this group will have additional preferences and utilities. More... | |
VFS_node * | _sessions |
A VFS_node to hold current sessions. More... | |
QString | _tokendata |
A VFS path to store session tokens. More... | |
qint64 | _ttl |
Number of seconds for sessions to live once created (time to live) More... | |
QString | _userdata |
A VFS path to store user data. More... | |
![]() | |
VFS_children | _children |
This node's children. More... | |
QMutex | _lock |
A recursive mutex that is local to this node. More... | |
VFS_subscriptionType | _subscribers |
This node's subscribers. These subscribers will receive diff notifications. More... | |
Private Member Functions | |
QString | generateAuthtoken () |
Generate a new unique authtoken for this session. More... | |
void | pruneTokens () |
Run a session token prune on a separate thread. More... | |
Private Attributes | |
double | _pruneProbability |
The probability that a prune will happen. More... | |
VFS_sessionTokenPruner | _pruner |
Our pruner. More... | |
Additional Inherited Members | |
![]() | |
virtual void | applyDiff (VFS_request *r) |
Apply a diff received via subscription. More... | |
virtual void | executeRequest (VFS_request *t) |
Based on the VFS_request::requestType, execute the function associated with an operation. More... | |
void | notifySubscribers (VFS_node *origin, VFS_request *t) |
Propagate a diff to subscribers. More... | |
virtual void | receiveResponse (VFS_request *t) |
Once a VFS_request has been completed, a response will be issued back to its _origin. More... | |
void | remove (bool andDelete) |
Remove a child node. More... | |
virtual void | remove (VFS_node *node=nullptr, QString *name=nullptr, QString user="server") |
Remove a child node from this node. More... | |
virtual void | subtreeRequest (VFS_request *t) |
find() the target of a VFS_request, and execute the request More... | |
virtual void | unsubscribeAll (VFS_node *n) |
Remove all references to a subscriber from this node. More... | |
![]() | |
void | diff (VFS_node *origin, VFS_request *t) |
Emit a diff, which will trigger notifySubscribers() for a mounted node. More... | |
void | finished (bool andDelete=false) |
Emitted if a thread fails to create its node, or a node is rm()'d, or any other reason a node has completed its lifecycle. It is deleted if andDelete==true . More... | |
void | mounted () |
Emitted when a node is mount()ed. More... | |
void | unmounted (VFS_node *self) |
Emitted when a node is unmount()ed. More... | |
![]() | |
static bool | __isNode (VFS_node *) |
Check to see if a node is in the global registry. More... | |
static QString | code (QString nodename, QString libname, QString &error) |
Fetch code or any other resource from a node. More... | |
VFS_sessionManager manages connected clients and their session data.
The VFS_sessionManager node will keep an entry for each logged in user. It will manage session timeouts, ACLs, and session data based on client type and authentication data.
A developer group can be specified in the constructor. Sessions with users belonging to this group will have additional preferences and options available to help the debugging process.
If tokens are used, a random value is compared against a pruneProbability to determine if the server should pruneTokens(). If the lottery is won, pruneTokens() is called on a separate thread. A pruneProbability of 1.0 will always win, where a prune probability of 0 will never run.
Tokens are stored on a VFS path.
The token format:
tokendata
path. Definition at line 53 of file VFS_sessionManager.h.
|
explicit |
Create a session node, whose job is to return session data for a user.
cwd | The VFS path to this node. |
userdata | A VFS path to the root of the user data. |
tokendata | A VFS path to store token data. If this path is empty, tokens will not be checked or used. |
ttl | The number of seconds for created sessions to live, or 0 for sessions without an expiration. |
developerGroup | The group that session users must belong to unlock development features. |
pruneProbability | The probability that a prune operation will happen, on [0,1]. The default value is 0.1 == 10%. |
tokendata
field is missing or empty, tokens will not be issued or checked during authentication.This will generally be the user's preferences, interface layouts, current layout, etc. This is the mechanism used for ACL concepts in the VFS.
Definition at line 61 of file VFS_sessionManager.cpp.
|
virtual |
Definition at line 79 of file VFS_sessionManager.cpp.
|
virtual |
Find a node using a VFS_request.
r | The VFS_request object |
This is overridden from VFS_node::find() to include an exception for the preferences.rfm
and preferencesBase.rfm
base files.
Reimplemented from VFS_node.
Definition at line 104 of file VFS_sessionManager.cpp.
|
private |
Generate a new unique authtoken for this session.
Definition at line 397 of file VFS_sessionManager.cpp.
|
virtual |
Return the manager's _cwd
value.
_cwd
value Definition at line 373 of file VFS_sessionManager.cpp.
|
protectedvirtual |
Return the user icon from VFS_icons.
Reimplemented from VFS_node.
Definition at line 89 of file VFS_sessionManager.cpp.
|
private |
Run a session token prune on a separate thread.
This is a potentially long process, because we must check all entries in VFS a folder and determine if any are expired or inconsistent.
Definition at line 410 of file VFS_sessionManager.cpp.
|
protectedvirtual |
Read from the sessionManager.
r | The VFS_request object |
This is overridden from VFS_node::read() to include an exception for the preferences.rfm
and preferencesBase.rfm
base files.
Reimplemented from VFS_node.
Definition at line 125 of file VFS_sessionManager.cpp.
|
protectedvirtualslot |
VFS_sessionManager::receiveResponse.
r | The VFS_request object |
Definition at line 242 of file VFS_sessionManager.cpp.
|
virtual |
Return information about any current sessions.
Reimplemented from VFS_node.
Definition at line 386 of file VFS_sessionManager.cpp.
|
protectedvirtual |
Write to the session manager to create a session.
r | The VFS_request object |
If the r->_requestType==VFS_request::create
, create a new session and append it to the sessionManager. This will also populate r->_data
with session data based on the session type.
Reimplemented from VFS_node.
Definition at line 181 of file VFS_sessionManager.cpp.
|
protected |
The VFS path of this node.
Definition at line 82 of file VFS_sessionManager.h.
|
protected |
Name of the group used for development mode. Members of this group will have additional preferences and utilities.
Definition at line 86 of file VFS_sessionManager.h.
|
private |
The probability that a prune will happen.
Definition at line 90 of file VFS_sessionManager.h.
|
private |
Our pruner.
Definition at line 91 of file VFS_sessionManager.h.
|
protected |
A VFS_node to hold current sessions.
Definition at line 87 of file VFS_sessionManager.h.
|
protected |
A VFS path to store session tokens.
Definition at line 84 of file VFS_sessionManager.h.
|
protected |
Number of seconds for sessions to live once created (time to live)
Definition at line 85 of file VFS_sessionManager.h.
|
protected |
A VFS path to store user data.
Definition at line 83 of file VFS_sessionManager.h.