1
+ import { AuthError , getBaseUrl , getConfigUrl , wrapError } from './utils' ;
2
+
3
+ import ajaxCore from 'pouchdb-ajax' ;
4
+ import { assign , toPromise } from 'pouchdb-utils' ;
5
+
6
+ var getMembership = toPromise ( function ( opts , callback ) {
7
+ var db = this ;
8
+ if ( typeof callback === 'undefined' ) {
9
+ callback = opts ;
10
+ opts = { } ;
11
+ }
12
+
13
+ var url = getBaseUrl ( db ) + '/_membership' ;
14
+ var ajaxOpts = assign ( {
15
+ method : 'GET' ,
16
+ url : url ,
17
+ } , opts . ajax || { } ) ;
18
+ ajaxCore ( ajaxOpts , wrapError ( callback ) ) ;
19
+ } ) ;
20
+
21
+ var signUpAdmin = toPromise ( function ( username , password , opts , callback ) {
22
+ var db = this ;
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
+ 'So you should use new PouchDB("http://mysite.com:5984/mydb") instead.' ) ) ;
31
+ } else if ( ! username ) {
32
+ return callback ( new AuthError ( 'You must provide a username' ) ) ;
33
+ } else if ( ! password ) {
34
+ return callback ( new AuthError ( 'You must provide a password' ) ) ;
35
+ }
36
+
37
+ db . getMembership ( opts , function ( error , membership ) {
38
+ var nodeName ;
39
+ if ( error ) {
40
+ if ( error . error !== 'illegal_database_name' ) {
41
+ return callback ( error ) ;
42
+ } else {
43
+ // Some couchdb-1.x-like server
44
+ nodeName = undefined ;
45
+ }
46
+ } else {
47
+ // Some couchdb-2.x-like server
48
+ nodeName = membership . all_nodes [ 0 ] ;
49
+ }
50
+
51
+ var configUrl = getConfigUrl ( db , nodeName ) ;
52
+ var url = ( opts . configUrl || configUrl ) + '/admins/' + encodeURIComponent ( username ) ;
53
+ var ajaxOpts = assign ( {
54
+ method : 'PUT' ,
55
+ url : url ,
56
+ processData : false ,
57
+ body : '"' + password + '"' ,
58
+ } , opts . ajax || { } ) ;
59
+ ajaxCore ( ajaxOpts , wrapError ( callback ) ) ;
60
+ } ) ;
61
+ } ) ;
62
+
63
+ var deleteAdmin = toPromise ( function ( username , opts , callback ) {
64
+ var db = this ;
65
+ if ( typeof callback === 'undefined' ) {
66
+ callback = typeof opts === 'undefined' ? username : opts ;
67
+ opts = { } ;
68
+ }
69
+ if ( [ 'http' , 'https' ] . indexOf ( db . type ( ) ) === - 1 ) {
70
+ return callback ( new AuthError ( 'This plugin only works for the http/https adapter. ' +
71
+ 'So you should use new PouchDB("http://mysite.com:5984/mydb") instead.' ) ) ;
72
+ } else if ( ! username ) {
73
+ return callback ( new AuthError ( 'You must provide a username' ) ) ;
74
+ }
75
+
76
+ db . getMembership ( opts , function ( error , membership ) {
77
+ var nodeName ;
78
+ if ( error ) {
79
+ if ( error . error !== 'illegal_database_name' ) {
80
+ return callback ( error ) ;
81
+ } else {
82
+ // Some couchdb-1.x-like server
83
+ nodeName = undefined ;
84
+ }
85
+ } else {
86
+ // Some couchdb-2.x-like server
87
+ nodeName = membership . all_nodes [ 0 ] ;
88
+ }
89
+
90
+ var configUrl = getConfigUrl ( db , nodeName ) ;
91
+ var url = ( opts . configUrl || configUrl ) + '/admins/' + encodeURIComponent ( username ) ;
92
+ var ajaxOpts = assign ( {
93
+ method : 'DELETE' ,
94
+ url : url ,
95
+ processData : false ,
96
+ } , opts . ajax || { } ) ;
97
+ ajaxCore ( ajaxOpts , wrapError ( callback ) ) ;
98
+ } ) ;
99
+ } ) ;
100
+
101
+ export { getMembership , deleteAdmin , signUpAdmin } ;
0 commit comments