$password_setted_message = "パスワードを設定しました"; //パスワードが設定されたときに表示されるメッセージ\r
$password_resetted_message = "パスワードをリセットしました"; //パスワードが再設定されたときに表示されるメッセージ\r
$failed_set_password_message = "パスワードの設定に失敗しました"; //パスワードが再設定されたときに表示されるメッセージ\r
-$free_password1 = "最初に入室する人が自由にパスワードを設定できます"; //自由パスワードメッセージ1\r
-$free_password2 = "この部屋は使用されています。パスワードを入力してください"; //自由パスワードメッセージ2\r
-$fixed_password = "この部屋にはパスワードが設定されています"; //固定パスワードルーム\r
$ip_ban_list_file_name = "ipbanlist.txt"; //アクセスを禁止するIPが記録されているファイル\r
+$room_configure_file_name = "roomlist.txt"; //ルームの設定が記録されているファイル\r
$port = process.env.port || 3000; //ポート\r
$username = "admin"; //管理者用のページにアクセスできるユーザ名\r
$password = "admin"; //管理者用のページにアクセスするのに必要なパスワード\r
$splited_log_file_name = "logfile%d_%s.txt" //分割後のファイル名(%dと%sはそのままにしておくこと)\r
$pastlogfile_pattern = "logfile%d(_+.*)?\.txt"; //過去ログと判定する正規表現\r
$logfile_pattern = "logfile[0-9]+(_*.*)?\.txt" //過去ログと判定する正規表現\r
-//パスワードを自由に設定できる部屋のリスト\r
-// rno 設定したい部屋番号\r
-// password パスワードを設定する。nullにすると利用者がパスワードの設定をすることができる\r
-//記述例:\r
-// new RoomInfomationCollection(\r
-// {rno:"1",password:"test"},\r
-// {rno:"2",password:null}\r
-// )\r
-$rooms = new RoomInfomationCollection(\r
- {rno:"1",password:"test"},\r
- {rno:"2",password:null}\r
-);\r
\r
/**\r
* Module dependencies.\r
var room_number = 0;\r
if(typeof(req.query.rno) != "undefined")\r
room_number = req.query.rno;\r
- var msg = "";\r
- if($rooms.IsFixedPassword(room_number))\r
- msg = $fixed_password;\r
- else if($rooms.IsContains(room_number))\r
- msg = $free_password2;\r
- if($rooms.IsFirstAuth(room_number))\r
- msg = $free_password1;\r
- res.render("chat",{rno:room_number,token:auth_string,message:msg});\r
+ res.render("chat",{rno:room_number,token:auth_string});\r
});\r
\r
app.all("/log/" + $logfile_pattern,express.basicAuth(function (user, pass) {\r
}\r
if(typeof(req.body.updateroom) != "undefined")\r
{\r
- CreateRoomsFromString(req.body.newroomlist);\r
- renderAdmin(req,res);\r
+ $rooms.Update(req.body.newroomlist,function(){\r
+ renderAdmin(req,res);\r
+ });\r
}\r
});\r
\r
var clients = new Array();\r
\r
var ipbanlist = new IpBanCollecion();\r
+var $rooms = new RoomInfomationCollection();\r
\r
createLogDirectory();\r
\r
.authorization(ParseAuthorization)\r
.on("connection", function (socket) {\r
console.log("connected from %s",GetClientIPAdress(socket));\r
- socket.json.emit("send roomlist",$rooms.GetKeys());\r
+\r
+ var rno = GetRoomNumberFromName(socket.namespace.name);\r
+ var roomconfig = {};\r
+ if($rooms.IsFixedPassword(rno))\r
+ roomconfig.type = 2;\r
+ else if($rooms.IsContains(rno))\r
+ roomconfig.type = 1;\r
+ else\r
+ roomconfig.type = 0;\r
+ roomconfig.IsOwned = !$rooms.IsFirstAuth(rno);\r
+ socket.json.emit("send roominfo",roomconfig);\r
+\r
socket.on("get pastLogList", function (msg) {\r
ParseGetPastLogList(socket,msg);\r
});\r
function RoomInfomationCollection()\r
{\r
var collection = {};\r
- this.Clear = function(){\r
- collection = {};\r
- };\r
- this.Add = function(rno,pass){\r
- collection[rno] = {time : null,\r
- password : pass,\r
- owner : null,\r
- authed_list : {}};\r
- if(pass != null)\r
- collection[rno].owner = $system_name;\r
- };\r
this.Reset = function(rno,owner){\r
var date = new Date();\r
var time = date.getTime();\r
this.IsAuthed = function(rno,name){\r
if(!this.IsContains(rno))\r
return false;\r
- console.log(util.inspect(collection[rno].authed_list));\r
return name == collection[rno].owner ||\r
name in collection[rno].authed_list;\r
};\r
}\r
return retval;\r
}\r
-\r
- for(var i=0; i<arguments.length; i++)\r
- {\r
- this.Add(arguments[i].rno,arguments[i].password);\r
- } \r
-}\r
-\r
-function CreateRoomsFromString(str)\r
-{\r
- $rooms.Clear();\r
- var lines = str.split("\r\n");\r
- for(var i in lines)\r
- {\r
- var token = lines[i].split(":");\r
- console.log(util.inspect(token));\r
- if(token.length == 1)\r
- {\r
- $rooms.Add(token[0],null);\r
- }\r
- else if(token.length == 2)\r
- {\r
- var rno = token[0];\r
- var pass = token[1];\r
- if(pass == "")\r
- pass = null;\r
- $rooms.Add(rno, pass);\r
- }\r
+ this.Update = function(text,callfunc){\r
+ async.waterfall([\r
+ function(callback){\r
+ fs.open($room_configure_file_name,"w",callback);\r
+ },\r
+ function(fd,callback){\r
+ var buf = new Buffer(text);\r
+ fs.write(fd,buf,0,Buffer.byteLength(text),null,function(){\r
+ callback(null,fd);\r
+ });\r
+ },\r
+ function(fd,callback){\r
+ fs.close(fd,function(){\r
+ GetRoomList(callfunc);\r
+ });\r
+ }\r
+ ]);\r
+ }\r
+ function GetRoomList(callback){\r
+ Clear();\r
+ path.exists($room_configure_file_name,function(exists){\r
+ if(exists == false)\r
+ {\r
+ if(typeof(callback) == "function")\r
+ callback();\r
+ return;\r
+ }\r
+ var stream = fs.createReadStream($room_configure_file_name);\r
+ new lazy(stream)\r
+ .lines\r
+ .forEach(function(line){\r
+ var token = line.toString().replace(/(\r|\n|\r\n)/gm, "").split(":");\r
+ if(token.length == 1)\r
+ {\r
+ Add(token[0],null);\r
+ }\r
+ else if(token.length == 2)\r
+ {\r
+ var rno = token[0];\r
+ var pass = token[1];\r
+ if(pass == "")\r
+ pass = null;\r
+ Add(rno, pass);\r
+ }\r
+ })\r
+ .join(function(){\r
+ if(typeof(callback) == "function")\r
+ callback();\r
+ });\r
+ });\r
}\r
+ function Clear(){\r
+ collection = {};\r
+ };\r
+ function Add(rno,pass){\r
+ collection[rno] = {time : null,\r
+ password : pass,\r
+ owner : null,\r
+ authed_list : {}};\r
+ if(pass != null)\r
+ collection[rno].owner = $system_name;\r
+ };\r
+\r
+ GetRoomList();\r
}\r
\r
//IPBANクラス\r