Remoto - VFS: VFS_curlauth Class Reference
Remoto - VFS

The VFS_curlauth authenticator performs a POST request to a url for authentication. More...

#include <VFS_curlauth.h>

Inheritance diagram for VFS_curlauth:
VFS_auth VFS_node

Public Slots

void replyFinished (QNetworkReply *reply)
 A network request has completed. More...
 
void sslErrors (QNetworkReply *reply, QList< QSslError > errors)
 An ssl error has occurred... More...
 
- Public Slots inherited from VFS_auth
virtual void executeRequest (VFS_request *t)
 Execute a VFS_request. More...
 
- Public Slots inherited from VFS_node
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...
 

Public Member Functions

Q_INVOKABLE VFS_curlauth (QString url, QString token="")
 
virtual ~VFS_curlauth ()
 
- Public Member Functions inherited from VFS_auth
 VFS_auth ()
 
virtual ~VFS_auth ()
 
virtual VFS_nodefind (VFS_request *r)
 Find a node using a VFS_request. More...
 
virtual bool isContainer ()
 A VFS_auth node cannot contain children. More...
 
- Public Member Functions inherited from VFS_node
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_nodeappend (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_requestcreateRequest (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_nodefind (QString path)
 Find a node by string path. More...
 
VFS_nodefindChildWithName (QString name)
 Check if a child with a given name exists. More...
 
virtual VFS_nodemount ()
 Mount this node. More...
 
virtual QString reportDetails ()
 Additional details for a generated report. More...
 
QString uniqueChildName (QString name)
 Generate a unique child name. More...
 
virtual VFS_nodeunmount ()
 Unmount this node. More...
 
virtual bool validChildName (QString name)
 Check if a node name is valid. More...
 

Protected Member Functions

virtual void ls (VFS_request *r)
 List the users available for this auth method. More...
 
virtual void read (VFS_request *r)
 Perform an authentication request by read()ing from this node, which will curl the _url via http POST. More...
 
- Protected Member Functions inherited from VFS_auth
virtual QByteArray icon ()
 Return the users icon from VFS_icons. More...
 
- Protected Member Functions inherited from VFS_node
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 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...
 
virtual void write (VFS_request *r)
 Write data to this node. More...
 

Private Attributes

QNetworkAccessManager _manager
 The curl connection manager. More...
 
QMap< QNetworkReply *, VFS_request * > _requests
 A map of outstanding VFS_request objects to their QNetworkReply objects. More...
 
QString _token
 A token sent when requesting a listing from a remote url. More...
 
QUrl _url
 The url to curl. More...
 

Additional Inherited Members

- Signals inherited from VFS_node
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 Public Member Functions inherited from VFS_node
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...
 
- Protected Attributes inherited from VFS_node
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...
 

Detailed Description

The VFS_curlauth authenticator performs a POST request to a url for authentication.

VFS_curlauth will post username and password to the _url.

The response from that url will need to populate the _user and _success fields of a VFS_request.

Definition at line 11 of file VFS_curlauth.h.

Constructor & Destructor Documentation

◆ VFS_curlauth()

VFS_curlauth::VFS_curlauth ( QString  url,
QString  token = "" 
)
explicit
Parameters
urlThe url to curl
tokenAn (optional) token string

Auth requests will perform a POST request to the specified url. The request is performed asynchronously without blocking.

The token, if present, will be sent during ls() commands to the remote url.

Definition at line 27 of file VFS_curlauth.cpp.

◆ ~VFS_curlauth()

VFS_curlauth::~VFS_curlauth ( )
virtual

Definition at line 43 of file VFS_curlauth.cpp.

Member Function Documentation

◆ ls()

void VFS_curlauth::ls ( VFS_request r)
protectedvirtual

List the users available for this auth method.

Parameters
rThe VFS_request object

Reimplemented from VFS_node.

Definition at line 113 of file VFS_curlauth.cpp.

◆ read()

void VFS_curlauth::read ( VFS_request r)
protectedvirtual

Perform an authentication request by read()ing from this node, which will curl the _url via http POST.

Parameters
rThe VFS_request object

When a user requests authentication against this node, an http request is sent to the _url with the credentials provided in the metadata as POST data.

Credentials must be in the VFS_request::_data object:

d["username"] = "username";
d["password"] = "password";

Because this is an asynchronous non-blocking request, this method will set r->_isCallback=true and call issueResponse() when the http request is complete.

The results of the http request will be parsed as json:

//a successful authentication
{
"valid":true,
"username":"jdoe",
"uidnumber":1234,
"realname":"John Doe",
"groups": ["group1","group2"]
}

A null or unparseable json response will result in authorization denied.

Reimplemented from VFS_node.

Definition at line 80 of file VFS_curlauth.cpp.

◆ replyFinished

void VFS_curlauth::replyFinished ( QNetworkReply *  reply)
slot

A network request has completed.

Parameters
replyThe reply from a network request

This method will call VFS_node::issueResponse() on the VFS_request or generate an error.

Definition at line 141 of file VFS_curlauth.cpp.

◆ sslErrors

void VFS_curlauth::sslErrors ( QNetworkReply *  reply,
QList< QSslError >  errors 
)
slot

An ssl error has occurred...

show an error and call replyFinished()

Parameters
replyThe reply from a network request
errorsThe list of ssl errors to display

Definition at line 251 of file VFS_curlauth.cpp.

Member Data Documentation

◆ _manager

QNetworkAccessManager VFS_curlauth::_manager
private

The curl connection manager.

Definition at line 25 of file VFS_curlauth.h.

◆ _requests

QMap< QNetworkReply *, VFS_request *> VFS_curlauth::_requests
private

A map of outstanding VFS_request objects to their QNetworkReply objects.

Definition at line 26 of file VFS_curlauth.h.

◆ _token

QString VFS_curlauth::_token
private

A token sent when requesting a listing from a remote url.

Definition at line 27 of file VFS_curlauth.h.

◆ _url

QUrl VFS_curlauth::_url
private

The url to curl.

Definition at line 24 of file VFS_curlauth.h.


The documentation for this class was generated from the following files: