NAME
Web::Solid::Auth - A Perl Solid Web Client
SYNOPSIS
# On the command line# Set your default webidexport SOLID_WEBID=https://timbl.inrupt.net/profile/card#me# Authentication to a podsolid_auth.pl authenticate# Get the http headers for a authenticated requestsolid_auth.pl headers GET https://timbl.inrupt.net/inbox/# Act like a curl command and fetch authenticated contentsolid_auth.pl curl -X GET https://timbl.inrupt.net/inbox/# Add some datasolid_auth.pl curl -X POST \-H "Content-Type: text/plain" \-d "abc" \https://timbl.inrupt.net/public/# Add a filesolid_auth.pl curl -X PUT \-H "Content-Type: application/ld+json" \-d "@myfile.jsonld" \https://timbl.inrupt.net/public/myfile.jsonld# Set a solid base urlexport SOLID_REMOTE_BASE=https://timbl.inrupt.net# List all resources on some Pod pathsolid_auth.pl list /public/# Get some datasolid_auth.pl get /inbox/# Post some datasolid_auth.pl post /inbox/ myfile.jsonld# Put some datasolid_auth.pl put /public/myfile.txt myfile.txt# Create a foldersolid_auth.pl put /public/mytestfolder/# Delete some datasolid_auth.pl delete /public/myfile.txt# Mirror a resource, container or treesolid_auth.pl mirror /public/ ./my_copy# Upload a directory to the pod# Add the -x option to do it for real (only a test without this option)solid_auth.pl -r upload /data/my_copy /public/# Clean all files in a container# Add the -x option to do it for real (only a test without this option)solid_auth.pl --keep clean /demo/# Clean a complete container# Add the -x option to do it for real (only a test without this option)solid_auth.pl -r clean /demo/# In a perl programuse Web::Solid::Auth;use Web::Solid::Auth::Listener;# Create a new authenticator for a podmy $auth = Web::Solid::Auth->new(webid => $webid);# Or tune a listernermy $auth = Web::Solid::Auth->new(webid => $webid ,listener => Web::Solid::Auth::Listener->new(scheme => 'https'host => 'my.server.org'port => '443' ,path => '/mycallback'));# Or, in case you have your own callback servermy $auth = Web::Solid::Auth->new(webid => $webid,redirect_uri => 'https://my.server.org/mycallback');# Generate a url for the user to authenticatemy $auth_url = $auth->make_authorization_request;# Listen for the oauth server to return tokens# the built-in listener for feedback from the openid provider# Check the code of Web::Solid::Auth::Listener how to# do this inside your own Plack application$auth->listen;##### If you already have access_tokens from previous stepif ($auth->has_access_token) {# Fetch the Authentication and DPoP HTTP headers for a# request to an authorized resourcemy $headers = $auth->make_authentication_headers($resource_url,$http_method);#..do you curl..lwp::agent..or what ever with the headers}
INSTALLATION
See the <https://metacpan.org/dist/Web-Solid-Auth/source/INSTALL> file in the distribution.
DESCRIPTION
This is a Solid-OIDC implementation of a connection class for the Solid server. Use the solid_auth command as a command line implementation. Check out the "example" directory for a demo web application.
CONFIGURATION
- webid
-
The Solid Webid to authenticate.
- cache
-
The location of the cache directory with connection parameters.
METHODS
- has_access_token()
-
Returns a true value when a cache contains an access token for the
"webid".
- make_clean()
-
Clear the cache directory.
- make_authorization_request()
-
Return an authorization URL that the use should open to authenticate this application.
- make_access_token($code)
-
When on the redirect url you get a
"code"from the authentication server you can use this method to get an access_token for the code.
- listen()
-
Create a small built-in web server to listen for token responses from the authentication server.
- get_access_token()
-
Return the cached access_token.
SEE ALSO
solid_auth
INSPIRATION
This was very much inspired by the Python solid-flask code by Rai <http://agentydragon.com> at <https://gitlab.com/agentydragon/solid-flask>, and Jeff Zucker's <https://github.com/jeff-zucker> Solid-Shell at <https://www.npmjs.com/package/solid-shell>.
COPYRIGHT AND LICENSE
This software is copyright (c) 2021 by Patrick Hochstenbach.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.