Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
 into dev
  • Loading branch information
jaxoncreed committed Nov 1, 2019
2 parents ab998bc + b183c7a commit 97966cf
Show file tree
Hide file tree
Showing 78 changed files with 1,571 additions and 62 deletions.
45 changes: 32 additions & 13 deletions test/integration/acl-tls-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,11 @@ var rm = require('../utils').rm
var ldnode = require('../../index')
var ns = require('solid-namespace')($rdf)

var address = 'https://localhost:3456/test/'
let rootPath = path.join(__dirname, '../resources')
let configPath = path.join(rootPath, 'config')
const port = 7777
const serverUri = `https://localhost:7777`
const rootPath = path.join(__dirname, '../resources/acl-tls')
const dbPath = path.join(rootPath, 'db')
const configPath = path.join(rootPath, 'config')

var aclExtension = '.acl'
var metaExtension = '.meta'
Expand All @@ -37,8 +39,9 @@ var globFile = testDir + '/*'
var origin1 = 'http:https://example.org/'
var origin2 = 'http:https://example.com/'

var user1 = 'https://user1.databox.me/profile/card#me'
var user2 = 'https://user2.databox.me/profile/card#me'
var user1 = 'https://tim.localhost:7777/profile/card#me'
var user2 = 'https://nicola.localhost:7777/profile/card#me'
var address = 'https://tim.localhost:7777'
var userCredentials = {
user1: {
cert: fs.readFileSync(path.join(__dirname, '../keys/user1-cert.pem')),
Expand All @@ -50,22 +53,38 @@ var userCredentials = {
}
}

describe('ACL with WebID+TLS', function () {
// TODO Remove skip. TLS is currently broken, but is not a priority to fix since
// the current Solid spec does not require supporting webid-tls on the resource
// server. The current spec only requires the resource server to support webid-oidc,
// and it requires the IDP to support webid-tls as a log in method, so that users of
// a webid-tls client certificate can still use their certificate (and not a
// username/password pair or other login method) to "bridge" from webid-tls to
// webid-oidc.
describe.skip('ACL with WebID+TLS', function () {
var ldpHttpsServer
var ldp = ldnode.createServer({
mount: '/test',
var serverConfig = {
root: rootPath,
serverUri,
dbPath,
port,
configPath,
sslKey: path.join(__dirname, '../keys/key.pem'),
sslCert: path.join(__dirname, '../keys/cert.pem'),
webid: true,
strictOrigin: true,
multiuser: true,
auth: 'tls',
rejectUnauthorized: false
})
rejectUnauthorized: false,
strictOrigin: true,
host: { serverUri }
}
var ldp = ldnode.createServer(serverConfig)

before(function (done) {
ldpHttpsServer = ldp.listen(3456, done)
ldpHttpsServer = ldp.listen(port, () => {
setTimeout(() => {
done()
}, 0)
})
})

after(function () {
Expand Down Expand Up @@ -466,7 +485,7 @@ describe('ACL with WebID+TLS', function () {
})

describe('Read-only', function () {
var body = fs.readFileSync(path.join(__dirname, '../resources/acl-tls/read-acl/.acl'))
var body = fs.readFileSync(path.join(__dirname, '../resources/acl-tls/tim.localhost/read-acl/.acl'))
it('user1 should be able to access ACL file', function (done) {
var options = createOptions('/acl-tls/read-acl/.acl', 'user1')
request.head(options, function (error, response, body) {
Expand Down
44 changes: 22 additions & 22 deletions test/keys/user1-cert.pem
Original file line number Diff line number Diff line change
@@ -1,23 +1,23 @@
Bag Attributes
friendlyName: user1 [on user1.databox.me]'s WebID ID
localKeyID: 4A 83 02 D8 45 D4 50 5C 29 45 D7 6E 75 41 5A 71 C2 D7 ED 1B
subject=/O=WebID/CN=user1 [on user1.databox.me]
issuer=/O=WebID/CN=user1 [on user1.databox.me]
-----BEGIN CERTIFICATE-----
MIIC6TCCAlSgAwIBAgIBKjALBgkqhkiG9w0BAQswNjEOMAwGA1UEChMFV2ViSUQx
JDAiBgNVBAMMG3VzZXIxIFtvbiB1c2VyMS5kYXRhYm94Lm1lXTAeFw0wMDAxMDEw
MDAwMDBaFw00OTEyMzEyMzU5NTlaMDYxDjAMBgNVBAoTBVdlYklEMSQwIgYDVQQD
DBt1c2VyMSBbb24gdXNlcjEuZGF0YWJveC5tZV0wggEiMA0GCSqGSIb3DQEBAQUA
A4IBDwAwggEKAoIBAQC9prgg9hPV1ICTDJpOphfO46KpDSnsE8L+JI2wp5nIxgAK
WDGfOmjLfJN3JJk90G0Tr8FjrY230XBL8yW7JG9K94NhPzltcP3lbMPRub9CYPP+
z8pMiJdwI3W4gIM9BTWP83p+/DIwL8xVreTGh8hd2BuWCOOBO35NrHRC0wf55GwS
LF+PHHy5JCHJyIN6sDsoAqjgH1/cmH7VGyiJ8AdbZePavMQSmo/9aADPH2qC/se4
tHp8NCww2ed9iZ5Eb+R1foK7SICZOZaOKZzIbWUsnIE9jDZDC/HTGjx04v69xm9n
okAiNWOZ23NwYE6VJtKbypgEZ9Sw1pxW3FOMM2RbAgMBAAGjgYYwgYMwDAYDVR0T
AQH/BAIwADAdBgNVHQ4EFgQUMIIBIjANBgkqhkiG9w0BAQEFAAMwHwYDVR0jBBgw
FoAUMIIBIjANBgkqhkiG9w0BAQEFAAMwMwYDVR0RBCwwKoYoaHR0cHM6Ly91c2Vy
MS5kYXRhYm94Lm1lL3Byb2ZpbGUvY2FyZCNtZTALBgkqhkiG9w0BAQsDgYEAPY/B
4LdzOshkaVp9WVm53SEHq2pgXzlZQqTaFkXzGg9OkTA0yh/J0PQkYbs/a9xZOQj4
Ki8VpoGoxAEtpf5IrchAKU+9i7EdC7eadfHwoo5FKt1XUX1r+71kvWmvABHCV4Nq
RGPUoNEE9gJ1OJxx1mEI1+xTq05ZOm1NRSU2Sbs=
-----END CERTIFICATE-----
MIID0zCCArugAwIBAgIJAJIyT436cY6uMA0GCSqGSIb3DQEBBQUAMGAxIjAgBgNV
BAMTGVdlYklEIGZvciBUaW0gQmVybmVycy1MZWUxOjA4BgoJkiaJk/IsZAEBFCpo
dHRwczovL3RpbS5sb2NhbGhvc3Q6Nzc3Ny9wcm9maWxlL2NhcmQjbWUwHhcNMTkx
MDI0MTgyMzUyWhcNMjkxMDIxMTgyMzUyWjBgMSIwIAYDVQQDExlXZWJJRCBmb3Ig
VGltIEJlcm5lcnMtTGVlMTowOAYKCZImiZPyLGQBARQqaHR0cHM6Ly90aW0ubG9j
YWxob3N0Ojc3NzcvcHJvZmlsZS9jYXJkI21lMIIBIjANBgkqhkiG9w0BAQEFAAOC
AQ8AMIIBCgKCAQEAtVinQ0UG3k3P0G/rQiH8hzTdpyeHePZXZHEx4fTXiIrPgDyY
oLxzzzl3A6VQ+zCV0SQ17npauEGQzVXg+QhOwRUbH4rfOoT6CrYmcnhrmkiGAqfY
HO2I5DsJAyiLtuTmMPBVkLgDuhs0eOR0jsjbBE1AJ809i4Nngu5vYSNhf3rZz/qU
ZEvvWDnb50EQJrAGeWndNl/+EohENPKlpFmBedgttwJGc/skuNpAwBta+F03EdO8
6V2Z+qDQKdyG1VvXVF5SVB9jPOXkWLQrTTyjcyyE8Sx62ZXxDlsYvQAGd27Iuw4E
emmST8jxvjob8mC5Pb1KAhAK7EIbMIUAP456TwIDAQABo4GPMIGMMB0GA1UdDgQW
BBSKeuVdr8beU5Y6NkeggCSCtlZZrDA4BgNVHREBAf8ELjAshipodHRwczovL3Rp
bS5sb2NhbGhvc3Q6Nzc3Ny9wcm9maWxlL2NhcmQjbWUwCQYDVR0TBAIwADATBgNV
HSUEDDAKBggrBgEFBQcDAjARBglghkgBhvhCAQEEBAMCB4AwDQYJKoZIhvcNAQEF
BQADggEBACH7beIj0OFsq6FwkthagI53cxPhjIxFOYdy8G5mN/JcCyL0xemJm5Fz
HEXKv/QhFdbX6NCCal/d+2r566fRf1C/8sY/Cx4yKqYaZ/ZZeH/q3IlfQSyEZEJy
XLARCG9WzeXHJsL6u/lN/rcrI3ylUb9qAAzlNWyg3xtb58ieUSUjuO0fOfKMu+LJ
VGPpMyhtjwBhelJ32l6ffHpnyzj6v14QxTEGWQpLvtX1iUDExNbHcm8khlbEgGzG
Zyrojk0cHg3tH4nmBei7QvuLOiDaBs2N5ITTETwExiWD2CUPCiYO0DMr0oljN/nS
KRRJsj1QOjM4/A46RjXWhmvx7RTXQdM=
-----END CERTIFICATE-----
55 changes: 28 additions & 27 deletions test/keys/user1-key.pem
Original file line number Diff line number Diff line change
@@ -1,27 +1,28 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAvaa4IPYT1dSAkwyaTqYXzuOiqQ0p7BPC/iSNsKeZyMYAClgx
nzpoy3yTdySZPdBtE6/BY62Nt9FwS/MluyRvSveDYT85bXD95WzD0bm/QmDz/s/K
TIiXcCN1uICDPQU1j/N6fvwyMC/MVa3kxofIXdgblgjjgTt+Tax0QtMH+eRsEixf
jxx8uSQhyciDerA7KAKo4B9f3Jh+1RsoifAHW2Xj2rzEEpqP/WgAzx9qgv7HuLR6
fDQsMNnnfYmeRG/kdX6Cu0iAmTmWjimcyG1lLJyBPYw2Qwvx0xo8dOL+vcZvZ6JA
IjVjmdtzcGBOlSbSm8qYBGfUsNacVtxTjDNkWwIDAQABAoIBABMncnNJxykShEXV
wQPufHsVvIjsXm6MdGYslO7hjoObk8d3rtNRF+JtW4tt89gtY8bYOmTx011cVsYk
8YucG21r4CYDN66Y+duhB4n4A5wVpK74l4rxRLI7spkGybpw+z7lrVqD6CG7whxp
KrDuZ8sql2ao0SltM81ufHN/Us/nGEIho8YUAh3/aIwqHPEb8OPmlbDcTJBwN0kh
54YeGN/1QT81DXWomg2VR9KTzfy9Z0v7jl3phcAEvM6Kp2rvSKFWnw7DvB/+XTQf
6ekN0elBF8aIp+5lC2Kpui+DqQjSFaMhkZnnX0Yd4OjX3RE8CzpYUa60lydZjZVd
mszCKDkCgYEA9xiEfWIfcBSx5jt3+o+U4MHJCw5kF5i07E/4IetZ9mAHemr8UCmO
uGRxgokFrOapXIMTY4wPKSIl5Jb9laDEfUZcQs4Fl0cs9aE21JN9QeeusRzOiTMo
5MGOqDIqn6XUukDCVAQ0fQuY8uAEkFHLbq+MwMOsooiR2Ta9+XhfyrcCgYEAxHxF
OSuQ3RHrTstvyAenmCIY6XQOsO8eVSpk8afsAYJYSwTWlrEUNRw310YnVT2FuW/r
pPqXbiHAeNCFsT8LdCfGiEaS0kegXYg66ZX85wIiaXTEsnmNWjNr6K6iOi1xl92J
OEqtCwI+rBX0tl6K1BvA/e2uoaoARMW5ZlLo330CgYBdVKNmgJODUC3J2ph8yZLg
OhHn3S2tQ/7Ca4o7tZurVaY9dP+Mf8Xqm/XL6ll8bzt1OAUwyoxHayCI8QcjZzAQ
aW0bxpmSBE5VEOmW7YaYSBxRxaG1bN97WCi8GwbCem6ZUzCTb2sr+B9zTW4r3NlM
G368qKwiUBdWxjiHbBIyjQKBgDrK3IPAz3X22KwZH3eBItrYyQ+B1KuIwVDGgLH2
hx3kfLrl1bf9gIhryyG1MivFXvAf1yjkes9PdiIwcvCYZrr48+TvCRu2pvuVudsP
MD+HWfioIfstd+hXnqBfMNerpWPFvDuFzMWQhGRFpZW0MGJLc7IHnsts7OunJlTB
1kCZAoGBAO1//QwkCvgnS5Na8zjBFa5K48llYC2eZ4L21/PI1DNXO5phvdy2r3rW
h3LbL05PNFPIDX5JkGJslO7M3o/dbMMY9rKZ/EOsveYYD292oZVbUXFZkF9yQWkY
8daXg7oMOkkKy7WzHI3fAxJVquaobdHyIImwpB1YUzyXpuaihecj
-----END RSA PRIVATE KEY-----
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC1WKdDRQbeTc/Q
b+tCIfyHNN2nJ4d49ldkcTHh9NeIis+APJigvHPPOXcDpVD7MJXRJDXuelq4QZDN
VeD5CE7BFRsfit86hPoKtiZyeGuaSIYCp9gc7YjkOwkDKIu25OYw8FWQuAO6GzR4
5HSOyNsETUAnzT2Lg2eC7m9hI2F/etnP+pRkS+9YOdvnQRAmsAZ5ad02X/4SiEQ0
8qWkWYF52C23AkZz+yS42kDAG1r4XTcR07zpXZn6oNAp3IbVW9dUXlJUH2M85eRY
tCtNPKNzLITxLHrZlfEOWxi9AAZ3bsi7DgR6aZJPyPG+OhvyYLk9vUoCEArsQhsw
hQA/jnpPAgMBAAECggEBAKEUhzYciTZLfa1SzHCoyau7jKseVJpgjk38sedYWV7C
lf/9U0FrQ58tFwcY/+6vQFROSs1yx0RlkN6jSrtJ4tJlEfuZmiFb3tJG663AQyv/
AXI4bqF7aJ35xk6U5E1n0wRjZk2u9jiIU7qSiuoNhWWzzKnOB7310aseabap+7+D
+/gTd4rrJUCM3K4BMCLmtGUKSh/F2EpIyGM2qQC7zhsvj/F1W3V6n2UhxyNs/2dn
MS34ddmuYRTUt4qbOXeRt2duKFGHmlBhey0Q+/hdE74zV7n2Rq92UvSitP3me5al
RPpgTZ4NFa4w0rshvzbWXKBJWRj2bBk5aumx9ZWlimECgYEA4NQ7MIVpsBGwFiss
JqD4eBr+7lRRxe0+oUtYdHkoC5iGnRQACQyKjk7/5kZRWEvix9SsnhJ5YZ/GWpEl
T8FR/tCjVyOMyuNfQJ2RQ/sPcVVUys4/CCTg4UROJygpP4fz46mHysL9mREA9rFK
QWprKAZEBYi+Rv0Q9hJNRMaxDd8CgYEAzn0bVVSQ6pmqk+s1GRG62UHlXyDRn7kH
0XvK/wQqO0A1QJzdKefXgZL6m+PI7wuYvrL9PzSYb8THwAnWWIKTqeK+T7Nb4Dzx
MSgj2DNLzGpbXdC8TlNJRytAzoVN7dhiXuyfWWZjQRe8l1NMD9h1wIqROWG152GC
xgA8MddAQZECgYBsPqIUtVbyF0IBGl4SZxPZt52fn2cTdSrfO0hmI2LdWl0NSXDO
6oPXCj/4XUiSy05vSXymSly4XNWCCzm8kWXp2geaT5pcoGXe1T34TercdOnzDqOY
RzEiI+HAxnw9gzYwGRIw0/qG9IHTQ/5tSlA3H/Ul+PUrdnHxF1SuVT8vXwKBgAQO
4WKj7tUtf/S4QqrjdlCewutDsdr5v/WWAT9RzaKseF90tcQFEm8xfEtkBqbsC2x0
CBYd6oEH1QUpLFVA+7XzBtp6I+wcRoE40LuHBo5V6MXHPGwtptsHNpbYd9ec0RIc
hGU1Ze35kXNH587H6kiGcKQ4D2Mkv3U0u/oeyNyBAoGAfUJI8H63XOar6TXs0Ug4
IW34WrdC8BM4cz342rXKusS6+o15wnI8kAyVkSEx54W/cK5QaIUIQNGia74UlGhq
wqGyBxn3ahZPZhu0eOE2PHIDcxS+09d87bNjpUjMcysORJV2u9klyVMc5ornV6aO
cpKHUgbAsaKX3NgPiLrgxFQ=
-----END PRIVATE KEY-----
49 changes: 49 additions & 0 deletions test/resources/acl-tls/config/templates/emails/delete-account.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
'use strict'

/**
* Returns a partial Email object (minus the `to` and `from` properties),
* suitable for sending with Nodemailer.
*
* Used to send a Delete Account email, upon user request
*
* @param data {Object}
*
* @param data.deleteUrl {string}
* @param data.webId {string}
*
* @return {Object}
*/
function render (data) {
return {
subject: 'Delete Solid-account request',

/**
* Text version
*/
text: `Hi,
We received a request to delete your Solid account, ${data.webId}
To delete your account, click on the following link:
${data.deleteUrl}
If you did not mean to delete your account, ignore this email.`,

/**
* HTML version
*/
html: `<p>Hi,</p>
<p>We received a request to delete your Solid account, ${data.webId}</p>
<p>To delete your account, click on the following link:</p>
<p><a href="${data.deleteUrl}">${data.deleteUrl}</a></p>
<p>If you did not mean to delete your account, ignore this email.</p>
`
}
}

module.exports.render = render
30 changes: 30 additions & 0 deletions test/resources/acl-tls/config/templates/emails/invalid-username.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
module.exports.render = render

function render (data) {
return {
subject: `Invalid username for account ${data.accountUri}`,

/**
* Text version
*/
text: `Hi,
We're sorry to inform you that the username for account ${data.accountUri} is not allowed after changes to username policy.
This account has been set to be deleted at ${data.dateOfRemoval}.
${data.supportEmail ? `Please contact ${data.supportEmail} if you want to move your account.` : ''}`,

/**
* HTML version
*/
html: `<p>Hi,</p>
<p>We're sorry to inform you that the username for account ${data.accountUri} is not allowed after changes to username policy.</p>
<p>This account has been set to be deleted at ${data.dateOfRemoval}.</p>
${data.supportEmail ? `<p>Please contact ${data.supportEmail} if you want to move your account.</p>` : ''}
`
}
}
49 changes: 49 additions & 0 deletions test/resources/acl-tls/config/templates/emails/reset-password.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
'use strict'

/**
* Returns a partial Email object (minus the `to` and `from` properties),
* suitable for sending with Nodemailer.
*
* Used to send a Reset Password email, upon user request
*
* @param data {Object}
*
* @param data.resetUrl {string}
* @param data.webId {string}
*
* @return {Object}
*/
function render (data) {
return {
subject: 'Account password reset',

/**
* Text version
*/
text: `Hi,
We received a request to reset your password for your Solid account, ${data.webId}
To reset your password, click on the following link:
${data.resetUrl}
If you did not mean to reset your password, ignore this email, your password will not change.`,

/**
* HTML version
*/
html: `<p>Hi,</p>
<p>We received a request to reset your password for your Solid account, ${data.webId}</p>
<p>To reset your password, click on the following link:</p>
<p><a href="${data.resetUrl}">${data.resetUrl}</a></p>
<p>If you did not mean to reset your password, ignore this email, your password will not change.</p>
`
}
}

module.exports.render = render
39 changes: 39 additions & 0 deletions test/resources/acl-tls/config/templates/emails/welcome.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
'use strict'

/**
* Returns a partial Email object (minus the `to` and `from` properties),
* suitable for sending with Nodemailer.
*
* Used to send a Welcome email after a new user account has been created.
*
* @param data {Object}
*
* @param data.webid {string}
*
* @return {Object}
*/
function render (data) {
return {
subject: 'Welcome to Solid',

/**
* Text version of the Welcome email
*/
text: `Welcome to Solid!
Your account has been created.
Your Web Id: ${data.webid}`,

/**
* HTML version of the Welcome email
*/
html: `<p>Welcome to Solid!</p>
<p>Your account has been created.</p>
<p>Your Web Id: ${data.webid}</p>`
}
}

module.exports.render = render
26 changes: 26 additions & 0 deletions test/resources/acl-tls/config/templates/new-account/.acl
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Root ACL resource for the user account
@prefix acl: <http:https://www.w3.org/ns/auth/acl#>.
@prefix foaf: <http:https://xmlns.com/foaf/0.1/>.

# The homepage is readable by the public
<#public>
a acl:Authorization;
acl:agentClass foaf:Agent;
acl:accessTo </>;
acl:mode acl:Read.

# The owner has full access to every resource in their pod.
# Other agents have no access rights,
# unless specifically authorized in other .acl resources.
<#owner>
a acl:Authorization;
acl:agent <{{webId}}>;
# Optional owner email, to be used for account recovery:
{{#if email}}acl:agent <mailto:{{{email}}}>;{{/if}}
# Set the access to the root storage folder itself
acl:accessTo </>;
# All resources will inherit this authorization, by default
acl:default </>;
# The owner has all of the access modes allowed
acl:mode
acl:Read, acl:Write, acl:Control.
5 changes: 5 additions & 0 deletions test/resources/acl-tls/config/templates/new-account/.meta
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Root Meta resource for the user account
# Used to discover the account's WebID URI, given the account URI
<{{webId}}>
<http:https://www.w3.org/ns/solid/terms#account>
</>.
Loading

0 comments on commit 97966cf

Please sign in to comment.