Last active
December 13, 2022 08:28
-
-
Save jishanshaikh4/04a0b8d00766ee9c852d4040efe6befc to your computer and use it in GitHub Desktop.
Sample SOAP server + client (for mentee's poc and assignments) -- Implemented clientIP usage/track
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"use strict"; | |
var soap = require('strong-soap').soap; | |
var fetch = require('node-fetch'); | |
var url = 'http://localhost:8000/test?wsdl'; | |
var options = { | |
endpoint: 'http://localhost:8000/test' | |
}; | |
var requestArgs = { | |
userName: "TEST_USER" | |
}; | |
// If you comment out this request, server will log server's IP (first fetch) | |
fetch('http://localhost:8000/', { | |
method: 'GET' | |
}) | |
.then((response) => { | |
console.log("fetch then from client"); | |
}) | |
.catch((error) => { | |
console.log("fetch error from client: " + error); | |
}) | |
soap.createClient(url, options, function (err, client) { | |
if (err) { | |
console.error("An error has occurred creating SOAP client: ", err); | |
} else { | |
var description = client.describe(); | |
console.log("Client description:", description); | |
var method = client.checkUserName; | |
method(requestArgs, function (err, result, envelope, soapHeader) { | |
console.log('Result: \n' + JSON.stringify(result)); | |
}); | |
} | |
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"use strict"; | |
var soap = require('strong-soap').soap; | |
var url = 'http://localhost:8001/test?wsdl'; | |
var options = { endpoint: 'http://localhost:8001/test'}; | |
var requestArgs = { userName: "TEST_USER" }; | |
soap.createClient(url, options, function(err, client) { | |
if (err) { | |
console.error("An error has occurred creating SOAP client: " , err); | |
} else { | |
var description = client.describe(); | |
//console.log("Client description:" , description); | |
//console.log(description.CheckUserName_Service.CheckUserName_Port.checkUserName.output.body.elements) | |
var method = client.checkUserName; | |
method(requestArgs, function(err, result, envelope, soapHeader) { | |
//response envelope | |
//console.log("error "+ err) // null | |
//console.log(soapHeader); // undefined | |
//console.log('Response Envelope: \n' + envelope); | |
//'result' is the response body | |
//console.log('Result' + result); | |
console.log('Result: \n' + JSON.stringify(result)); | |
}); | |
} | |
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<definitions name = "CheckUserNameService" | |
targetNamespace = "http://www.examples.com/wsdl/CheckUserNameService.wsdl" | |
xmlns = "http://schemas.xmlsoap.org/wsdl/" | |
xmlns:soap = "http://schemas.xmlsoap.org/wsdl/soap/" | |
xmlns:tns = "http://www.examples.com/wsdl/CheckUserNameService.wsdl" | |
xmlns:xsd = "http://www.w3.org/2001/XMLSchema"> | |
<message name = "CheckUserNameRequest"> | |
<part name = "userName" type = "xsd:string"/> | |
</message> | |
<message name = "CheckUserNameResponse"> | |
<part name = "status" type = "xsd:string"/> | |
</message> | |
<portType name = "CheckUserName_PortType"> | |
<operation name = "checkUserName"> | |
<input message = "tns:CheckUserNameRequest"/> | |
<output message = "tns:CheckUserNameResponse"/> | |
</operation> | |
</portType> | |
<binding name = "CheckUserName_Binding" type = "tns:CheckUserName_PortType"> | |
<soap:binding style = "rpc" | |
transport = "http://schemas.xmlsoap.org/soap/http"/> | |
<operation name = "checkUserName"> | |
<soap:operation soapAction = "checkUserName"/> | |
<input> | |
<soap:body encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/" namespace = "urn:examples:CheckUserNameService" use = "encoded"/> | |
</input> | |
<output> | |
<soap:body encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/" namespace = "urn:examples:CheckUserNameService" use = "encoded"/> | |
</output> | |
</operation> | |
</binding> | |
<service name = "CheckUserName_Service"> | |
<documentation>WSDL File for CheckUserNameService</documentation> | |
<port binding = "tns:CheckUserName_Binding" name = "CheckUserName_Port"> | |
<soap:address | |
location = "http://www.examples.com/CheckUserName/" /> | |
</port> | |
</service> | |
</definitions> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var soap = require('soap'); | |
var http = require('http'); | |
const util = require('util'); | |
const fetch = require('node-fetch'); | |
const app = require("express")() | |
var myService; | |
newApp = app; | |
var server = http.Server(app); | |
var port = 8000; | |
server.listen(port); | |
console.log("http server started listtening on " + port); | |
newApp.get('/', (req, res) => { | |
res.send("Hello World!"); | |
var clientIP = req.headers['x-forwarded-for'] || req.connection.remoteAddress; | |
//console.log(req.connection.remoteAddress); // will always give server ip on remote connections | |
myService = { | |
CheckUserName_Service: { | |
CheckUserName_Port: { | |
checkUserName: function (args, soapCallback) { | |
console.log('checkUserName: Entering function..'); | |
console.log(args); | |
//console.log(this.request.connection.remoteAddress) | |
/* | |
* Where I'm trying to get clietn's IP address | |
*/ | |
console.log("***") | |
console.log("IP of client: " + clientIP); | |
console.log("***") | |
//console.log(request.connection.remoteAddress); | |
// res = this.request.connection.remoteAddress; | |
//console.log(args) | |
soapCallback("{'username found'}"); | |
} | |
} | |
} | |
}; | |
var xml = require('fs').readFileSync('myservice.wsdl', 'utf8'); | |
var soapServer = soap.listen(server, '/test', myService, xml); | |
soapServer.log = function (type, data) { | |
console.log('Type: ' + type + ' data: ' + data); | |
}; | |
console.log('SOAP service listening on port ' + port); | |
}); | |
// Need first request to boot up soapservice | |
fetch('http://localhost:8000/', { | |
method: 'GET' | |
}) | |
.then((response) => { | |
console.log("fetch then + first from server"); | |
}) | |
.catch((error) => { | |
console.log("fetch error + first from server: " + error); | |
}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var soap = require('soap'); | |
var http = require('http'); | |
const util = require('util'); | |
const fetch = require('node-fetch'); // npm i node-fetch@2.6.7 | |
const app = require("express")() | |
newApp = app; | |
var server = http.Server(app); | |
var port = 8001; | |
server.listen(port); | |
console.log("http server started listening on " + port) | |
newApp.get('/', (req, res) => { | |
clientIP = req.ip; // works | |
// clientIP = req.connection.remoteAddress; // also works | |
res.send("Hello World!"); | |
var myService = { | |
CheckUserName_Service: { | |
CheckUserName_Port: { | |
checkUserName: function(args, soapCallback) { | |
console.log('checkUserName: Entering function..'); | |
/* | |
* Where I'm trying to get clietn's IP address | |
*/ | |
console.log(clientIP); | |
soapCallback("Client IP: " + clientIP); | |
} | |
} | |
} | |
}; | |
var xml = require('fs').readFileSync('myservice.wsdl', 'utf8'); | |
var soapServer = soap.listen(server, '/test', myService, xml); | |
soapServer.log = function(type, data) { | |
//console.log('Type: ' + type + ' data: ' + data); | |
}; | |
console.log('SOAP service attached on port ' + port); | |
console.log('Waiting for client...'); | |
}); | |
// To execute / in order to start attachment of SOAP server to http server | |
fetch('http://localhost:8001', { method: 'GET' }) | |
.then((response) => { | |
// do something with the response | |
// console.log("fetch then"); | |
}) | |
.catch((error) => { | |
// handle any errors | |
console.log("fetch error" + error); | |
}) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment