用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 ...
随机推荐
- js 任意元素解绑任意事件的兼容代码
hmtl代码: <input type="button" value="按钮" id="btn"/> <input typ ...
- Hadoop Hive概念学习系列之什么是Hive?
参考 <Hadoop大数据分析与挖掘实战>的在线电子书阅读 http://yuedu.baidu.com/ebook/d128cf8e33687e21 ...
- 理解Javascript_02_执行上下文02
上一篇我们讲到在全局环境下的代码段中,执行上下文环境中如何处理数据: 变量.函数表达式——变量声明,默认赋值为undefined: this——赋值: 函数声明——赋值: 这篇文章讲关于函数执行上下文 ...
- LeetCode记录之26——Remove Duplicates from Sorted Array
国外的表达思维跟咱们有很大差别,做这道题的时候很明显.简单说本题就是让你把有序数组中的重复项给换成正常有序的.比如 1 2 2 3换成 1 2 3 3,根本不需要考虑重复的怎么办,怎么删除重复项等等. ...
- npm 安装命令中的参数 --save-dev
为项目安装模块的npm命令一般是—— npm i module-name 执行完毕后,需要手动把模块名称连同版本号一同的添加到模块配置文件package.json中的依赖里(dependencies) ...
- Action执行时间过滤器
public class AccessStatisticsAttribute : ActionFilterAttribute { /// <summary> /// log4net 日志 ...
- B/S 与 C/S 模型区别
C/S又称Client/Server或客户/服务器模式.服务器通常采用高性能的PC.工作站或小型机,并采用大型数据库系统,如Oracle.Sybase.Informix或 SQL Server.客户端 ...
- phantomjs的和谷歌浏览器的简单使用
一.phantomjs的简单使用 ''' 什么是phantomJs:无界面的浏览器 ''' from selenium import webdriver from time import sleep ...
- 论文阅读 | Polygon-RNN:Annotating Object Instances with a Polygon-RNN
论文地址:https://arxiv.org/abs/1704.05548 项目地址:http://www.cs.toronto.edu/polyrnn 概述 Polygon-RNN是一篇收录于CVP ...
- 踩坑--springboot打war包
springboot需要jdk1.8+tomcat8.0 第一步:从IDEA中通过maven install将项目打成war包 第二步:将war包放在tomcat的webApp目录下,启动tomcat ...