can share a site with others

This commit is contained in:
aj 2017-09-01 20:50:33 +00:00
parent f33ea552b4
commit 3a36bd1f61
8 changed files with 123 additions and 9 deletions

@ -1 +1 @@
Subproject commit 1fe8733a064c55024bc384691813772d4c94665d
Subproject commit db284fbf911dc4f9d0cb99bb512d9663dcfd0ece

View File

@ -27,6 +27,7 @@
<script src="/assets/oauth3.org/oauth3.dns.js" charset="utf-8"></script>
<script src="/assets/oauth3.org/oauth3.domains.js" charset="utf-8"></script>
<script src="/js/www@daplie.com.js" charset="utf-8"></script>
<script src="/js/email@daplie.com.js" charset="utf-8"></script>
<!-- Angular Modules -->
<script src="/js/lib/angular/angular.min.js" charset="utf-8"></script>
<script src="/js/lib/angular/angular-local-storage.js" charset="utf-8"></script>

View File

@ -1,5 +1,16 @@
app.controller('emailCtrl', [
'$scope',
function($scope) {
'$scope', '$q', 'Auth', 'azp@oauth3.org', '$timeout'
, function ($scope, $q, Auth, Oauth3, $timeout) {
var vm = this;
}]);
vm.getSettings = function () {
var pkg = Auth.oauth3.pkg('email@daplie.com');
return pkg.settings().then(function (resp) {
vm.settings.service = 'mailgun.org';
vm.settings = resp.data;
});
};
vm.getSettings();
}
]);

View File

@ -303,13 +303,38 @@ app.controller('websiteCtrl', [
, domain: r.domain
, tld: r.tld
, sld: r.sld
//, sub: vm.record.sub
//, sub: r.sub
, path: r.newPath
}).then(function (result) {
window.alert(JSON.stringify(result));
});
};
vm.Shares = {};
vm.Shares.invite = function (r) {
var pkg = Auth.oauth3.pkg('www@daplie.com');
return pkg.invite({
email: r.shareEmail
, domain: r.domain
, tld: r.tld
, sld: r.sld
//, sub: r.sub
, path: r.sharePath
, mode: r.shareMode
}).then(function (result) {
window.alert(JSON.stringify(result));
});
};
vm.Shares.accept = function () {
var pkg = Auth.oauth3.pkg('www@daplie.com');
return pkg.acceptInvite({
token: vm.Shares.inviteToken
}).then(function (result) {
window.alert(JSON.stringify(result));
vm.listSites();
});
};
vm.listSites = function () {
var sites = [];

22
js/email@daplie.com.js Normal file
View File

@ -0,0 +1,22 @@
;(function (exports) {
'use strict';
var OAUTH3 = exports.OAUTH3 = exports.OAUTH3 || require('./oauth3.core.js').OAUTH3;
OAUTH3._pkgs['email@daplie.com'] = {
settings: function (opts) {
var providerUri = opts.audience;
var session = opts.session;
return OAUTH3.request({
method: 'GET'
, url: OAUTH3.url.normalize(providerUri)
+ '/api/email@daplie.com/acl/settings/'
, session: session
}).then(function (result) {
return result;
});
}
};
}('undefined' !== typeof exports ? exports : window));

View File

@ -28,6 +28,36 @@ OAUTH3._pkgs['www@daplie.com'] = {
+ '?' + OAUTH3.utils.query.stringify({ tld: opts.tld, sld: opts.sld/*, sub: opts.sub*/, strip: opts.strip, path: opts.path })
;
}
, invite: function (opts) {
var providerUri = opts.audience;
var session = opts.session;
// TODO needs a way to have api and assets for audience
return OAUTH3.request({
method: 'POST'
, url: OAUTH3.url.normalize(providerUri)
+ '/api/www@daplie.com/acl/shares/' + (opts.domain || opts.hostname)
+ '?' + OAUTH3.utils.query.stringify({ tld: opts.tld, sld: opts.sld/*, sub: opts.sub*/, mode: opts.mode, path: opts.path })
, session: session
}).then(function (result) {
return result;
});
}
, acceptInvite: function (opts) {
var providerUri = opts.audience;
var session = opts.session;
// TODO needs a way to have api and assets for audience
return OAUTH3.request({
method: 'POST'
, url: OAUTH3.url.normalize(providerUri)
+ '/api/www@daplie.com/acl/shares/accept/' + opts.token
+ '?' + OAUTH3.utils.query.stringify({ tld: opts.tld, sld: opts.sld/*, sub: opts.sub*/ })
, session: session
}).then(function (result) {
return result;
});
}
, download: function (opts) {
var session = opts.session;
var me = this;

View File

@ -66,6 +66,19 @@
</tr>
</tbody>
</table>
<button ng-click="vm.showSettings = !vm.showSettings">Settings</button>
<div ng-if="vm.showSettings">
<label>Service:</label> <input type="text" ng-model="vm.settings.service" placeholder="ex: mailgun.org">
<br>
<label>API Key:</label> <input type="text" ng-model="vm.settings.apiKey" placeholder="ex: key-xxxxxxxxxxxx">
<br>
<label>SMTP Username:</label> <input type="text" ng-model="vm.settings.auth.user" placeholder="ex: johndoe">
<br>
<label>SMTP Password:</label> <input type="text" ng-model="vm.settings.auth.pass" placeholder="ex: ************">
<br>
<label>SMTP Domain:</label> <input type="text" ng-model="vm.settings.auth.domain" placeholder="ex: example.com">
</div>
</div>
<!-- <div class="white-well">

View File

@ -78,6 +78,10 @@
<button ng-click="vm.createWebsite()" type="button" name="button" class="btn btn-default">Create Website</button>
<!-- </div>
</div> -->
<div class="input-group">
<div><label>Invite Code</label> <input type="text" ng-model="vm.Shares.inviteToken" /></div>
<button ng-click="vm.Shares.accept()" type="button" name="button" class="btn btn-default">Accept Invite</button>
</div>
</div>
<div class="white-well">
<h1>Your Websites</h1>
@ -85,13 +89,21 @@
<tbody>
<tr ng-repeat="r in vm.sites">
<td><a ng-href="https://{{r.domain}}" target="_blank" ng-bind="r.domain">example.com</a>
<a ng-href="{{r.download}}" target="_blank">download</a>
<a ng-href="{{r.download}}" target="_blank">Download</a>
<!-- button class="btn btn-link" ng-click="vm.Sites.archive(r)">download</button -->
<button class="btn btn-link" ng-click="vm.Sites.remove(r)">clear</button></td>
<button class="btn btn-link" ng-click="vm.Sites.remove(r)">Clear</button></td>
<td>
<input type="text" ng-model="r.newPath" /> <button class="btn btn-link" ng-click="vm.Sites.contents(r)">show</button></td>
<input type="text" ng-model="r.newPath" placeholder="/" />
<button class="btn btn-default" ng-click="vm.Sites.contents(r)">List Files</button>
</td>
<td ng-bind="r.path">Sites > blogs > blog.jane.smith.net</td>
<td ng-bind="r.users">jane@smith.net, jack@smith.net, friend@gmail.com</td>
<td>
<input type="text" ng-model="r.shareEmail" placeholder="ex: john@example.com" />
<input type="text" ng-model="r.sharePath" placeholder="/" />
<input type="text" ng-model="r.shareMode" placeholder="rwx (read, write, invite)" />
<button class="btn btn-default" ng-click="vm.Shares.invite(r)">Invite</button>
</td>
</tr>
</tbody>
</table>