1
+ var xml2js = require ( 'xml2js' ) ,
2
+ http = require ( 'http' ) ,
3
+ Q = require ( 'q' ) ;
4
+
5
+ var builder = new xml2js . Builder ( ) ;
6
+ var parser = new xml2js . Parser ( ) ;
7
+
8
+
9
+ var Client = function ( ) {
10
+ this . loginResponse = Object ;
11
+
12
+ this . reqOptions = {
13
+ host : String ,
14
+ port : 80 ,
15
+ path : '/nuova' ,
16
+ method : 'POST' ,
17
+ headers : {
18
+ 'Content-Type' : 'application/x-www-form-urlencoded' ,
19
+ 'Content-Length' : Number
20
+ }
21
+ } ;
22
+ } ;
23
+
24
+
25
+ //send xml to UCS domain and parse results back into JSON
26
+ Client . prototype . _exec = function ( json ) {
27
+ var deferred = Q . defer ( ) ;
28
+ var xml = builder . buildObject ( json ) ;
29
+
30
+ this . reqOptions . headers [ 'Content-Length' ] = xml . length ;
31
+
32
+ http . request ( this . reqOptions , function ( res ) {
33
+ var responseXML = '' ;
34
+ res . setEncoding ( 'utf8' ) ;
35
+
36
+ res . on ( 'data' , function ( chunk ) {
37
+ responseXML += chunk ;
38
+ } ) ;
39
+
40
+ res . on ( 'end' , function ( ) {
41
+ parser . parseString ( responseXML , function ( err , output ) {
42
+ if ( err ) deferred . reject ( err ) ;
43
+ else {
44
+ if ( output . error ) deferred . reject ( output . error . $ ) ;
45
+ else {
46
+ var header = Object . keys ( output ) [ 0 ] ;
47
+ deferred . resolve ( output [ header ] ) ;
48
+ }
49
+ }
50
+ } ) ;
51
+ } ) ;
52
+ } )
53
+
54
+ . on ( 'error' , deferred . reject )
55
+ . write ( xml ) ;
56
+
57
+ // .end();
58
+
59
+ return deferred . promise ;
60
+ } ;
61
+
62
+
63
+ Client . prototype . resolveClass = function ( ucsClass ) {
64
+ var deferred = Q . defer ( ) ;
65
+
66
+ this . _exec ( {
67
+ 'configResolveClass' : {
68
+ '$' : {
69
+ 'cookie' : this . loginResponse . outCookie ,
70
+ 'inHierarchical' : 'false' ,
71
+ 'classId' : ucsClass
72
+ }
73
+ }
74
+ } )
75
+ . then ( function ( response ) {
76
+ var list = response . outConfigs [ 0 ] [ ucsClass ] ;
77
+ var output = [ ] ;
78
+ for ( var i = 0 ; i < list . length ; i ++ ) {
79
+ output . push ( list [ i ] . $ ) ;
80
+ }
81
+ deferred . resolve ( output ) ;
82
+ } )
83
+ . fail ( deferred . reject ) ;
84
+
85
+ return deferred . promise ;
86
+ } ;
87
+
88
+
89
+ Client . prototype . resolveDN = function ( dn ) {
90
+ var deferred = Q . defer ( ) ;
91
+
92
+ this . _exec ( {
93
+ 'configResolveDn' : {
94
+ '$' : {
95
+ 'cookie' : this . loginResponse . outCookie ,
96
+ 'inHierarchical' : 'false' ,
97
+ 'dn' : dn
98
+ }
99
+ }
100
+ } )
101
+
102
+ . then ( function ( response ) {
103
+ try {
104
+ if ( response . outConfig && response . outConfig [ 0 ] != ' ' ) {
105
+ var key = Object . keys ( response . outConfig [ 0 ] ) [ 0 ] ;
106
+ deferred . resolve ( response . outConfig [ 0 ] [ key ] [ 0 ] . $ ) ;
107
+ }
108
+ else deferred . reject ( new Error ( 'unable to resolve DN: ' + dn ) ) ;
109
+ }
110
+ catch ( e ) {
111
+ deferred . reject ( e ) ;
112
+ }
113
+ } )
114
+
115
+ . fail ( deferred . reject ) ;
116
+
117
+ return deferred . promise ;
118
+ } ;
119
+
120
+
121
+ Client . prototype . logout = function ( ) {
122
+ return this . _exec ( {
123
+ 'aaaLogout' : {
124
+ '$' : {
125
+ 'inCookie' : this . loginResponse . outCookie
126
+ }
127
+ }
128
+ } ) ;
129
+ } ;
130
+
131
+
132
+ //options should look as follows: {'domain': <UCS domain name>, 'user': <username>, 'password': <password>}
133
+ exports . login = function ( options ) {
134
+ var deferred = Q . defer ( ) ;
135
+
136
+ var client = new Client ;
137
+ client . reqOptions . host = options . domain ;
138
+
139
+ var login = {
140
+ 'aaaLogin' : {
141
+ '$' : {
142
+ 'inName' : options . user ,
143
+ 'inPassword' : options . password
144
+ }
145
+ }
146
+ } ;
147
+
148
+ client . _exec ( login )
149
+ . then ( function ( response ) {
150
+ client . loginResponse = response . $ ;
151
+ if ( client . loginResponse . outCookie ) deferred . resolve ( client ) ;
152
+ else deferred . reject ( client . loginResponse ) ;
153
+ } )
154
+ . fail ( deferred . reject ) ;
155
+
156
+ return deferred . promise ;
157
+ } ;
0 commit comments