用nodejs做一个svn密码修改页面
linux上配置好svn服务后,管理修改密码还得去手工修改passwd这个文件,略麻烦,其实网上应该有配套的web管理修改界面程序。但我想自己用nodejs写一个,因为用node不用配置复杂的服务器。
弄这种基于事件模型的语言,一定要小心,整个过程可能不是线性的。
var http = require("http");
var fs = require('fs');
var url = require('url');
var query = require('querystring');
var PASSWD_FILE = "/home/svn/conf/passwd";
http.createServer(function(request, reponse) {
var params = url.parse(request.url);
var obj = query.parse(params.query);
var tm = new Date();
try {
console.log(tm.toLocaleString());
console.log(obj);
reponse.writeHead(200, {"Content-Type": "text/html"});
if(params.pathname == '/change') {
changePassword(obj.name.trim(), obj.password.trim(), obj.npassword.trim(), reponse);
} else {
fs.readFile("./main.html", "utf-8", function(err, data) {
reponse.write(data);
reponse.end();
});
}
} catch(err) {
console.log(err);
}
}).listen(8000);
function changePassword(name, password, npassword, reponse) {
var change = false;
fs.readFile(PASSWD_FILE, "utf-8", function(error, data) {
arr = data.split('\n');
for (var i = 0 ;i < arr.length; ++i) {
if(arr[i].indexOf("#") == -1 && arr[i].indexOf("[users]") == -1) {
ap=arr[i].split("=");
if(ap.length != 2) {
continue;
}
var account = ap[0].trim();
var passwd = ap[1].trim()
if(name == account && password == passwd && npassword.length >= 3) {
change = true;
arr[i] = "";
console.log("change account "+account + " password " + npassword);
arr[i] = account + "=" + npassword;
}
}
}
var outdata = "";
for (var i = 0; i < arr.length; i++) {
if(arr[i].replace(/(^s*)|(s*$)/g, "").length ==0) {
continue;
}
outdata += (arr[i] + '\n');
};
fs.writeFile(PASSWD_FILE, outdata ,"utf-8", function(error) {
if(error || change == false) {
fs.readFile("./error.html", "utf-8", function(err, data) {
reponse.write(data);
reponse.end();
});
} else {
fs.readFile("./success.html", "utf-8", function(err, data) {
reponse.write(data);
reponse.end();
});
}
});
});
}

启动脚本命令:nohup node main.js > node.log &
nohup & 启动程序并后台执行,不会使程序跟着控制台的死掉而死掉;> node.log把控制台的日志重定向到node.log中去。
用nodejs做一个svn密码修改页面的更多相关文章
- tkinter做一个简单的登陆页面
做一个简单的登陆页面 import tkinter wuya = tkinter.Tk() wuya.title("wuya") wuya.geometry("900x3 ...
- tkinter做一个简单的登陆页面(十六)
做一个简单的登陆页面 import tkinter wuya = tkinter.Tk() wuya.title("wuya") wuya.geometry("900x3 ...
- 用Nodejs做一个简单的小爬虫
Nodejs将JavaScript语言带到了服务器端,作为js主力用户的前端们,因此获得了服务器端的开发能力,但除了用express搭建一个博客外,还有什么好玩的项目可以做呢?不如就做一个网络爬虫吧. ...
- [Js插件]使用JqueryUI的弹出框做一个“炫”的登录页面
引言 查看项目代码的时候,发现项目中用到JqueryUi的弹出框,可拖拽,可设置模式对话框,就想着使用它弄一个登录页面. 弹出框 在Jquery Ui官网可定制下载弹出框,下载和弹出框下载相关的js文 ...
- 用区块链技术做一个 不可被修改的 恋爱记录 app 我叫<<誓言>>
区块链技术 具有不可篡改,去中心化,共识机制等优秀的特性, 都用来做 代币钱包什么的.我觉得完全是浪费. 我的想法是用哪个区块做一个dapp 1 里面写着每个人的恋爱记录,爱情宣言. 2 一个人一生 ...
- 利用Django和装饰器做一个简单的修改密码页面
view视图代码: from django.shortcuts import render,redirect from django.http import HttpResponse from PIL ...
- svn与git操作对比 (未来有空做一个 svn与git实战对比 )
svn是集中式的,git是分布式的,但是我们日常使用的都是按照集中式唯一服务器仓库的方式来去做的,最终我们的代码都要提交到一个唯一仓库中. 他们最大的区别是本地工作拷贝的工作方式不同, 一.svn本地 ...
- 用C# Winform做一个文件名批量修改器
我是一名QA,我提bug以后有个习惯,就是将bug的jira地址保存为一个链接存在本地,如下: 每天都要手动的把日期“[XX.XX]”添加在里面,这个反复修改文件名的过程是比较枯燥的,于是我决定写一个 ...
- vue-cli3和element做一个简单的登陆页面
1.先用vue-cli3创建一个项目 2.安装element模块 全局安装 npm i element-ui -S 3在main.js引入模块 import ElementUI from 'eleme ...
随机推荐
- ActiveMQ消息队列的搭建和使用
一.安装ActiveMQ(部署在centos7) 1.ActiveMQ官网下载地址:http://activemq.apache.org/download.html 2.解压安装包:tar xvzf ...
- 接口登录存在动态token
Jmeter接口登录时获取到的参数token一直在变的问题,导致运行时总是报错 解决方法如下: 1.新建一个GET的HTTP请求 2.添加正则表达式提取器 记得name="_token&qu ...
- yalinqo 的使用...
from($this->getInfo())->where('$v["is_enable"]==1')->where(function (&$v) use ...
- clustalX2使用以及相关的问题
Clustalx的操作 第一步:输入序列文件. 第二步:设定比对的一些参数. 参数设定窗口. 第三步:开始序列比对. 第四步:比对完成,选择保存结果文件的格式 相关问题 CLUSTALX-是CLUST ...
- Services版本tomcat 内存和perm 设置
当在tomcat的webapps文件夹中部署需要大量资源的war包时,启动tomcat,war包将不能被成功部署. tomcat安装有services版安装和开发版安装. 本经验将介绍如何设置两种版本 ...
- 移动距离--dfs-蓝桥杯
题目描述: X星球居民小区的楼房全是一样的,并且按矩阵样式排列.其楼房的编号为1,2,3... 当排满一行时,从下一行相邻的楼往反方向排号. 比如:当小区排号宽度为6时,开始情形如下: 1 2 ...
- PIE SDK打开HDF、NC数据
1. 功能简介 HDF 是美国国家高级计算应用中心(National Center for Supercomputing Application)为了满足各种领域研究需求而研制的一种能高效存储和分发科 ...
- 个人笔记——Android网络技术
一.WebView 的用法 Android 提供WebView 的用法,可以在自己的应用程序里嵌入一个浏览器 webView.getSettings().setJavaScriptEnabled(tr ...
- java语言编程使用正则表达式来实现提取(美团 3-5年经验 15-30k 北京 hadoop高级工程)中的3-5和15-30
不多说,直接上干货! 如有这样的一条数据进来: 美团 3-5年经验 15-30k 北京 hadoop高级工程 //正则表达式提取工资值,因为15-30k后面有k,3-5年经验,不干净 public ...
- unity的技术博客
技术博客 http://www.cnblogs.com/wangergo/