Advertisement
Guest User

Untitled

a guest
Nov 16th, 2016
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const Client = require('ftp');
  2. const fs = require('fs');
  3. const readline = require('readline');
  4.  
  5. import { NextObserver } from 'rxjs/Observer';
  6. import { Observable } from 'rxjs/Rx';
  7.  
  8. interface server {
  9.     name: string;
  10.     path: string;
  11.     version: string;
  12.     java_version: string;
  13. }
  14.  
  15. export class FTPClient {
  16.     username: string;
  17.     password: string;
  18.     host: string;
  19.     port: number;
  20.     c: any;
  21.  
  22.     constructor() {
  23.     }
  24.  
  25.     init(username, password, host, port) {
  26.         console.log("initiating FTP connection to:" + host + "on port:" + port);
  27.  
  28.         this.username = username;
  29.         this.password = password;
  30.         this.host = host;
  31.         this.port = port;
  32.         this.c = new Client();
  33.  
  34.         console.log("Client created");
  35.     }
  36.  
  37.     connect() {
  38.         console.log("About to start connection");
  39.  
  40.         this.c.on('ready', () => {
  41.             this.c.list((err: any, list: any) => {
  42.                 if (err) throw err;
  43.  
  44.                 console.dir(list);
  45.                 this.c.end();
  46.             });
  47.         });
  48.  
  49.         // connect to localhost:21 as anonymous
  50.         var connectProps = {
  51.             host : this.host,
  52.             port : this.port,
  53.             user : this.username,
  54.             password : this.password
  55.         };
  56.  
  57.         console.log("Connecting now...");
  58.         this.c.connect(connectProps);
  59.     }
  60.  
  61.     public lookForServers(name: string): Observable<any[]> {
  62.         return Observable.create((observer: NextObserver <any[]>) => {
  63.             let servers = [];
  64.             let whereAreWe = 0;
  65.             let possibles = [ "/path/to/servers/" ];
  66.  
  67.             for (var i = 0; i < possibles.length; i++) {
  68.                 whereAreWe = i;
  69.  
  70.                 this.c.list(possibles[ i ], false, (err: any, list: any) => {
  71.                     for (var p = 0; p < list.length; p++) {
  72.                         this.grabMessagesLog(possibles[ whereAreWe ] + list[ p ].name)
  73.                         .subscribe((data: any) => {
  74.                                 let server_version = data;
  75.  
  76.                                 servers.push({
  77.                                     name : list[ p ].name,
  78.                                     path : possibles[ whereAreWe ] + list[ p ].name,
  79.                                     version : server_version
  80.                                 });
  81.  
  82.                                 observer.next(servers);
  83.                                 observer.complete();
  84.                             }
  85.                         );
  86.                     }
  87.                 });
  88.             }
  89.         });
  90.     }
  91.  
  92.     grabMessagesLog(path): Observable<any> {
  93.         return Observable.create((observer: NextObserver <any>) => {
  94.             let result = '';
  95.             let unix = Math.round(+new Date() / 1000);
  96.             this.c.binary(function(err) {
  97.                 console.log(err);
  98.             });
  99.  
  100.             this.c.get(path + "/logs/messages.log", (err, stream) => {
  101.                 if (err) throw err;
  102.  
  103.                 stream.once('close', () => {
  104.                     this.c.end();
  105.                     this.getServerMetadataFromMessagesLog(unix + "_messages.log")
  106.                     .subscribe((data) => {
  107.                         stream.pipe(fs.createWriteStream(unix + "_messages.log"));
  108.  
  109.                         observer.next(data);
  110.                         observer.complete();
  111.                     });
  112.                 });
  113.             });
  114.         });
  115.     }
  116.  
  117.     getServerMetadataFromMessagesLog(path): Observable<any> {
  118.         return Observable.create((observer: NextObserver <any>) => {
  119.             let lineReader = readline.createInterface({
  120.                 input : fs.createReadStream(path)
  121.             });
  122.  
  123.             let server_version = "";
  124.             let java_version = "";
  125.             let line_no = 0;
  126.  
  127.             lineReader.on('line', function(line) {
  128.                 line_no++;
  129.                 console.log("line number is:" + line_no);
  130.  
  131.                 if (line.includes("STUFF") && line.includes("FLAG2") && line_no == 2) {
  132.                     var first = line.split("FLAG2")[ 1 ];
  133.                     var last = first.split(" (")[ 0 ];
  134.                     var version = "FLAG2" + last;
  135.                     this.server_version = version;
  136.                     console.log("version is:" + version);
  137.                 }
  138.  
  139.                 if (line.includes("java.version =")) {
  140.                     var javav = line.split("java.version =")[ 1 ];
  141.                     this.java_version = javav;
  142.                     lineReader.close();
  143.                 }
  144.  
  145.                 console.log('Line from file:', line);
  146.             });
  147.  
  148.             lineReader.on('close', () => {
  149.                 var res = {
  150.                     version : server_version,
  151.                     java_version : java_version
  152.                 };
  153.  
  154.                 alert("RES IS:" + JSON.stringify(res));
  155.  
  156.                 observer.next(res);
  157.                 observer.complete();
  158.             });
  159.         });
  160.     }
  161. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement