mirror of
https://github.com/verdaccio/verdaccio.git
synced 2024-11-17 07:45:52 +01:00
5980708f00
* New translations test.md (Portuguese, Brazilian) docs(website): new translations * New translations ansible.md (Russian) docs(website): new translations * New translations auth.md (Russian) docs(website): new translations * New translations reverse-proxy.md (Russian) docs(website): new translations * New translations logo.md (Russian) docs(website): new translations * New translations chef.md (Russian) docs(website): new translations * New translations puppet.md (Russian) docs(website): new translations * New translations ci.md (Russian) docs(website): new translations * New translations what-is-verdaccio.md (Russian) docs(website): new translations * New translations node-api.md (Russian) docs(website): new translations * New translations windows.md (Russian) docs(website): new translations * New translations web.md (Russian) docs(website): new translations * New translations use-cases.md (Russian) docs(website): new translations * New translations uplinks.md (Russian) docs(website): new translations * New translations test.md (Russian) docs(website): new translations * New translations ssl.md (Russian) docs(website): new translations * New translations server.md (Russian) docs(website): new translations * New translations repositories.md (Russian) docs(website): new translations * New translations build.md (Russian) docs(website): new translations * New translations protect-your-dependencies.md (Russian) docs(website): new translations * New translations plugins.md (Russian) docs(website): new translations * New translations packages.md (Russian) docs(website): new translations * New translations notifications.md (Russian) docs(website): new translations * New translations logger.md (Russian) docs(website): new translations * New translations kubernetes.md (Russian) docs(website): new translations * New translations install.md (Russian) docs(website): new translations * New translations iis-server.md (Russian) docs(website): new translations * New translations docker.md (Russian) docs(website): new translations * New translations dev-plugins.md (Russian) docs(website): new translations * New translations contributing.md (Russian) docs(website): new translations * New translations config.md (Russian) docs(website): new translations * New translations cli.md (Russian) docs(website): new translations * New translations ansible.md (Serbian (Cyrillic)) docs(website): new translations * New translations reverse-proxy.md (Polish) docs(website): new translations * New translations logo.md (Polish) docs(website): new translations * New translations chef.md (Polish) docs(website): new translations * New translations puppet.md (Polish) docs(website): new translations * New translations ci.md (Polish) docs(website): new translations * New translations what-is-verdaccio.md (Polish) docs(website): new translations * New translations node-api.md (Polish) docs(website): new translations * New translations windows.md (Polish) docs(website): new translations * New translations web.md (Polish) docs(website): new translations * New translations use-cases.md (Polish) docs(website): new translations * New translations uplinks.md (Polish) docs(website): new translations * New translations test.md (Polish) docs(website): new translations * New translations ssl.md (Polish) docs(website): new translations * New translations server.md (Polish) docs(website): new translations * New translations repositories.md (Polish) docs(website): new translations * New translations protect-your-dependencies.md (Polish) docs(website): new translations * New translations plugins.md (Polish) docs(website): new translations * New translations packages.md (Polish) docs(website): new translations * New translations notifications.md (Polish) docs(website): new translations * New translations logger.md (Polish) docs(website): new translations * New translations kubernetes.md (Polish) docs(website): new translations * New translations install.md (Polish) docs(website): new translations * New translations iis-server.md (Polish) docs(website): new translations * New translations docker.md (Polish) docs(website): new translations * New translations dev-plugins.md (Polish) docs(website): new translations * New translations contributing.md (Polish) docs(website): new translations * New translations config.md (Polish) docs(website): new translations * New translations cli.md (Polish) docs(website): new translations * New translations test.md (Portuguese) docs(website): new translations * New translations auth.md (Serbian (Cyrillic)) docs(website): new translations * New translations auth.md (Polish) docs(website): new translations * New translations test.md (Spanish) docs(website): new translations * New translations ansible.md (Vietnamese) docs(website): new translations * New translations auth.md (Vietnamese) docs(website): new translations * New translations reverse-proxy.md (Vietnamese) docs(website): new translations * New translations logo.md (Vietnamese) docs(website): new translations * New translations chef.md (Vietnamese) docs(website): new translations * New translations puppet.md (Vietnamese) docs(website): new translations * New translations ci.md (Vietnamese) docs(website): new translations * New translations what-is-verdaccio.md (Vietnamese) docs(website): new translations * New translations node-api.md (Vietnamese) docs(website): new translations * New translations windows.md (Vietnamese) docs(website): new translations * New translations web.md (Vietnamese) docs(website): new translations * New translations use-cases.md (Vietnamese) docs(website): new translations * New translations uplinks.md (Vietnamese) docs(website): new translations * New translations test.md (Vietnamese) docs(website): new translations * New translations ssl.md (Vietnamese) docs(website): new translations * New translations server.md (Vietnamese) docs(website): new translations * New translations repositories.md (Vietnamese) docs(website): new translations * New translations build.md (Vietnamese) docs(website): new translations * New translations protect-your-dependencies.md (Vietnamese) docs(website): new translations * New translations plugins.md (Vietnamese) docs(website): new translations * New translations packages.md (Vietnamese) docs(website): new translations * New translations notifications.md (Vietnamese) docs(website): new translations * New translations logger.md (Vietnamese) docs(website): new translations * New translations kubernetes.md (Vietnamese) docs(website): new translations * New translations install.md (Vietnamese) docs(website): new translations * New translations iis-server.md (Vietnamese) docs(website): new translations * New translations docker.md (Vietnamese) docs(website): new translations * New translations dev-plugins.md (Vietnamese) docs(website): new translations * New translations contributing.md (Vietnamese) docs(website): new translations * New translations config.md (Vietnamese) docs(website): new translations * New translations cli.md (Vietnamese) docs(website): new translations * New translations build.md (Serbian (Cyrillic)) docs(website): new translations * New translations reverse-proxy.md (Serbian (Cyrillic)) docs(website): new translations * New translations logo.md (Serbian (Cyrillic)) docs(website): new translations * New translations chef.md (Serbian (Cyrillic)) docs(website): new translations * New translations puppet.md (Serbian (Cyrillic)) docs(website): new translations * New translations ci.md (Serbian (Cyrillic)) docs(website): new translations * New translations what-is-verdaccio.md (Serbian (Cyrillic)) docs(website): new translations * New translations node-api.md (Serbian (Cyrillic)) docs(website): new translations * New translations windows.md (Serbian (Cyrillic)) docs(website): new translations * New translations web.md (Serbian (Cyrillic)) docs(website): new translations * New translations use-cases.md (Serbian (Cyrillic)) docs(website): new translations * New translations uplinks.md (Serbian (Cyrillic)) docs(website): new translations * New translations test.md (Serbian (Cyrillic)) docs(website): new translations * New translations ssl.md (Serbian (Cyrillic)) docs(website): new translations * New translations server.md (Serbian (Cyrillic)) docs(website): new translations * New translations repositories.md (Serbian (Cyrillic)) docs(website): new translations * New translations protect-your-dependencies.md (Serbian (Cyrillic)) docs(website): new translations * New translations plugins.md (Serbian (Cyrillic)) docs(website): new translations * New translations packages.md (Serbian (Cyrillic)) docs(website): new translations * New translations notifications.md (Serbian (Cyrillic)) docs(website): new translations * New translations logger.md (Serbian (Cyrillic)) docs(website): new translations * New translations kubernetes.md (Serbian (Cyrillic)) docs(website): new translations * New translations install.md (Serbian (Cyrillic)) docs(website): new translations * New translations iis-server.md (Serbian (Cyrillic)) docs(website): new translations * New translations docker.md (Serbian (Cyrillic)) docs(website): new translations * New translations dev-plugins.md (Serbian (Cyrillic)) docs(website): new translations * New translations contributing.md (Serbian (Cyrillic)) docs(website): new translations * New translations config.md (Serbian (Cyrillic)) docs(website): new translations * New translations cli.md (Serbian (Cyrillic)) docs(website): new translations * New translations test.md (Serbian (Latin)) docs(website): new translations * New translations build.md (Polish) docs(website): new translations * New translations ansible.md (Polish) docs(website): new translations * New translations repositories.md (French) docs(website): new translations * New translations chef.md (French) docs(website): new translations * New translations puppet.md (French) docs(website): new translations * New translations ci.md (French) docs(website): new translations * New translations what-is-verdaccio.md (French) docs(website): new translations * New translations node-api.md (French) docs(website): new translations * New translations windows.md (French) docs(website): new translations * New translations web.md (French) docs(website): new translations * New translations use-cases.md (French) docs(website): new translations * New translations uplinks.md (French) docs(website): new translations * New translations test.md (French) docs(website): new translations * New translations ssl.md (French) docs(website): new translations * New translations server.md (French) docs(website): new translations * New translations reverse-proxy.md (French) docs(website): new translations * New translations protect-your-dependencies.md (French) docs(website): new translations * New translations plugins.md (French) docs(website): new translations * New translations packages.md (French) docs(website): new translations * New translations notifications.md (French) docs(website): new translations * New translations logger.md (French) docs(website): new translations * New translations kubernetes.md (French) docs(website): new translations * New translations install.md (French) docs(website): new translations * New translations iis-server.md (French) docs(website): new translations * New translations docker.md (French) docs(website): new translations * New translations dev-plugins.md (French) docs(website): new translations * New translations contributing.md (French) docs(website): new translations * New translations config.md (French) docs(website): new translations * New translations cli.md (French) docs(website): new translations * New translations build.md (French) docs(website): new translations * New translations logo.md (French) docs(website): new translations * New translations ansible.md (French) docs(website): new translations * New translations test.md (German) docs(website): new translations * New translations auth.md (French) docs(website): new translations * New translations test.md (Arabic) docs(website): new translations * New translations test.md (Chinese Simplified) docs(website): new translations * New translations test.md (Japanese) docs(website): new translations * New translations test.md (Korean) docs(website): new translations * New translations test.md (Hindi) docs(website): new translations * New translations ansible.md (Italian) docs(website): new translations * New translations reverse-proxy.md (Italian) docs(website): new translations * New translations logo.md (Italian) docs(website): new translations * New translations chef.md (Italian) docs(website): new translations * New translations puppet.md (Italian) docs(website): new translations * New translations ci.md (Italian) docs(website): new translations * New translations what-is-verdaccio.md (Italian) docs(website): new translations * New translations node-api.md (Italian) docs(website): new translations * New translations windows.md (Italian) docs(website): new translations * New translations web.md (Italian) docs(website): new translations * New translations use-cases.md (Italian) docs(website): new translations * New translations uplinks.md (Italian) docs(website): new translations * New translations test.md (Italian) docs(website): new translations * New translations ssl.md (Italian) docs(website): new translations * New translations server.md (Italian) docs(website): new translations * New translations repositories.md (Italian) docs(website): new translations * New translations auth.md (Italian) docs(website): new translations * New translations protect-your-dependencies.md (Italian) docs(website): new translations * New translations plugins.md (Italian) docs(website): new translations * New translations packages.md (Italian) docs(website): new translations * New translations notifications.md (Italian) docs(website): new translations * New translations logger.md (Italian) docs(website): new translations * New translations kubernetes.md (Italian) docs(website): new translations * New translations install.md (Italian) docs(website): new translations * New translations iis-server.md (Italian) docs(website): new translations * New translations docker.md (Italian) docs(website): new translations * New translations dev-plugins.md (Italian) docs(website): new translations * New translations contributing.md (Italian) docs(website): new translations * New translations config.md (Italian) docs(website): new translations * New translations cli.md (Italian) docs(website): new translations * New translations build.md (Italian) docs(website): new translations
188 lines
6.4 KiB
Markdown
188 lines
6.4 KiB
Markdown
---
|
|
id: dev-plugins
|
|
title: "Tworzenie wtyczek"
|
|
---
|
|
Istnieje wiele sposobów na rozszerzenie funkcjonalności `verdaccio`, wspierane są następujące rodzaje wtyczek:
|
|
|
|
* Wtyczki uwierzytelniania
|
|
* Wtyczki oprogramowania pośredniego (od wersji `v2.7.0`)
|
|
* Wtyczki magazynu danych od wersji (`v3.x`)
|
|
|
|
> We recommend developing plugins using our [flow type definitions](https://github.com/verdaccio/flow-types).
|
|
|
|
## Wtyczka uwierzytelniania
|
|
|
|
Musimy tylko zwrócić obiekt pojedynczą metodą `authenticate`, która otrzyma 3 argumenty (`user, password, callback`).
|
|
|
|
### API
|
|
|
|
```flow
|
|
interface IPluginAuth extends IPlugin {
|
|
login_url?: string;
|
|
authenticate(user: string, password: string, cb: Callback): void;
|
|
adduser(user: string, password: string, cb: Callback): void;
|
|
allow_access(user: RemoteUser, pkg: $Subtype<PackageAccess>, cb: Callback): void;
|
|
allow_publish(user: RemoteUser, pkg: $Subtype<PackageAccess>, cb: Callback): void;
|
|
}
|
|
```
|
|
|
|
> Tylko `dduser`, `allow_access` i `allow_publish` są opcjonalne, verdaccio zapewnia cofnięcie we wszystkich tych przypadkach.
|
|
|
|
#### Callback
|
|
|
|
Po wykonaniu uwierzytelniania mamy 2 opcje na odpowiedź do `verdaccio`.
|
|
|
|
###### OnError
|
|
|
|
Gdy coś złego się wydarzy, lub uwierzytelnianie nie powiedzie się.
|
|
|
|
```flow
|
|
callback(null, false)
|
|
```
|
|
|
|
###### OnSuccess
|
|
|
|
Uwierzytelnianie zakończone sukcesem.
|
|
|
|
`grupy` to tablica ciągów znaków, w których użytkownik jest częścią.
|
|
|
|
callback(null, groups);
|
|
|
|
|
|
### Example
|
|
|
|
```javascript
|
|
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;
|
|
```
|
|
|
|
Konfiguracja będzie wyglądać następująco:
|
|
|
|
```yaml
|
|
auth:
|
|
htpasswd:
|
|
file: ./htpasswd
|
|
```
|
|
|
|
Gdzie `htpasswd` jest przyrostkiem nazwy wtyczki. np: `verdaccio-htpasswd`, a reszta będzie parametrem konfiguracyjnym wtyczki.
|
|
|
|
## Wtyczka oprogramowania pośredniego
|
|
|
|
Wtyczki pośrednie mają możliwość modyfikowania warstwy API, dodając nowe punkty końcowe lub przechwytywania żądań.
|
|
|
|
```flow
|
|
interface verdaccio$IPluginMiddleware extends verdaccio$IPlugin {
|
|
register_middlewares(app: any, auth: IBasicAuth, storage: IStorageManager): void;
|
|
}
|
|
```
|
|
|
|
### register_middlewares
|
|
|
|
Metoda zapewnia pełny dostęp do uwierzytelniania i przechowywania za pomocą `auth` i `storage`. `app` to ekspresowa aplikacja, która pozwala dodawać nowe punkty końcowe.
|
|
|
|
> A pretty good example of middleware plugin is the [sinopia-github-oauth](https://github.com/soundtrackyourbrand/sinopia-github-oauth) and [verdaccio-audit](https://github.com/verdaccio/verdaccio-audit).
|
|
|
|
### API
|
|
|
|
```js
|
|
function register_middlewares(expressApp, authInstance, storageInstance) {
|
|
/* more stuff */
|
|
}
|
|
```
|
|
|
|
Aby zarejestrować oprogramowanie pośrednie potrzebujemy obiekt z pojedynczą metodą `register_middlewares`, która otrzyma 3 argumenty (`expressApp, auth, storage`). *Auth* to instancja uwierzytelniania, a *storage* to także główna instancja Storage, która zapewnia dostęp do wszystkich działań związanych z pamięcią masową.
|
|
|
|
## Wtyczka magazynu danych
|
|
|
|
Verdaccio by default uses a file system storage plugin [local-storage](https://github.com/verdaccio/local-storage), but, since `verdaccio@3.x` you can plug in a custom storage replacing the default behaviour.
|
|
|
|
### API
|
|
|
|
API magazynu danych jest trochę bardziej skomplikowane, będziesz musiał stworzyć klasę, która zwraca implementację `IPluginStorage`. Poniżej zapoznasz się ze szczegółami.
|
|
|
|
```flow
|
|
class LocalDatabase<IPluginStorage>{
|
|
constructor(config: $Subtype<verdaccio$Config>, logger: verdaccio$Logger): ILocalData;
|
|
}
|
|
|
|
interface IPluginStorage {
|
|
logger: verdaccio$Logger;
|
|
config: $Subtype<verdaccio$Config>;
|
|
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;
|
|
search(onPackage: verdaccio$Callback, onEnd: verdaccio$Callback, validateName: Function): void;
|
|
}
|
|
|
|
interface IPackageStorageManager {
|
|
path: string;
|
|
logger: verdaccio$Logger;
|
|
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;
|
|
}
|
|
|
|
class verdaccio$IUploadTarball extends stream$PassThrough {
|
|
abort: Function;
|
|
done: Function;
|
|
_transform: Function;
|
|
abort(): void;
|
|
done(): void;
|
|
}
|
|
|
|
class verdaccio$IReadTarball extends stream$PassThrough {
|
|
abort: Function;
|
|
abort(): void;
|
|
}
|
|
```
|
|
|
|
> API magazynu danych jest nadal w fazie eksperymentalnej i może się zmienić w następnej pomniejszej wersji. For further information about Storage API please follow the [types definitions in our official repository](https://github.com/verdaccio/flow-types).
|
|
|
|
### Przykłady wtyczek magazynu danych
|
|
|
|
Poniższa lista wtyczek wdraża API magazynu danych oraz mogą być użyte jako przykład.
|
|
|
|
* [verdaccio-memory](https://github.com/verdaccio/verdaccio-memory)
|
|
* [local-storage](https://github.com/verdaccio/local-storage)
|
|
* [verdaccio-google-cloud](https://github.com/verdaccio/verdaccio-google-cloud)
|
|
* [verdaccio-s3-storage](https://github.com/Remitly/verdaccio-s3-storage/tree/s3)
|
|
|
|
> Chciałbyś współtworzyć ten projekt z nowymi wtyczkami magazynu danych? [Kliknij tutaj.](https://github.com/verdaccio/verdaccio/issues/103#issuecomment-357478295) |