client-socket-nodejs

2.0.7 • Public • Published

1. Install

npm i client-socket-nodejs cng-node-js-utils

2. Create key pair for this client before do anything follow:

// import 
const { ClientDeviceInfo } = require("client-socket-nodejs").socket;

let appName = "TEST";

let deviceKey = {
    // copy in this area for keyPair will been created for save
}

/**
 * define app key by app_app name:
 */
let clientDeviceInfo = new ClientDeviceInfo(appName, deviceKey);
clientDeviceInfo.getClientInfo()
    .then(deviceInfo => {
        console.log('deviceInfo: ', deviceInfo);
        console.log('Key pair created:', clientDeviceInfo.getKeyPair())
    })
    .catch(err => {
        console.log('Error for create key: ', err);
    });

3. Register user in socket user follow:

const { ClientSocket, ClientDeviceInfo } = require("client-socket-nodejs").socket;

let appName = "TEST";   // appName for resource server

let deviceKey = {
    // copy key pair in step 2 in here
    id: 'public_key',
    key: 'private_key',
    created_time: 'create_time format ISO yyyy-mm-dd hh:mi:ss'
}
/**
 * define app key by app_app name:
 */
let clientDeviceInfo = new ClientDeviceInfo(appName, deviceKey);


// Pass for user
let pass = 'passForUser';
let expired = 365;
let isDebug = true;

// define link for connect
let socketLink = {
    url: "http://localhost:9225"
    , path: "/socket"
    , timeout: 10000
}

// define user for reqister
let loginUser = {
    username: 'phoneNumberOrEmail',  // 'phone or email
    user_type: 'emal', // 'phone' | 'email' | 'ldap'
}

// define user info for reqister
let userInfo = {
    nickname: "NickName Demo"
    , fullname: "The name of this app for description"
    , address: "Address for this server"
    , phone: "Phone number"
    , email: "Email of this user"
    , avatar: 'Link of avatar'
    , background: 'Link of background'
}

// define one socketClient follow:
let clientSocket = new ClientSocket(clientDeviceInfo, loginUser, userInfo, pass, expired, isDebug);
// init connection to server for register user
clientSocket.init(socketLink.url, socketLink.path, socketLink.timeout)

// Waiting for token response from server:
const { waiting } = require("cng-node-js-utils")
waiting(20000, { hasData: () => clientSocket.getToken() })
    .then(msg => {
        // View token valid and copy to token for save step 4:
        console.log("***>Current TOKEN connected: ", clientSocket.getToken());
    })

4. Login by user for token if token expire

const { ClientSocket, ClientDeviceInfo } = require("client-socket-nodejs").socket;

let appName = "TEST";   // appName for resource server

let deviceKey = {
    // copy key pair in step 2 in here
    id: 'public_key',
    key: 'private_key',
    created_time: 'create_time format ISO yyyy-mm-dd hh:mi:ss'
}
/**
 * define app key by app_app name:
 */
let clientDeviceInfo = new ClientDeviceInfo(appName, deviceKey);

// Pass for user
let pass = 'passForUser';
let expired = 365;
let isDebug = true;

// define link for connect
let socketLink = {
    url: "http://localhost:9225"
    , path: "/socket"
    , timeout: 10000
}

// define user for reqister
let loginUser = {
    username: 'phoneNumberOrEmail',  // 'phone or email
    user_type: 'emal', // 'phone' | 'email' | 'ldap'
}

// define user info for reqister
let userInfo; // no need to define;

// define one socketClient follow:
let clientSocket = new ClientSocket(clientDeviceInfo, loginUser, userInfo, pass, expired, isDebug);
// init connection to server for register user
clientSocket.init(socketLink.url, socketLink.path, socketLink.timeout)

// Waiting for token response from server:
const { waiting } = require("cng-node-js-utils")
waiting(20000, { hasData: () => clientSocket.getToken() })
    .then(msg => {
        // View token valid and copy to token for save step 4:
        console.log("***>Current TOKEN connected: ", clientSocket.getToken());
    })

5. Init socket connection with token

// define class for socket
const { ClientSocket, ClientDeviceInfo } = require("../socket");

let appName = "TEST";   // appName for token register in step 3:

let deviceKey = {
    // copy key pair in step 2 in here
    id: 'public_key',
    key: 'private_key',
    created_time: 'create_time format ISO yyyy-mm-dd hh:mi:ss'
}

let token = "copy Token in step 3 in here";

/**
 * define app key by app_app name:
 */
let clientDeviceInfo = new ClientDeviceInfo(appName, deviceKey, token);


// define one socketClient follow:
let clientSocket = new ClientSocket(clientDeviceInfo, loginUser, userInfo, pass, expired, isDebug);
// init connection to server for register user
clientSocket.init(socketLink.url, socketLink.path, socketLink.timeout)

// Waiting for token response from server:
const { waiting } = require("cng-node-js-utils")
waiting(20000, { hasData: () => clientSocket.getToken() })
    .then(msg => {
        // View token valid and copy to token for save step 4:
        console.log("***>Current TOKEN connected: ", clientSocket.getToken());
    })

6. Make proxy authentication server socket

npm i client-socket-nodejs
  • 6.1 create key pair for this server

  • 6.2 register new user (ask admin socket server)

  • 6.3 login and get token with expired date

  • 6.4 copy keyPair and token follow file config socketVerify

  • 6.5 create handler for verify token in ./handler/client-socket/socket-verify.js or any for secret token and private_key for this server:

/**
 * Hàm này giao tiếp khởi tạo client Handler giao tiếp máy chủ socket để verify token và get user từ socket server
 * Điều kiện là máy này đã thiết lập được kênh liên lạc với máy chủ socket rồi
 * Được cấp token có hiệu lực rồi
 */

// test thử kênh liên lạc với máy chủ sau khi đã đăng ký được token
const { ClientSocket, ClientDeviceInfo, ClientHandler } = require("client-socket-nodejs");

let appName = "TEST";  // tên này phải trùng với tên khi cấp token đó
// PHẦN ĐƯỢC TẠO bởi client:
// sử dụng test/create-key-pair.js để tạo key trước, sau đó copy khóa đó vào dưới đây
let deviceKey = {
    id: 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMYLyjaOwTyajv1GMlBVim70bw4DUERzHhqobvN+2As8j7qGTNNl7FoZjCRMeVJcvLSerpCT+RWA695bmLv91RcCAwEAAQ==',
    key: 'MIIBOwIBAAJBAMYLyjaOwTyajv1GMlBVim70bw4DUERzHhqobvN+2As8j7qGTNNl7FoZjCRMeVJcvLSerpCT+RWA695bmLv91RcCAwEAAQJAA80yIn33A5zL5dy1Fomt0Jdskk5J+iZji4t0JcRnjT+hsKroIjwVNS9z58MXmwI1u/s3WljkAGTLvOjepMlPYQIhAPDeu1YxUS7QAg0VtaCwm1R6sxs4Fub+pcbvYrOf+s8fAiEA0nxvOfZI8wE0/CoP2j1D5sNKinsImVt52HpyrWvK0wkCIQDKWzSjWtdLLrEqcPyfvP8h39ssmNiUw4ZeNKqFIXfCHQIgfyr03DUDL+XbyDn1Z+o52vLEV1QsBtNwkyyvmj0UxlkCIQCC43kV/Jc6FegQd/IZFE4YnGaqSii+y2/gz2O6xpGnjQ==',
    created_time: '2020-09-12 09:02:09'
}
// PHẦN ĐƯỢC TẠO bởi server socket:
// token cho máy chủ cuongdq:
let token = "eyJ1c2VybmFtZSI6IjA5MDM1MDAxMjUiLCJkZXZpY2VfaWQiOjE1LCJpYXQiOjE1OTk4ODM4NDY2OTQsImV4cCI6MTYzMTQxOTg0NjY5NH0=.WlJGaDdDYkhFOWczZXdXdVdvOUsrV2NjV2U5bVBtTlRtKzI2WGw0Vi9leDZzWjkwcmVEOGlsMHNUazlFTXVxTC9DTFk0b3BSWHdtOVJ4V2t2a1ZoUHc9PQ==";

// nếu ta cấp token và deviceKey thì thông tin user có thể bỏ qua
let clientDeviceInfo = new ClientDeviceInfo(appName, deviceKey, token);

let socketLink = {
    url: "http://localhost:9225"
    , path: "/socket"
    , timeout: 10000
}

// byPASS for check
let byPass = true;  // for false if advance user to get user info from socket server
let clientSocket = new ClientSocket(clientDeviceInfo);
clientSocket.init(socketLink.url, socketLink.path, socketLink.timeout)

const clientHandler = new ClientHandler(clientSocket, socketLink.url, socketLink.path, byPass)
module.exports = {
    verifyToken: clientHandler.verifyToken,
    getResource: clientHandler.getResource
}
  • 6.6 in any routes for verify token by socket proxy
    // processor for getToken + post json_data + post form_data
    const { postHandler } = require("cng-node-js-utils")
    // processor for verify token,  return: req.user if success or req.error if fail
    const socketVerify = require("../../handlers/client-socket/socket-verify")

7. Javascript package for login form:

# install key
npm i client-socket-nodejs@latest
# create new KEYPAIRs for your app
node ./client-socket-nodejs/test/create-key-pair.js 
// import lib
const { ClientInputInterface } = require("client-node-js");

// copy keypairs when you create here:
const deviceKey = {
    // copy keyPair here
}

// Define your app name
const APP_NAME = "WEB-DEMO";
// Define device class with appname and keypair
let clientDeviceInfo = new ClientDeviceInfo(APP_NAME, deviceKey);

// define link to server (ask your admin socket Server for link)
const socketLink = {
    url: "http://localhost:9225"
    , path: "/socket"
    , timeout: 10000
}

// ask for admin socket server for user init no pass in server database

// Define client 
let client = new ClientInputInterface(APP_NAME, deviceKey, socketLink);

const { waiting } = require("cng-node-js-utils");

// if token saved
let myToken =
  "yourtoken.yoursign";

// login BY Token 
 client
    .loginByToken(myToken)
    .then((data) => {
      console.log("data", data);
    })
    .catch((err) => {
      console.log("err", err);
    });


// login by USER form

// const loginForm = {
//   username: "yourEmail@email", // 'phone or email
//   user_type: "email", // 'phone' | 'email' | 'ldap'
//   password: "xxxx",
//   expired: 365,
// };

// client
//   .loginByUser(
//     loginForm.username,
//     loginForm.user_type,
//     loginForm.password,
//     loginForm.expired
//   )
//   .then((data) => {
//     console.log("LoginData", data);
//   })

Login IN WEB default index.html

<html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<!-- <script src="https://cuongdq.no-ip.info/socket/api/js/www.client.socket.login.js"></script> -->
<script src="./www.client.socket.login.js"></script>
<script>

// app demo
  const APP_NAME = "WEB-DEMO-CUONGDQ";
  // Key demo
  const deviceKey = {
    created_time: "2020-09-17 22:25:09",
    id: "MFswDQYJKoZIhvcNAQEBBQADSgAwRwJAea/IOT6QMv/kw1W8aYzlIG/twyKmjYggL94DbduYC8t7QmZ0JCpK43ugArxzVmXnAU6oe0wiuH57yS4cKLntUQIDAQAB",
    key: "MIIBOQIBAAJAea/IOT6QMv/kw1W8aYzlIG/twyKmjYggL94DbduYC8t7QmZ0JCpK43ugArxzVmXnAU6oe0wiuH57yS4cKLntUQIDAQABAkA/81ucif6qbsVAyuwL5Jn95BTmOm2hb+rKfTj8IS3U9EjAMs4ppC79uIMGL8zAQiftY2DOs/QFPgBlHRYBGGlhAiEA6Ar9ZB/Jk/jRvsXfrlbNog95AQrXSsv7ydvsUh9sqrUCIQCGQAVXdSzYBeLaodpatYrrLMRRwOc6iH6rTaYypN3trQIhALhfKxEoNLnPRZEIln9m10MCekn6vC/hPnIYvYBPGb/VAiAHzXbCA4RstcLelCOdvAlr67kpSz3lMAO0rxmmveBMLQIgQx8NQrTVAWvHghZEqEmy/1IAKaziMf4FQQgPt0UGAcc="
  };

  // socket server link
  const socketLink = {
    url: "http://localhost:9225",
    path: "/socket",
    timeout: 10000,
  };

  // key pair auto:
  // let clientDeviceInfo = new clientSocketLogin.ClientDeviceInfo();
  // clientDeviceInfo.getClientInfo()
  //   .then(deviceInfo => {
  //     // console.log('deviceInfo: ', deviceInfo);
  //     console.log('KeyPair:', clientDeviceInfo.getKeyPair())
  //   })
  //   .catch(err => {
  //     console.log('Error: ', err);
  //   });

  let client = new clientSocketLogin.ClientInputInterface(APP_NAME, deviceKey, socketLink);

  // check device ready (socket communicated with server)
  client.getDeviceId()
    .then(deviceId => {
      console.log('The device ready: ', deviceId);
    })

  // token saved
  let myToken =
    "xeyJ1c2VybmFtZSI6ImN1b25nLmRxIiwiZGV2aWNlX2lkIjozMSwiaWF0IjoxNjAwMzM3NzU4MzI1LCJleHAiOjE2MzE4NzM3NTgzMjV9.QVFFL2FJR1dRamV5Zm9Ba1I0RGNGT0RtUVBYdlBBUUxMNjkxY2hkYVc2d1pIT0krSFI5ekRZS29Ma3VXT3o2SzNxTFdycVFodkRoMDgvSXhPclB3WHc9PQ==";

// if login by token is
  // client
  //   .loginByToken(myToken)
  //   .then((tokenData) => {
  //     if (tokenData.userInfo) {
  //       console.log("Login OK tokenData", tokenData);
  //     } else {
  //       console.log("Token invalid");
  //     }
  //   })

  const loginForm = {
    username: "0123456789", // 'phone or email
    user_type: "phone", // 'phone' | 'email' | 'ldap'
    password: "12345",
    expired: 1,
  };

// if login by user is
  client
    .loginByUser(
      loginForm.username,
      loginForm.user_type,
      loginForm.password,
      loginForm.expired
    )
    .then((tokenData) => {
      if (tokenData.userInfo) {
        console.log("Login OK tokenData", tokenData);
      } else {
        console.log("Login Fail by user");
      }
    })

</script>

<body>
  This is your page for login form
</body>

</html>

proxy token vefify:

// define your config in  
const socketConfig = require("../../cfg/resource-server-socket-cfg");
// include the module
const { VerifyToken } = require("client-socket-nodejs");
// init proxy server connection:
let verifyToken = new VerifyToken(socketConfig);
// verify client token by command:
// token have info of: {username, device_id, iat, exp}
// verifyToken.verify(clientToken,clientDevicename)

Readme

Keywords

none

Package Sidebar

Install

npm i client-socket-nodejs

Weekly Downloads

17

Version

2.0.7

License

ISC

Unpacked Size

50.3 kB

Total Files

11

Last publish

Collaborators

  • cuongdq