【cnpm】cnpm私有部署改造黑名单梳理
前言
- 由于我司私服需要对某些包删除使用,但又不想误删,所以要整个黑名单,在该名单上的包无法下载和搜索。
- 大概看了下,只要维护个黑名单表即可,另外再改点逻辑,对表写个添加,删除,查询接口即可。
- 首先梳理下路由,会走那些控制器,再建个表,写入增删改查。
路由梳理
- 下载包实际上是先查询,查到后走json的tar地址,所以在搜索时先查黑名单,黑名单里的直接返回404
页面搜索
controllers:web:package:search
页面详情
controllers:web:package:show
下载(查询地址后)
controllers:registry:download
controllers:registry:package:save
查询(下载前)
controllers:registry:package:list
建表
- 建表在docs的db.sql里
- 直接再复制个表:
CREATE TABLE IF NOT EXISTS `black_list` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'primary key',`gmt_create` datetime NOT NULL COMMENT 'create time',`gmt_modified` datetime NOT NULL COMMENT 'modified time',`name` varchar(214) NOT NULL COMMENT 'pkg name',PRIMARY KEY (`id`),UNIQUE KEY `uk_name` (`name`),KEY `idx_gmt_modified` (`gmt_modified`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='black list info';
- models/index.js中载入model
BlackList: load("black_list"),
- 新建black_list
"use strict";module.exports = function (sequelize, DataTypes) {return sequelize.define("BlackList",{name: {type: DataTypes.STRING(214),allowNull: false,comment: "module name",},},{tableName: "black_list",comment: "module black list",indexes: [{unique: true,fields: ["name"],},],classMethods: {},});
};
- controller中添加操作:
"use strict";var blackListService = require("../../../services/black_list");exports.addBlackList = function* () {var name = this.request.body.name;const res = yield blackListService.addBlackList(name);this.body = res;
};
exports.getBlackList = function* () {var name = this.request.body.name;const res = yield blackListService.getBlackList(name);if (!res){this.body = {err: "not found",};} else {this.body = res;}
};
exports.deleteBlackList = function* () {var name = this.request.body.name;const res = yield blackListService.deleteBlackList(name);if (res === 1) {this.body = {success: true,};} else {this.body = {success: false,};}
};
- services中添加操作:
"use strict";var models = require("../models");
var blacklist = models.BlackList;exports.getBlackList = function* (name) {var rows = yield blacklist.find({where: {name: name,},});return rows;
};exports.addBlackList = function* (name) {var item = blacklist.build({name: name,});yield item.save();return item;
};
exports.deleteBlackList = function* (name) {var item = yield blacklist.destroy({where: {name: name,},});return item;
};
- 添加路由
app.post("/blacklist/addpkg", blackList.addBlackList);app.post("/blacklist/deletpkg", blackList.deleteBlackList);app.post("/blacklist/getpkg", blackList.getBlackList);
- 此时增删查已经可以了,下面黑名单的直接不给下载就在list查询处返回404即可:
const blackres = yield blackListService.getBlackList(name);if (blackres) {this.status = 404;return;}
- 在搜索时搜到不影响,在详情页面web/package/show增加废弃提示:
const blackres = yield blackListService.getBlackList(pkg.name);if (blackres) {pkg.name = pkg.name + "-@已废弃";}
- 改造就基本完成了。
- 另外有人提意改写unpublish命令,顺便写一下。
- unpublish在controllers/registry/package/remove.js里加入
var blackListService = require("../../../services/black_list");...yield blackListService.addBlackList(name);debug("add blacklist");return yield next;
【cnpm】cnpm私有部署改造黑名单梳理相关推荐
- 私有部署、重构企业软件,第四范式发布大模型“式说”
大模型领域再添重要一员! 4月26日,第四范式首次向公众展示其大模型产品「式说3.0」,并首次提出AIGS战略(AI-Generated Software):以生成式AI重构企业软件.式说将定位为基于 ...
- Gitea:私有部署Git托管服务(私有Git仓)
目录 git和Gitea简介 服务端部署 部署环境概览 创建操作系统用户 下载并解压 修改初始配置 git和Gitea简介 git 是一个开源的分布式版本控制系统,用途类使用SVN的版本控制和多人协同 ...
- 推荐一个开源的任务管理工具DooTask(支持私有部署)
原文出处:https://www.yundashi168.com/382.html 今天老逛推荐一个开源的任务管理工具DooTask,该工具会提供各类文档协作功能.在线思维导图.在线流程图.项目管理. ...
- 从私有云到云的私有部署,重新定义后云时代的企业IT
自从2006年AWS推出第一代公有云以来,经过12年的发展,到2018年开始进入后云时代.所谓后云时代,就是以公有云为代表的云技术堆栈已经成熟,技术架构逐渐达成产业共识,市场形成几大技术厂商主导市场的 ...
- 云运维管家服务器,行云管家云管平台私有部署标准版安装与体验
行云管家云管平台 作为业界领先的多云管理平台,行云管家提供针对多家云厂商.多种云资源的一站式管理解决方案,帮助客户:易上云.用好云.管好云 行云管家内置堡垒机模块,从功能上来说,它是传统堡垒机的功能超 ...
- 动漫APP软件开发源码私有部署
动漫APP开发,动漫软件开发源码私有部署.伴随着动漫内容的不断完善,一些具备戏剧化.剧院化的动漫作品一样获得了众多女士用户的亲睐.那么假如说那样的一种方式深受销售市场关注,也会促使动漫APP软件开发更 ...
- 如何搭建私有部署企业网盘
目前市面上企业网盘有很多,但是大多价格较高,在这里我推荐一款最具性价比的悦库网盘搭建方式. 首先去悦库网盘官网,找到网盘下载页面,既然是私有部署,肯定要有服务端和客户端,悦库网盘的服务端同时支持Win ...
- Wiznote为知笔记私有部署(docker)删除多余用户账号.md
删除思路 由于私有部署的为知笔记管理后台没有删除用户选项,可找到mysql数据库,登录后找到对应的库.表.字段来删除用户. 获取数据库登录密码 首先进入wiznote的docker容器终端命令模式,c ...
- 一款免费、可私有部署的企业网盘
私有化部署.数据防泄密.信息共享.文件备份.移动办公.存储安全 产品背景 1.资料分散.文件汇总不方便,缺乏统一管理平台. 2.文件丢失风险高,被竞争对手窃取,人员流动性大造成文件流失,重要文件数据易 ...
最新文章
- 基于Python——实现远程下载sftp文件(只下载.zip文件)
- windows和linux-JDK环境变量设置
- 【数据结构与算法】之深入解析“股票的最大利润”的求解思路与算法示例
- [html] 页面上如何显示特殊字符?
- python 3.9特性,开发者应该知道的Python 3.9新特性
- IOS的UIPickerView 和UIDatePicker
- Javascript 中的变量作用域问题
- 小熊派开发板移植emwin_小熊派开发实践丨小熊派+合宙Cat.1接入云服务器
- centos镜像 from_Docker 基于 CentOS 基础镜像开发环境的搭建与部署
- 【码云周刊第 8 期】面试之前,或许该高效率地学点干货了!
- 中国金融出版社出版的2016版《综合》
- 最小的浏览器-橘子浏览器才1M大小
- TeeChart Pro VCL,提供高性能图表
- Linux之Python代码打包工具Nuitka使用说明
- 轻量级目标检测算法整理
- qml 中英文虚拟键盘
- 云开发电商小程序实战教程-篇首语
- 资源收藏:扁平化风格的图标
- micropython移植stm32f746_STM32L476和STM32F746的外部Flash复制文件速度对比
- 币圈的8大女神都是谁?-千氪