Skip to content

Commit 467f946

Browse files
committed
Build 0.1.0
1 parent d4f98d3 commit 467f946

File tree

2 files changed

+349
-0
lines changed

2 files changed

+349
-0
lines changed

dist/pouchdb.authentication.js

Lines changed: 348 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,348 @@
1+
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
2+
'use strict';
3+
4+
var utils = require('./utils');
5+
6+
function wrapError(callback) {
7+
// provide more helpful error message
8+
return function (err, res) {
9+
if (err) {
10+
if (err.name === 'unknown_error') {
11+
err.message = (err.message || '') +
12+
' Unknown error! Did you remember to enable CORS?';
13+
}
14+
}
15+
return callback(err, res);
16+
};
17+
}
18+
19+
exports.signup = utils.toPromise(function (username, password, opts, callback) {
20+
var db = this;
21+
var PouchDB = db.constructor;
22+
var pouchUtils = PouchDB.utils;
23+
if (typeof callback === 'undefined') {
24+
callback = typeof opts === 'undefined' ? (typeof password === 'undefined' ?
25+
username : password) : opts;
26+
opts = {};
27+
}
28+
if (['http', 'https'].indexOf(db.type()) === -1) {
29+
return callback(new AuthError('this plugin only works for the http/https adapter'));
30+
} else if (!username) {
31+
return callback(new AuthError('you must provide a username'));
32+
} else if (!password) {
33+
return callback(new AuthError('you must provide a password'));
34+
}
35+
36+
var userId = 'org.couchdb.user:' + username;
37+
var user = {
38+
name : username,
39+
password : password,
40+
roles : opts.roles || [],
41+
type : 'user',
42+
_id : userId
43+
};
44+
45+
var reservedWords = ['name', 'password', 'roles', 'type'];
46+
if (opts.metadata) {
47+
for (var key in opts.metadata) {
48+
if (opts.hasOwnProperty(key)) {
49+
if (reservedWords.indexOf(key) !== -1 || key.startsWith('_')) {
50+
return callback(new AuthError('cannot use reserved word in metadata: "' + key + '"'));
51+
}
52+
}
53+
}
54+
user = pouchUtils.extend(true, user, opts.metadata);
55+
}
56+
57+
var url = utils.getUsersUrl(db) + '/' + encodeURIComponent(userId);
58+
var ajaxOpts = pouchUtils.extend(true, {
59+
method : 'PUT',
60+
url : url,
61+
body : user
62+
}, opts.ajax || {});
63+
pouchUtils.ajax(ajaxOpts, wrapError(callback));
64+
});
65+
66+
exports.signUp = exports.signup;
67+
68+
exports.login = utils.toPromise(function (username, password, opts, callback) {
69+
var db = this;
70+
var PouchDB = db.constructor;
71+
var pouchUtils = PouchDB.utils;
72+
if (typeof callback === 'undefined') {
73+
callback = opts;
74+
opts = {};
75+
}
76+
if (['http', 'https'].indexOf(db.type()) === -1) {
77+
return callback(new AuthError('this plugin only works for the http/https adapter'));
78+
}
79+
80+
if (!username) {
81+
return callback(new AuthError('you must provide a username'));
82+
} else if (!password) {
83+
return callback(new AuthError('you must provide a password'));
84+
}
85+
86+
var ajaxOpts = pouchUtils.extend(true, {
87+
method : 'POST',
88+
url : utils.getSessionUrl(db),
89+
body : {name : username, password : password}
90+
}, opts.ajax || {});
91+
pouchUtils.ajax(ajaxOpts, wrapError(callback));
92+
});
93+
94+
exports.logIn = exports.login;
95+
96+
exports.logout = utils.toPromise(function (opts, callback) {
97+
var db = this;
98+
var PouchDB = db.constructor;
99+
var pouchUtils = PouchDB.utils;
100+
if (typeof callback === 'undefined') {
101+
callback = opts;
102+
opts = {};
103+
}
104+
var ajaxOpts = pouchUtils.extend(true, {
105+
method : 'DELETE',
106+
url : utils.getSessionUrl(db)
107+
}, opts.ajax || {});
108+
pouchUtils.ajax(ajaxOpts, wrapError(callback));
109+
});
110+
111+
exports.logOut = exports.logout;
112+
113+
exports.getSession = utils.toPromise(function (opts, callback) {
114+
var db = this;
115+
var PouchDB = db.constructor;
116+
var pouchUtils = PouchDB.utils;
117+
if (typeof callback === 'undefined') {
118+
callback = opts;
119+
opts = {};
120+
}
121+
var url = utils.getSessionUrl(db);
122+
123+
var ajaxOpts = pouchUtils.extend(true, {
124+
method : 'GET',
125+
url : url
126+
}, opts.ajax || {});
127+
pouchUtils.ajax(ajaxOpts, wrapError(callback));
128+
});
129+
130+
exports.getUser = utils.toPromise(function (username, opts, callback) {
131+
var db = this;
132+
var PouchDB = db.constructor;
133+
var pouchUtils = PouchDB.utils;
134+
if (typeof callback === 'undefined') {
135+
callback = typeof opts === 'undefined' ? username : opts;
136+
opts = {};
137+
}
138+
if (!username) {
139+
return callback(new AuthError('you must provide a username'));
140+
}
141+
142+
var url = utils.getUsersUrl(db);
143+
var ajaxOpts = pouchUtils.extend(true, {
144+
method : 'GET',
145+
url : url + '/' + encodeURIComponent('org.couchdb.user:' + username)
146+
}, opts.ajax || {});
147+
pouchUtils.ajax(ajaxOpts, wrapError(callback));
148+
});
149+
150+
151+
function AuthError(message) {
152+
this.status = 400;
153+
this.name = 'authentication_error';
154+
this.message = message;
155+
this.error = true;
156+
try {
157+
Error.captureStackTrace(this, AuthError);
158+
} catch (e) {}
159+
}
160+
161+
utils.inherits(AuthError, Error);
162+
163+
if (typeof window !== 'undefined' && window.PouchDB) {
164+
Object.keys(exports).forEach(function (key) {
165+
window.PouchDB.plugin(exports);
166+
});
167+
}
168+
},{"./utils":5}],2:[function(require,module,exports){
169+
170+
},{}],3:[function(require,module,exports){
171+
// shim for using process in browser
172+
173+
var process = module.exports = {};
174+
175+
process.nextTick = (function () {
176+
var canSetImmediate = typeof window !== 'undefined'
177+
&& window.setImmediate;
178+
var canPost = typeof window !== 'undefined'
179+
&& window.postMessage && window.addEventListener
180+
;
181+
182+
if (canSetImmediate) {
183+
return function (f) { return window.setImmediate(f) };
184+
}
185+
186+
if (canPost) {
187+
var queue = [];
188+
window.addEventListener('message', function (ev) {
189+
var source = ev.source;
190+
if ((source === window || source === null) && ev.data === 'process-tick') {
191+
ev.stopPropagation();
192+
if (queue.length > 0) {
193+
var fn = queue.shift();
194+
fn();
195+
}
196+
}
197+
}, true);
198+
199+
return function nextTick(fn) {
200+
queue.push(fn);
201+
window.postMessage('process-tick', '*');
202+
};
203+
}
204+
205+
return function nextTick(fn) {
206+
setTimeout(fn, 0);
207+
};
208+
})();
209+
210+
process.title = 'browser';
211+
process.browser = true;
212+
process.env = {};
213+
process.argv = [];
214+
215+
function noop() {}
216+
217+
process.on = noop;
218+
process.once = noop;
219+
process.off = noop;
220+
process.emit = noop;
221+
222+
process.binding = function (name) {
223+
throw new Error('process.binding is not supported');
224+
}
225+
226+
// TODO(shtylman)
227+
process.cwd = function () { return '/' };
228+
process.chdir = function (dir) {
229+
throw new Error('process.chdir is not supported');
230+
};
231+
232+
},{}],4:[function(require,module,exports){
233+
if (typeof Object.create === 'function') {
234+
// implementation from standard node.js 'util' module
235+
module.exports = function inherits(ctor, superCtor) {
236+
ctor.super_ = superCtor
237+
ctor.prototype = Object.create(superCtor.prototype, {
238+
constructor: {
239+
value: ctor,
240+
enumerable: false,
241+
writable: true,
242+
configurable: true
243+
}
244+
});
245+
};
246+
} else {
247+
// old school shim for old browsers
248+
module.exports = function inherits(ctor, superCtor) {
249+
ctor.super_ = superCtor
250+
var TempCtor = function () {}
251+
TempCtor.prototype = superCtor.prototype
252+
ctor.prototype = new TempCtor()
253+
ctor.prototype.constructor = ctor
254+
}
255+
}
256+
257+
},{}],5:[function(require,module,exports){
258+
(function (process,global){
259+
'use strict';
260+
261+
var Promise;
262+
if (typeof window !== 'undefined' && window.PouchDB) {
263+
Promise = window.PouchDB.utils.Promise;
264+
} else {
265+
Promise = typeof global.Promise === 'function' ? global.Promise : require('lie');
266+
}
267+
268+
function getBaseUrl(db) {
269+
return db.getUrl().replace(/\/[^\/]+\/?$/, '');
270+
}
271+
exports.getUsersUrl = function (db) {
272+
return getBaseUrl(db) + '/_users';
273+
};
274+
exports.getSessionUrl = function (db) {
275+
return getBaseUrl(db) + '/_session';
276+
};
277+
exports.once = function (fun) {
278+
var called = false;
279+
return exports.getArguments(function (args) {
280+
if (called) {
281+
console.trace();
282+
throw new Error('once called more than once');
283+
} else {
284+
called = true;
285+
fun.apply(this, args);
286+
}
287+
});
288+
};
289+
exports.getArguments = function (fun) {
290+
return function () {
291+
var len = arguments.length;
292+
var args = new Array(len);
293+
var i = -1;
294+
while (++i < len) {
295+
args[i] = arguments[i];
296+
}
297+
return fun.call(this, args);
298+
};
299+
};
300+
exports.toPromise = function (func) {
301+
//create the function we will be returning
302+
return exports.getArguments(function (args) {
303+
var self = this;
304+
var tempCB = (typeof args[args.length - 1] === 'function') ? args.pop() : false;
305+
// if the last argument is a function, assume its a callback
306+
var usedCB;
307+
if (tempCB) {
308+
// if it was a callback, create a new callback which calls it,
309+
// but do so async so we don't trap any errors
310+
usedCB = function (err, resp) {
311+
process.nextTick(function () {
312+
tempCB(err, resp);
313+
});
314+
};
315+
}
316+
var promise = new Promise(function (fulfill, reject) {
317+
try {
318+
var callback = exports.once(function (err, mesg) {
319+
if (err) {
320+
reject(err);
321+
} else {
322+
fulfill(mesg);
323+
}
324+
});
325+
// create a callback for this invocation
326+
// apply the function in the orig context
327+
args.push(callback);
328+
func.apply(self, args);
329+
} catch (e) {
330+
reject(e);
331+
}
332+
});
333+
// if there is a callback, call it back
334+
if (usedCB) {
335+
promise.then(function (result) {
336+
usedCB(null, result);
337+
}, usedCB);
338+
}
339+
promise.cancel = function () {
340+
return this;
341+
};
342+
return promise;
343+
});
344+
};
345+
346+
exports.inherits = require('inherits');
347+
}).call(this,require("/Users/nolan/workspace/pouchdb-authentication/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js"),typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
348+
},{"/Users/nolan/workspace/pouchdb-authentication/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js":3,"inherits":4,"lie":2}]},{},[1])

dist/pouchdb.authentication.min.js

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)