OSDN Git Service

ライブラリーを更新した
[webchat/WebChat.git] / chatServer.js
index 2b292ad..7cd3b4b 100644 (file)
@@ -24,15 +24,17 @@ $log_directory = "log";     //ログファイルを置くフォルダー
 $log_file_name = "logfile%d.txt";      //ログファイル名(%dはそのままにしておくこと)\r
 $splited_log_file_name = "logfile%d_%s.txt"    //分割後のファイル名(%dと%sはそのままにしておくこと)\r
 $pastlogfile_pattern = "logfile%d(_+.*)?\.txt";        //過去ログと判定する正規表現\r
-\r
+$secret = "5514EA2B-C9B2-4D65-8D81-1F33A180A0C2";\r
 /**\r
  * Module dependencies.\r
  */\r
 \r
 // Server\r
-var express = require('express');\r
+var express = require("express");\r
+\r
+var app = express();\r
 \r
-var app = module.exports = express.createServer();\r
+var http = require("http");\r
 \r
 var util = require("util");\r
 \r
@@ -40,7 +42,9 @@ var lazy = require("./lazy.js");
 \r
 var fs = require("fs");\r
 \r
-var parseCookie = require("connect").utils.parseCookie;\r
+var cookie = require("express/node_modules/cookie");\r
+\r
+var connectUtils = require("express/node_modules/connect/lib/utils");\r
 \r
 var RedisStore = require("connect-redis")(express);\r
 var sessionStore = new RedisStore({host:$redisHost,port:$redisPort,pass:$redisPassword});\r
@@ -58,10 +62,9 @@ app.configure(function(){
        app.set("view engine", "ejs");\r
        app.use(express.bodyParser());\r
        app.use(express.methodOverride());\r
-       app.use(express.cookieParser());\r
+       app.use(express.cookieParser($secret));\r
        app.use(express.session({\r
                store:sessionStore,\r
-               secret: "5514EA2B-C9B2-4D65-8D81-1F33A180A0C2",\r
                cookie: { httpOnly: false }\r
        }));\r
        app.use(app.router);\r
@@ -93,6 +96,14 @@ app.get("/chat", function(req, res){
        res.render("chat",{rno:room_number,token:auth_string});\r
 });\r
 \r
+app.all("/log/*",express.basicAuth(function (user, pass) {\r
+       return user === $username && pass === $password;\r
+}));\r
+\r
+app.get("/log/*",function (req, res) {\r
+       res.sendfile(__dirname + req.url);\r
+});\r
+\r
 app.all("/admin_chat",express.basicAuth(function (user, pass) {\r
        return user === $username && pass === $password;\r
 }));\r
@@ -180,14 +191,13 @@ function removeLog(files,callback)
        });\r
 }\r
 \r
-app.listen($port);\r
-console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);\r
+var server = http.createServer(app).listen($port);\r
 \r
 /*\r
  * サーバー部分\r
  */\r
 \r
-var io = require("socket.io").listen(app);\r
+var io = require("socket.io").listen(server);\r
 io.configure('production', function(){\r
   io.enable('browser client minification');  // minified されたクライアントファイルを送信する\r
   io.enable('browser client etag');          // バージョンによって etag によるキャッシングを有効にする\r
@@ -258,7 +268,7 @@ for(var i = 0; i < $max_room_number; i++)
 \r
 function createLogDirectory()\r
 {\r
-       path.exists($log_directory,function(exists){\r
+       fs.exists($log_directory,function(exists){\r
                if(exists == false)\r
                        fs.mkdirSync($log_directory);\r
        });\r
@@ -267,8 +277,8 @@ function createLogDirectory()
 function ParseAuthorization(handshakeData, callback)\r
 {\r
        if(handshakeData.headers.cookie) {\r
-               var cookie = handshakeData.headers.cookie;\r
-               var sessionID = parseCookie(cookie)["connect.sid"];\r
+               var signedCookie = cookie.parse(handshakeData.headers.cookie);\r
+               var sessionID = connectUtils.parseSignedCookies(signedCookie, $secret)["connect.sid"];\r
                sessionStore.get(sessionID, function (err, session) {\r
                        var result = null;\r
                        if (ipbanlist.IsBaned(handshakeData.address.address))\r
@@ -277,9 +287,11 @@ function ParseAuthorization(handshakeData, callback)
                                result = err;\r
                        else if(handshakeData.query.token != session.items.token)\r
                                result = "invaild token";\r
-                       if(typeof(session) != "undefined" && result != null)\r
+                       if(typeof(session) != "undefined" && result == null)\r
+                       {\r
                                handshakeData.admin = session.items.admin;\r
-                       sessionStore.destroy(sessionID);\r
+                               handshakeData.sessionID = sessionID;\r
+                       }\r
                        callback(result,result == null && !err);\r
                });\r
        } else {\r
@@ -297,6 +309,8 @@ function ParseDisconnect(socket,msg)
        socket.json.emit("send romcount",romcount);\r
        socket.json.broadcast.emit("send romcount",romcount);\r
 \r
+       sessionStore.destroy(socket.handshake.sessionID);\r
+\r
        console.log("disconnected");\r
 }\r
 \r
@@ -635,7 +649,7 @@ function RoomInfomationCollection()
        }\r
        function GetRoomList(callback){\r
                Clear();\r
-               path.exists($room_configure_file_name,function(exists){\r
+               fs.exists($room_configure_file_name,function(exists){\r
                        if(exists == false)\r
                        {\r
                                if(typeof(callback) == "function")\r
@@ -830,7 +844,7 @@ function IpBanCollecion()
        function GetIpBanList(callback)\r
        {\r
                collection = {};\r
-               path.exists($ip_ban_list_file_name,function(exists){\r
+               fs.exists($ip_ban_list_file_name,function(exists){\r
                        if(exists == false)\r
                        {\r
                                if(typeof(callback) == "function")\r