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. yalinqo 的使用...

    from($this->getInfo())->where('$v["is_enable"]==1')->where(function (&$v) use ...

  2. rest-assured之静态导入及简单使用实例

    一.静态导入 为了有效的使用rest-assured,官网推荐从下列class中静态导入方法: io.restassured.RestAssured.* io.restassured.matcher. ...

  3. JAVA数据结构--选择排序

    选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理如下.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然 ...

  4. Convert DataTable to List<T> where Class of List is Dynamic

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Da ...

  5. Python-删除列表中重复元素的方法

    1.set()方法 x = [1,2,3,4,5,1] y = list(set(x)) print(y) ``` [1, 2, 3, 4, 5] ``` 2. x = ['b','c','d','b ...

  6. 线性递推规律BM杜教

    #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> # ...

  7. XMAL基础

    XMAL基础(WPF编程宝典) XAML基础规则 XAML文档中的每个元素都映射为.Net类的一个实例.元素名称也完全对应于类名.例如:元素<Button>指示WPF创建Button对象 ...

  8. c# IList.ToList()后更改元素值会不会影响原列表的值

    class ListTest { public static void Test() { #region 值类型 var oListVal = new List<int>() { ,,, ...

  9. Oracle子分区(sub partition)操作

    要重新定义大量分区表. 首先看 SQL Reference 大致了解了 Oracle 的分区修改操作.Alter table 语句的alter_table_partitioning 子句可以分为以下几 ...

  10. 基于pydpier爬取1药网(转载)

    1.商品爬取 #!/usr/bin/env python # -*- encoding: utf-8 -*- # Created on 2019-02-02 08:59:40 # Project: o ...