Skip to content

Commit 76f9bab

Browse files
committed
first commit
0 parents  commit 76f9bab

File tree

2 files changed

+177
-0
lines changed

2 files changed

+177
-0
lines changed

client.js

+157
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
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+
};

package.json

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"author": {
3+
"name": "Michael Cadelago",
4+
"email": "[email protected]"
5+
},
6+
"name": "ucsjs",
7+
"description": "UCS Manager Client for Node",
8+
"version": "0.0.1",
9+
"main": "./client.js",
10+
"dependencies": {
11+
"xml2js": "~0.4.1",
12+
"q": "~1.0.0"
13+
14+
},
15+
"devDependencies": {
16+
"mocha": "~1.17.1",
17+
"mocha-as-promised": "~2.0.0",
18+
"should": "~3.1.3"
19+
}
20+
}

0 commit comments

Comments
 (0)