module.exports = {\r
enable_profile : true, //プロファイル機能を使用するなら真。そうでないなら、偽\r
+\r
port : process.env.port || 3000, //ポート\r
+\r
redisHost : "localhost", //redisサーバのアドレス\r
redisPort : 6379, //redisサーバのポート\r
redisPassword : "", //redisサーバのパスワード\r
+\r
db_user : "user", //MySQLサーバーのユーザー名\r
db_password : "user", //MySQLサーバーのパスワード\r
db_host : "localhost", //MySQLサーバーのアドレス\r
db_port : 3306, //MySQLサーバーのポート\r
db_limit : 50, //一度に表示する件数\r
+\r
username : "admin", //管理者用のページにアクセスできるユーザ名\r
password : "admin", //管理者用のページにアクセスするのに必要なパスワード\r
+\r
max_room_number : 3, //最大ルーム数\r
+\r
showip : false, //IPアドレスを表示するなら真。そうでないなら、偽\r
+\r
+ //詳細画面に表示するフィールド名と表示名の組み合わせ\r
+ //詳細画面で表示される順番はこの変数によって決まります\r
+ //連想配列の名称と数はinputtype、visiblefield、init.sqlと一致させること\r
+ alias : {\r
+ mailto : "メールアドレス",\r
+ age : "年齢",\r
+ height : "身長",\r
+ weight : "体重",\r
+ gender : "性別",\r
+ race : "種族",\r
+ etc : "備考",\r
+ },\r
+\r
+ //フィールドタイプ\r
+ //text:一行入力\r
+ //textarea:複数行入力を表す\r
+ inputtype : {\r
+ age : "text",\r
+ height : "text",\r
+ weight : "text",\r
+ gender : "text",\r
+ race : "text",\r
+ mailto : "text",\r
+ etc : "textarea",\r
+ },\r
+\r
+ //詳細画面に表示するなら真。そうでないなら偽\r
+ visiblefield : {\r
+ age : true,\r
+ height : true,\r
+ weight : true,\r
+ gender : true,\r
+ race : true,\r
+ mailto : false,\r
+ etc : true,\r
+ }\r
};\r
+\r
use webchat;
DROP TABLE IF EXISTS list;
CREATE TABLE list(
+# does not edit
+# from
name_hash INT UNSIGNED NOT NULL,
name VARCHAR(64) NOT NULL,
- age SMALLINT UNSIGNED DEFAULT 0,
lastmodified DATETIME,
+ password VARCHAR(32),
+# to
+ mailto VARCHAR(255),
+ age SMALLINT UNSIGNED DEFAULT 0,
height SMALLINT UNSIGNED DEFAULT 0,
weight SMALLINT UNSIGNED DEFAULT 0,
gender VARCHAR(8),
race VARCHAR(64),
- password VARCHAR(32),
etc TEXT,
+# does not edit
+# from
PRIMARY KEY(name_hash));
+# to
DROP TABLE IF EXISTS ipbanlist;
CREATE TABLE ipbanlist(ip VARCHAR(64) NOT NULL,
RenderMessage(res,resource.notfound_name,req.session.items);\r
else{\r
res.setHeader("X-FRAME-OPTIONS","DENY");\r
- res.render("profile/detail",{list:result,token:req.session._csrf,admin:req.session.items.admin});\r
+ res.render("profile/detail",{list:result,alias:config.alias,visiblefield:config.visiblefield,token:req.session._csrf,admin:req.session.items.admin});\r
}\r
});\r
}\r
RenderMessage(res,err,req.session.items);\r
}else if(result != null){\r
res.setHeader("X-FRAME-OPTIONS","DENY");\r
- res.render("profile/edit",{list:result,token:req.session._csrf});\r
+ res.render("profile/edit",{list:result,token:req.session._csrf,alias:config.alias,inputtype:config.inputtype});\r
}else{\r
RenderMessage(res,resource.unmatch_password,req.session.items);\r
}\r
req.session.items = new security.SessionInfomation(false);\r
\r
res.setHeader("X-FRAME-OPTIONS","DENY");\r
- res.render("profile/registor",{token:req.session._csrf});\r
+ res.render("profile/registor",{token:req.session._csrf,alias:config.alias,inputtype:config.inputtype});\r
}\r
\r
function RenderMessage(res,msg,info)\r
pool.query("SELECT * FROM list WHERE name_hash = ? and name = ?",[murmurhash.v3(name),name],cb);\r
}\r
this.AddAsync = function(data,cb){\r
- var item = {\r
- name_hash:murmurhash.v3(data.name),\r
- name:data.name,\r
- age:data.age,\r
- gender:data.gender,\r
- height:data.height,\r
- weight:data.weight,\r
- race:data.race,\r
- password:md5_hex(data.password),\r
- lastmodified:new Date(),\r
- etc:data.etc\r
- };\r
+ var item = GetItem(data);\r
pool.query("INSERT INTO list SET ?",[item],cb);\r
}\r
this.UpdatAsync = function(name,data,newpassword,cb){\r
- var item = {\r
- name_hash:murmurhash.v3(data.name),\r
- name:data.name,\r
- age:data.age,\r
- gender:data.gender,\r
- height:data.height,\r
- weight:data.weight,\r
- race:data.race,\r
- lastmodified:new Date(),\r
- etc:data.etc\r
- };\r
+ var item = GetItem(data);\r
if(newpassword != null)\r
item.password = md5_hex(newpassword);\r
pool.query("UPDATE list SET ? WHERE name = ?",[item,name],cb);\r
md5.update(src, 'utf8');\r
return md5.digest('hex');\r
}\r
+\r
+ function GetItem(data)\r
+ {\r
+ var item = {\r
+ name_hash:murmurhash.v3(data.name),\r
+ name:data.name,\r
+ password:md5_hex(data.password),\r
+ lastmodified:new Date(),\r
+ };\r
+ for(var key in config.alias)\r
+ item[key] = data[key];\r
+ return item;\r
+ }\r
}\r
\r
<h1>詳細画面</h1>\r
<div id="content">\r
<h2><%= list[0].name %></h2>\r
- <table>\r
- <tr>\r
- <td>年齢</td>\r
- <td><%= list[0].age %></td>\r
- </tr>\r
- <tr>\r
- <td>性別</td>\r
- <td><%= list[0].gender %></td>\r
- </tr>\r
- <tr>\r
- <td>身長</td>\r
- <td><%= list[0].height %></td>\r
- </tr>\r
- <tr>\r
- <td>体重</td>\r
- <td><%= list[0].weight %></td>\r
- </tr>\r
- <tr>\r
- <td>種族</td>\r
- <td><%= list[0].race %></td>\r
- </tr>\r
- </table>\r
- <div id="etc">\r
- <h3>詳細</h3>\r
- <p><%= list[0].etc %></p>\r
- </div>\r
+ <% for(var key in alias) {%>\r
+ <% if(typeof alias[key] != "undefined" && visiblefield[key]) {%>\r
+ <h3><%= alias[key] %></h3>\r
+ <p><%- list[0][key] %></p>\r
+ <% } %>\r
+ <% } %>\r
<form action="/profile/detail" method="POST">\r
<input type="hidden" name="_csrf" value="<%= token %>"></input>\r
<input type="hidden" value="<%= list[0].name %>" name="name"/>\r
<td><input type="text" value="<%= list[0].name %>" name="name"/></td>\r
</tr>\r
<tr>\r
- <td>性別</td>\r
- <td><input type="text" value="<%=list[0].gender %>" name="gender"/></td>\r
- </tr>\r
- <tr>\r
<td>パスワード</td>\r
<td>\r
<input type="text" value="" name="password"/><br/>\r
<input type="checkbox" name="updatepw" value="true">パスワードを更新する</input>\r
</td>\r
</tr>\r
+ <% for(var key in alias) {%>\r
<tr>\r
- <td>年齢</td>\r
- <td><input type="text" value="<%= list[0].age %>" name="age"/></td>\r
- </tr>\r
- <tr>\r
- <td>身長</td>\r
- <td><input type="text" value="<%= list[0].height %>" name="height"/></td>\r
- </tr>\r
- <tr>\r
- <td>体重</td>\r
- <td><input type="text" value="<%= list[0].weight %>" name="weight"/></td>\r
- </tr>\r
- <tr>\r
- <td>種族</td>\r
- <td><input type="text" value="<%= list[0].race %>" name="race"/></td>\r
- </tr>\r
- <tr>\r
- <td>備考</td>\r
- <td><textarea name="etc" rows="4" cols="50"><%= list[0].etc %></textarea></td>\r
+ <% if(typeof alias[key] != "undefined") {%>\r
+ <td><%= alias[key] %></td>\r
+ <td>\r
+ <% if(inputtype[key] == "text" || inputtype[key] == "hiddentext"){ %>\r
+ <input type="text" value="<%= list[0][key] %>" name="<%= key %>"/>\r
+ <% }else if(inputtype[key] == "textarea"){ %>\r
+ <textarea name="<%= key %>" rows="4" cols="50"><%= list[0][key] %></textarea>\r
+ <% } %>\r
+ </td>\r
+ <% } %>\r
</tr>\r
+ <% } %>\r
</table>\r
<input type="hidden" name="_csrf" value="<%= token %>"></input>\r
<input type="submit" value="編集" name="edit"/>\r
<td>パスワード</td>\r
<td><input type="text" value="" name="password"/></td>\r
</tr>\r
- <tr>\r
- <td>性別</td>\r
- <td><input type="text" value="" name="gender"/></td>\r
- </tr>\r
- <tr>\r
- <td>年齢</td>\r
- <td><input type="text" value="" name="age"/></td>\r
- </tr>\r
- <tr>\r
- <td>身長</td>\r
- <td><input type="text" value="" name="height"/></td>\r
- </tr>\r
- <tr>\r
- <td>体重</td>\r
- <td><input type="text" value="" name="weight"/></td>\r
- </tr>\r
- <tr>\r
- <td>種族</td>\r
- <td><input type="text" value="" name="race"/></td>\r
- </tr>\r
- <tr>\r
- <td>備考</td>\r
- <td><textarea name="etc" rows="4" cols="50"></textarea></td>\r
- </tr>\r
+ <% for(var key in alias) {%>\r
+ <tr>\r
+ <% if(typeof alias[key] != "undefined" && typeof inputtype[key] != "undefined") {%>\r
+ <td><%= alias[key] %></td>\r
+ <td>\r
+ <% if(inputtype[key] == "text"){ %>\r
+ <input type="text" value="" name="<%= key %>"/>\r
+ <% }else if(inputtype[key] == "textarea"){ %>\r
+ <textarea name="<%= key %>" rows="4" cols="50"></textarea>\r
+ <% } %>\r
+ </td>\r
+ <% } %>\r
+ </tr>\r
+ <% } %>\r
</table>\r
<input type="hidden" name="_csrf" value="<%= token %>"></input>\r
<input type="submit" value="登録" name="registor"/>\r
<p>例:$profile_link=http://localhost/profile.cgi?name=%n</p>\r
<h2>コマンドの追加方法</h2>\r
<p>WebChatでは必要に応じて外部コマンドを追加することができます。追加する場合はchat.ejsのcommandparser.jsを呼び出している行よりも後に追加してください。そうでない場合、正常に動作しないことがあります</p>\r
+ <h2>プロフィールに項目を追加する方法</h2>\r
+ <p>init.sqlとconfigure.jsを編集することで項目を増減させることができます。なお、Don't editで囲まれた部分は削除しないでください。削除すると正常に動作しなくなります</p>\r
<h2>トラブルシューティング</h2>\r
<h3>500 Redis connection to [サイト名] failed - connect ECONNREFUSEDと表示される</h3>\r
<p>Redisサーバーが起動していない。もしくは$redisHost,$redisPort,$redisPasswordの設定が間違っていることが考えられます</p>\r