New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details
Socket
Book a DemoSign in
Socket

ros-rest

Package Overview
Dependencies
Maintainers
1
Versions
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ros-rest

Make an HTTP request (REST API) from Node.js to RouterOS.

latest
Source
npmnpm
Version
2.0.0
Version published
Maintainers
1
Created
Source

ROS REST - RouterOS REST API

Translate: Indonesia

Introduction

Make an HTTP request (REST API) from Node.js to RouterOS. The REST API is a new feature, it's starting to be available in RouterOS v7.1beta4.

Getting Started

Prerequisites

  • Use RouterOS v7.1beta4 or newer.

  • Install Node.js.

  • Enable www-ssl service (Winbox: IP > Services).

  • Install CA certificate, if only used on local network (for testing) create self-signed certificate, run following command in Winbox Terminal (more):

    /certificate
    add name=ca-template days-valid=3650 common-name=your.server.url key-usage=key-cert-sign,crl-sign
    add name=server-template days-valid=3650 common-name=your.server.url
    
    /certificate
    sign ca-template name=root-ca
    :delay 3s
    sign ca=root-ca server-template name=server
    :delay 3s
    
    /certificate
    set root-ca trusted=yes
    set server trusted=yes
    
    /ip service
    set www-ssl certificate=server disabled=no
    

Install

To install ROS REST, run the following command:

npm:

npm i ros-rest

or, yarn:

yarn add ros-rest

Configuration

const rosRest = require('ros-rest');

const clientRosRest = rosRest({
  host: '192.168.100.32',
  user: 'user',
  password: 'password',
  port: 443, // default 443
  secure: false, // default false
});

The rosRest function expects a RouterOS credential object and returns the method which we will discuss below.

Here's a list of expected object properties for rosRest:

PropertyTypeDefaultDescription
hoststring-host RouterOS
portnumber443port www-sssl service RouterOS
userstring-user to login to RouterOS
passwordstring-password to login to RouterOS
securebooleanfalseis the certificate validated by a publicly trusted certificate authority (CA)?

Note: If the certificate is self-signed set secure to false (default). If the certificate is validated by a certificate authority (CA) and RouterOS is accessible over a public network, set secure to true for security.

Method

Here's a list of the methods we can use that the rosRest function returns:

HTTPRouterOSROS RESTDescription
GETprintprintTo get the records.
PUTaddaddTo update a single record.
PATCHsetsetTo create a new record.
DELETEremoveremoveTo delete a single record.
POSTcommandUniversal method to get access to all console commands.

Learn more: RouteOS REST API Documentation

All methods return a Promise, we can handle it using then/catch or try/catch.

then/catch:

clientRosRest
  .print('ip/address')
  .then((res) => {
    console.log('result:', res);
  })
  .catch((err) => {
    console.log('error:', err);
  });

try/catch:

const fetchRouterOS = async () => {
  try {
    const res = await clientRosRest.print('ip/address');
    console.log('result:', res);
  } catch (err) {
    console.log('error:', err);
  }
};

fetchRouterOS();

For error handling and response schema, see the Axios documentation:

print

Example of retrieving all IP Address data (Winbox: IP > Address):

clientRosRest.print('ip/address');

Fetch by id, ether, or by a property containing a specific value:

clientRosRest.print('ip/address/*2');
clientRosRest.print('ip/address/ether1');
clientRosRest.print('ip/address?network=10.155.101.0&dynamic=true');

If we only need certain properties, use .proplist:

clientRosRest.print('ip/address?.proplist=address,disabled');

add

Example of adding a new IP Address:

clientRosRest.add('ip/address', {
  address: '192.168.10.1/24',
  network: '192.168.10.1',
  interface: 'ether2',
  comment: 'test ROS REST',
});

set

Example of updating an IP Address comment that has id *13:

clientRosRest.set('ip/address/*13', {
  comment: 'update comment test ROS REST',
});

remove

Example of deleting IP Address which has id *13:

clientRosRest.remove('ip/address/*13');

command

All API features are available via the command method.

clientRosRest.command('interface/print', {
  '.proplist': ['name', 'type'],
});

// or

clientRosRest.command('interface/print', {
  '.proplist': 'name,type',
});

Contributing

Contributions, issues and feature requests are welcome. Feel free to check issues page if you want to contribute.

Keywords

mikrotik

FAQs

Package last updated on 06 Oct 2021

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts