1
0
mirror of https://github.com/verdaccio/verdaccio.git synced 2024-11-17 07:45:52 +01:00
verdaccio/website/translated_docs/es-ES/dev-plugins.md
verdacciobot 825f5a57ea New Crowdin translations (#768)
* New translations iis-server.md (Spanish)
docs(website): new translations

* New translations install.md (Spanish)
docs(website): new translations

* New translations en.json (Spanish)
docs(website): new translations

* New translations config.md (Spanish)
docs(website): new translations

* New translations config.md (Spanish)
docs(website): new translations

* New translations auth.md (Spanish)
docs(website): new translations

* New translations iis-server.md (Spanish)
docs(website): new translations

* New translations auth.md (Spanish)
docs(website): new translations

* New translations auth.md (Spanish)
docs(website): new translations

* New translations ansible.md (Spanish)
docs(website): new translations

* New translations windows.md (Spanish)
docs(website): new translations

* New translations logger.md (Spanish)
docs(website): new translations

* New translations logger.md (Spanish)
docs(website): new translations

* New translations logger.md (Spanish)
docs(website): new translations

* New translations ci.md (Spanish)
docs(website): new translations

* New translations ci.md (Spanish)
docs(website): new translations

* New translations dev-plugins.md (Spanish)
docs(website): new translations

* New translations dev-plugins.md (Spanish)
docs(website): new translations

* New translations dev-plugins.md (Spanish)
docs(website): new translations

* New translations dev-plugins.md (Spanish)
docs(website): new translations

* New translations windows.md (Spanish)
docs(website): new translations

* New translations dev-plugins.md (Spanish)
docs(website): new translations

* New translations dev-plugins.md (Spanish)
docs(website): new translations

* New translations config.md (Spanish)
docs(website): new translations

* New translations dev-plugins.md (Spanish)
docs(website): new translations

* New translations dev-plugins.md (Spanish)
docs(website): new translations

* New translations protect-your-dependencies.md (Spanish)
docs(website): new translations

* New translations uplinks.md (Spanish)
docs(website): new translations

* New translations dev-plugins.md (Spanish)
docs(website): new translations

* New translations protect-your-dependencies.md (Spanish)
docs(website): new translations

* New translations docker.md (Spanish)
docs(website): new translations

* New translations node-api.md (Spanish)
docs(website): new translations

* New translations protect-your-dependencies.md (Spanish)
docs(website): new translations

* New translations docker.md (Spanish)
docs(website): new translations

* New translations docker.md (Spanish)
docs(website): new translations

* New translations install.md (Spanish)
docs(website): new translations

* New translations reverse-proxy.md (Spanish)
docs(website): new translations

* New translations reverse-proxy.md (Spanish)
docs(website): new translations

* New translations ssl.md (Spanish)
docs(website): new translations

* New translations ssl.md (Spanish)
docs(website): new translations

* New translations ssl.md (Spanish)
docs(website): new translations

* New translations ssl.md (Spanish)
docs(website): new translations

* New translations auth.md (Spanish)
docs(website): new translations

* New translations dev-plugins.md (Spanish)
docs(website): new translations

* New translations iis-server.md (Spanish)
docs(website): new translations

* New translations dev-plugins.md (Spanish)
docs(website): new translations

* New translations config.md (Spanish)
docs(website): new translations

* New translations ci.md (Spanish)
docs(website): new translations

* New translations iis-server.md (Spanish)
docs(website): new translations

* New translations logger.md (Spanish)
docs(website): new translations

* New translations ci.md (Spanish)
docs(website): new translations

* New translations dev-plugins.md (Spanish)
docs(website): new translations

* New translations logger.md (Spanish)
docs(website): new translations

* New translations iis-server.md (Spanish)
docs(website): new translations

* New translations iis-server.md (Spanish)
docs(website): new translations

* New translations windows.md (Spanish)
docs(website): new translations
2018-06-19 19:18:49 +02:00

5.3 KiB

id title
dev-plugins Extensiones en Desarrollo

Hay muchas maneras de extender verdaccio, actualmente apoyamos authentication plugins, middleware plugins (desde v2.7.0) y storage plugins desde (v3.x).

Extensión de Autenticación

Esta sección describe cómo se ve una extensión de Verdaccio de manera ES5. Básicamente tenemos que devolver un objeto con un único método llamado authenticate que recibirá 3 argumentos (user, password, callback). Una vez que la autenticación haya sido ejecutada habrán 2 opciones con las que se podrá dar una respuesta a verdaccio.

API

function authenticate (user, password, callback) {
 ...more stuff
}
OnError

Algo malo sucedió o la autenticación no tuvo éxito.

callback(null, false)
OnSuccess

La autenticación tuvo éxito.

groups es una matriz de cadenas de caracteres donde el usuario participa.

 callback(null, groups);

Ejemplo

function Auth(config, stuff) {
  var self = Object.create(Auth.prototype);
  self._users = {};

  // config for this module
  self._config = config;

  // verdaccio logger
  self._logger = stuff.logger;

  // pass verdaccio logger to ldapauth
  self._config.client_options.log = stuff.logger;

  return self;
}

Auth.prototype.authenticate = function (user, password, callback) {
  var LdapClient = new LdapAuth(self._config.client_options);
  ....
  LdapClient.authenticate(user, password, function (err, ldapUser) {
    ...
    var groups;
     ...
    callback(null, groups);
  });
};

module.exports = Auth;

Y la configuración

auth:
  htpasswd:
    file: ./htpasswd

Donde htpasswd es el sufijo del nombre de la extensión. Por ejemplo: verdaccio-htpasswd y el resto del cuerpo serían los parámetros de configuración de la extensión.

Extensión de Middleware

Las extensiones de Middleware tienen la capacidad de modificar la capa de API, ya sea añadiendo extremos o peticiones de interceptación.

Un muy buen ejemplo de la extensión de middleware es sinopia-github-oauth y verdaccio-audit.

API

function register_middlewares(expressApp, authInstance, storageInstance) {
   /* more stuff */
}

Para registrar un middleware necesitamos un objeto con un único método llamado register_middlewares que recibirá 3 argumentos (expressApp, auth, storage). Auth es la instancia de autentificación y storage es de igual manera la instancia de Almacenamiento principal que te dará el acceso a todas las acciones de almacenamiento.

Extensión de Almacenamiento

Verdaccio por defecto utiliza una extensión de almacenamientos de sistema de archivos local-storage pero, desde verdaccio@3.x puedes añadir un almacenamiento personalizado.

API

El API de almacenamiento es un poco más complejo, necesitarás crear una clase que devuelva una implementación de ILocalData. Por favor, mira los detalles que aparecen a continuación.

<br />class LocalDatabase<ILocalData>{
    constructor(config: Config, logger: Logger): ILocalData;
}

declare interface verdaccio$ILocalData {
  add(name: string, callback: verdaccio$Callback): void;
  remove(name: string, callback: verdaccio$Callback): void;
  get(callback: verdaccio$Callback): void;
  getSecret(): Promise<string>;
  setSecret(secret: string): Promise<any>;
  getPackageStorage(packageInfo: string): verdaccio$IPackageStorage;
}

declare interface verdaccio$ILocalPackageManager {
  writeTarball(name: string): verdaccio$IUploadTarball;
  readTarball(name: string): verdaccio$IReadTarball;
  readPackage(fileName: string, callback: verdaccio$Callback): void;
  createPackage(name: string, value: verdaccio$Package, cb: verdaccio$Callback): void;
  deletePackage(fileName: string, callback: verdaccio$Callback): void;
  removePackage(callback: verdaccio$Callback): void;
  updatePackage(pkgFileName: string,
                updateHandler: verdaccio$Callback,
                onWrite: verdaccio$Callback,
                transformPackage: Function,
                onEnd: verdaccio$Callback): void;
  savePackage(fileName: string, json: verdaccio$Package, callback: verdaccio$Callback): void;
}

interface IUploadTarball extends stream$PassThrough {
  abort(): void;
  done(): void;
}

interface IReadTarball extends stream$PassThrough {
  abort(): void;
  done(): void;
}

El API de Almacenamiento todavía es experimental y podría cambiar en las próximas versiones menores. Para más información acerca del API de Almacenamiento por favor sigue los tipos y definiciones en nuestro repositorio oficial.

Ejemplos de Extensiones de Almacenamiento

La siguiente lista de extensiones implementan el API de Almacenamiento y pueden ser utilizados como ejemplo.

¿Estás dispuesto a contribuir con nuevas extensiones de almacenamiento? Haz click aquí.