mirror of
https://github.com/verdaccio/verdaccio.git
synced 2024-12-30 22:34:10 -05:00
chore: update some endpoints with flow
This commit is contained in:
parent
3ed2bb3b34
commit
8f932f5f8a
8 changed files with 69 additions and 20 deletions
33
flow-typed/npm/cookies_vx.x.x.js
vendored
Normal file
33
flow-typed/npm/cookies_vx.x.x.js
vendored
Normal file
|
@ -0,0 +1,33 @@
|
|||
// flow-typed signature: dd32612579acfe0d3fb825468a81fc4a
|
||||
// flow-typed version: <<STUB>>/cookies_v0.7.1/flow_v0.64.0
|
||||
|
||||
/**
|
||||
* This is an autogenerated libdef stub for:
|
||||
*
|
||||
* 'cookies'
|
||||
*
|
||||
* Fill this stub out by replacing all the `any` types.
|
||||
*
|
||||
* Once filled out, we encourage you to share your work with the
|
||||
* community by sending a pull request to:
|
||||
* https://github.com/flowtype/flow-typed
|
||||
*/
|
||||
|
||||
declare module 'cookies' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
/**
|
||||
* We include stubs for each file inside this npm package in case you need to
|
||||
* require those files directly. Feel free to delete any files that aren't
|
||||
* needed.
|
||||
*/
|
||||
|
||||
|
||||
// Filename aliases
|
||||
declare module 'cookies/index' {
|
||||
declare module.exports: $Exports<'cookies'>;
|
||||
}
|
||||
declare module 'cookies/index.js' {
|
||||
declare module.exports: $Exports<'cookies'>;
|
||||
}
|
|
@ -92,7 +92,7 @@
|
|||
"eslint-plugin-react": "7.6.1",
|
||||
"extract-text-webpack-plugin": "3.0.2",
|
||||
"file-loader": "1.1.6",
|
||||
"flow-bin": "0.64.0",
|
||||
"flow-bin": "0.66.0",
|
||||
"flow-runtime": "0.16.0",
|
||||
"friendly-errors-webpack-plugin": "1.6.1",
|
||||
"github-markdown-css": "2.10.0",
|
||||
|
|
|
@ -1,20 +1,23 @@
|
|||
'use strict';
|
||||
// @flow
|
||||
|
||||
const _ = require('lodash');
|
||||
const Cookies = require('cookies');
|
||||
const createError = require('http-errors');
|
||||
import type {$Response, Router} from 'express';
|
||||
import type {$RequestExtend, $ResponseExtend, $NextFunctionVer, IAuth} from '../../../../types';
|
||||
import {ErrorCode} from '../../../lib/utils';
|
||||
|
||||
module.exports = function(route, auth) {
|
||||
route.get('/-/user/:org_couchdb_user', function(req, res, next) {
|
||||
import _ from 'lodash';
|
||||
import Cookies from 'cookies';
|
||||
|
||||
module.exports = function(route: Router, auth: IAuth) {
|
||||
route.get('/-/user/:org_couchdb_user', function(req: $RequestExtend, res: $Response, next: $NextFunctionVer) {
|
||||
res.status(200);
|
||||
next({
|
||||
ok: 'you are authenticated as "' + req.remote_user.name + '"',
|
||||
});
|
||||
});
|
||||
|
||||
route.put('/-/user/:org_couchdb_user/:_rev?/:revision?', function(req, res, next) {
|
||||
route.put('/-/user/:org_couchdb_user/:_rev?/:revision?', function(req: $RequestExtend, res: $Response, next: $NextFunctionVer) {
|
||||
let token = (req.body.name && req.body.password)
|
||||
? auth.aes_encrypt(req.body.name + ':' + req.body.password).toString('base64')
|
||||
? auth.aes_encrypt(new Buffer(req.body.name + ':' + req.body.password)).toString('base64')
|
||||
: undefined;
|
||||
if (_.isNil(req.remote_user.name) === false) {
|
||||
res.status(201);
|
||||
|
@ -30,7 +33,7 @@ module.exports = function(route, auth) {
|
|||
// With npm registering is the same as logging in,
|
||||
// and npm accepts only an 409 error.
|
||||
// So, changing status code here.
|
||||
return next( createError[err.status || 409](err.message) );
|
||||
return next( ErrorCode.getCode(err.status, err.message) || ErrorCode.get409(err.message));
|
||||
}
|
||||
return next(err);
|
||||
}
|
||||
|
@ -46,7 +49,7 @@ module.exports = function(route, auth) {
|
|||
}
|
||||
});
|
||||
|
||||
route.delete('/-/user/token/*', function(req, res, next) {
|
||||
route.delete('/-/user/token/*', function(req: $RequestExtend, res: $Response, next: $NextFunctionVer) {
|
||||
res.status(200);
|
||||
next({
|
||||
ok: 'Logged out',
|
||||
|
@ -56,7 +59,7 @@ module.exports = function(route, auth) {
|
|||
|
||||
// placeholder 'cause npm require to be authenticated to publish
|
||||
// we do not do any real authentication yet
|
||||
route.post('/_session', Cookies.express(), function(req, res, next) {
|
||||
route.post('/_session', Cookies.express(), function(req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer) {
|
||||
res.cookies.set('AuthSession', String(Math.random()), {
|
||||
// npmjs.org sets 10h expire
|
||||
expires: new Date(Date.now() + 10 * 60 * 60 * 1000),
|
||||
|
|
|
@ -1,5 +1,10 @@
|
|||
module.exports = function(route) {
|
||||
route.get('/whoami', function(req, res, next) {
|
||||
// @flow
|
||||
|
||||
import type {$Response, Router} from 'express';
|
||||
import type {$RequestExtend, $NextFunctionVer} from '../../../../types';
|
||||
|
||||
module.exports = function(route: Router) {
|
||||
route.get('/whoami', (req: $RequestExtend, res: $Response, next: $NextFunctionVer): void => {
|
||||
if (req.headers.referer === 'whoami') {
|
||||
next({username: req.remote_user.name});
|
||||
} else {
|
||||
|
@ -7,7 +12,7 @@ module.exports = function(route) {
|
|||
}
|
||||
});
|
||||
|
||||
route.get('/-/whoami', function(req, res, next) {
|
||||
route.get('/-/whoami', (req: $RequestExtend, res: $Response, next: $NextFunctionVer): mixed => {
|
||||
next({username: req.remote_user.name});
|
||||
});
|
||||
};
|
||||
|
|
|
@ -7,9 +7,8 @@ import {ErrorCode} from './utils';
|
|||
const Error = require('http-errors');
|
||||
|
||||
import type {Config, Logger, Callback} from '@verdaccio/types';
|
||||
import type {$Request, $Response, NextFunction} from 'express';
|
||||
|
||||
type $RequestExtend = $Request & {remote_user: any}
|
||||
import type {$Response, NextFunction} from 'express';
|
||||
import type {$RequestExtend} from '../../types';
|
||||
|
||||
const LoggerApi = require('./logger');
|
||||
/**
|
||||
|
@ -366,7 +365,7 @@ class Auth {
|
|||
/**
|
||||
* Encrypt a string.
|
||||
*/
|
||||
aes_encrypt(buf: Buffer) {
|
||||
aes_encrypt(buf: Buffer): Buffer {
|
||||
const c = Crypto.createCipher('aes192', this.secret);
|
||||
const b1 = c.update(buf);
|
||||
const b2 = c.final();
|
||||
|
|
|
@ -348,6 +348,9 @@ const ErrorCode = {
|
|||
get404: (customMessage?: string) => {
|
||||
return createError(404, customMessage || 'no such package available');
|
||||
},
|
||||
getCode: (statusCode: number, customMessage: string) => {
|
||||
return createError(statusCode, customMessage);
|
||||
},
|
||||
};
|
||||
|
||||
const parseConfigFile = (configPath: string) => YAML.safeLoad(fs.readFileSync(configPath, 'utf8'));
|
||||
|
|
|
@ -14,12 +14,15 @@ import type {
|
|||
IReadTarball,
|
||||
} from '@verdaccio/streams';
|
||||
import type {ILocalData} from '@verdaccio/local-storage';
|
||||
import type {NextFunction, $Request, $Response} from 'request';
|
||||
|
||||
export interface IAuth {
|
||||
config: Config;
|
||||
logger: Logger;
|
||||
secret: string;
|
||||
plugins: Array<any>;
|
||||
aes_encrypt(buf: Buffer): Buffer;
|
||||
add_user(user: string, password: string, cb: Callback): any;
|
||||
}
|
||||
|
||||
export interface IWebSearch {
|
||||
|
@ -102,3 +105,6 @@ export interface IStorage {
|
|||
search(startKey: string, options: any): IUploadTarball;
|
||||
}
|
||||
|
||||
export type $RequestExtend = $Request & {remote_user?: any}
|
||||
export type $ResponseExtend = $Response & {cookies?: any}
|
||||
export type $NextFunctionVer = NextFunction & mixed;
|
||||
|
|
BIN
yarn.lock
BIN
yarn.lock
Binary file not shown.
Loading…
Reference in a new issue