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密码修改页面的更多相关文章

  1. tkinter做一个简单的登陆页面

    做一个简单的登陆页面 import tkinter wuya = tkinter.Tk() wuya.title("wuya") wuya.geometry("900x3 ...

  2. tkinter做一个简单的登陆页面(十六)

    做一个简单的登陆页面 import tkinter wuya = tkinter.Tk() wuya.title("wuya") wuya.geometry("900x3 ...

  3. 用Nodejs做一个简单的小爬虫

    Nodejs将JavaScript语言带到了服务器端,作为js主力用户的前端们,因此获得了服务器端的开发能力,但除了用express搭建一个博客外,还有什么好玩的项目可以做呢?不如就做一个网络爬虫吧. ...

  4. [Js插件]使用JqueryUI的弹出框做一个“炫”的登录页面

    引言 查看项目代码的时候,发现项目中用到JqueryUi的弹出框,可拖拽,可设置模式对话框,就想着使用它弄一个登录页面. 弹出框 在Jquery Ui官网可定制下载弹出框,下载和弹出框下载相关的js文 ...

  5. 用区块链技术做一个 不可被修改的 恋爱记录 app 我叫<<誓言>>

    区块链技术 具有不可篡改,去中心化,共识机制等优秀的特性, 都用来做 代币钱包什么的.我觉得完全是浪费. 我的想法是用哪个区块做一个dapp 1 里面写着每个人的恋爱记录,爱情宣言. 2 一个人一生 ...

  6. 利用Django和装饰器做一个简单的修改密码页面

    view视图代码: from django.shortcuts import render,redirect from django.http import HttpResponse from PIL ...

  7. svn与git操作对比 (未来有空做一个 svn与git实战对比 )

    svn是集中式的,git是分布式的,但是我们日常使用的都是按照集中式唯一服务器仓库的方式来去做的,最终我们的代码都要提交到一个唯一仓库中. 他们最大的区别是本地工作拷贝的工作方式不同, 一.svn本地 ...

  8. 用C# Winform做一个文件名批量修改器

    我是一名QA,我提bug以后有个习惯,就是将bug的jira地址保存为一个链接存在本地,如下: 每天都要手动的把日期“[XX.XX]”添加在里面,这个反复修改文件名的过程是比较枯燥的,于是我决定写一个 ...

  9. vue-cli3和element做一个简单的登陆页面

    1.先用vue-cli3创建一个项目 2.安装element模块 全局安装 npm i element-ui -S 3在main.js引入模块 import ElementUI from 'eleme ...

随机推荐

  1. sqlserver 临时表,多用户同时访问冲突吗?

      当然不会冲突,一个井号的临时表(本地临时表),在数据库中物理表名并非你看到的,而是系统会为你的临时表生成一个唯一的表名,所以其它用户使用和建同样的表不会发生冲突.

  2. TX1 文字界面启动与root用户自动登录设置

    设置默认文字启动界面 更改/boot/extlinux/extlinux.conf文件,在最后一行的末尾添加 text. 设置自动登录 在/etc/init/tty1.conf文件末尾添加: exec ...

  3. flask-login

    创建扩展对象实例 from flask_login import LoginManager login_manager = LoginManager() login_manager.login_vie ...

  4. c# post get

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  5. WIN7中 HttpListener 拒绝访问 异常解决 C#

      WIN7中 HttpListener 拒绝访问 异常解决 C# http://www.cnblogs.com/cmdszh/archive/2012/08/16/httplistener.html ...

  6. npm的介绍

    npm使JavaScript开发人员能够轻松地共享和重用代码,并且可以轻松更新你正在共享的代码. 如果你一直在使用JavaScript,你可能已经听说过npm.npm使JavaScript开发人员能够 ...

  7. LightOJ - 1140 统计0的数位 数位DP

    注意以下几点: 搜索维度非约束条件的都要记录,否则大概率出错,比如_0 st参数传递和_0的互相影响要分辨清楚 num==-1就要返回0而不是1 #include<iostream> #i ...

  8. POJ - 3696 同余

    给定\(L\),求最小的\(x\)满足$ L|8\frac{10^x-1}{9} $ /*H E A D*/ inline ll gcd(ll a,ll b){return b?gcd(b,a%b): ...

  9. c# 多数值区间判断是否有重叠

    /// <summary> /// 金额区间判断帮助类 /// </summary> public static class DecimalRangeHelper { /// ...

  10. Python爬虫常用之PyQuery

    PyQuery是解析页面常用的库.是python对jquery的封装.下面是一份解析基本页面的代码.后期用到复杂或者实用的方式再增加. from pyquery import PyQuery as p ...