0.6.2 • Published 4 years ago

opuntia-mongo v0.6.2

Weekly downloads
2
License
MIT
Repository
github
Last release
4 years ago

opuntia-mongo. Store your data in MongoDB.

A plugin for 'opuntia' framework for using the it with MongoDB Overrides opuntia.Server class. Contains three modules: auth, users, info Used collection names (hardcoded now): users, sessions, counters, logs

Module Auth - Autorization

Implements opuntia auth interface (method async checkAuthorized(r)). That allows use it as parameter in opuntia router. Exports a router to with some endpoints (login, logout, info) too handle authorization requests. Settings:

  • LOCAL_ID_LENGTH - localCounter length in bits. Default 20. 0 - do not generate id_seed
  • TOKEN_LENGTH - auth token length in bytes. Default 16.
  • COOKIE_NAME - cookie for token name

Module Users - User List

Allows to handle a common user list located in users collection. Settings:

  • MIN_PASSWORD_LENGTH - default 6
  • ENCRYPT_PASSWORD - default true

Module Info - Database Info

Exports some methods to get an information about the database. Mostly for development.

On-the-Client ID Generation

Requirements:

  • ID should be numeric for data volume minimization
  • ID could be generated on the client without the backend connection
  • ID can't exceed 53 bit number because of JavaScript features (ECMA Section 8.5 - Numbers)

Solution:

globalCounter(53-n bit) : localCounter(n bit) The backend keeps a global counter (auto-increment sequence). Each successful login generates and sends to the client an id_seed = globalCounter<<n. The client generates ID like: id_seed + localCounter (where localCounter is a local auto-increment sequence).


Usage Example

const opuntiaMongo = require("opuntia-mongo");
let auth  = opuntiaMongo.auth;
let info  = opuntiaMongo.info;
let users = opuntiaMongo.users;
// Modify settings
auth.settings.TOKEN_LENGTH    = 8;
auth.settings.LOCAL_ID_LENGTH = 2;
users.settings.MIN_PASSWORD_LENGTH = 4;

let router = {
    // Private part
    portal: {	
        // Parameters
        ...
		_database:	mongo.db("portal"), // mongo - connected MongoDB client
        _auth: auth,
        // Branches
        auth:  auth.router, // handle requests /portal
		users: users.router,
		info:  info.router,
        ...
    }
}
new opuntiaMongo.Server(router).server.listen();

A working example is in 'test' folder of the project repository

0.6.2

4 years ago

0.6.1

4 years ago

0.6.0

5 years ago

0.5.2

5 years ago

0.5.1

5 years ago

0.5.0

5 years ago

0.4.1

5 years ago

0.4.0

5 years ago

0.3.0

5 years ago

0.2.0

5 years ago

0.1.2

5 years ago

0.1.1

5 years ago

0.1.0

5 years ago