Down : http://www.mediafire.com/?yst7xorshdrjx8g
Kullanılan kütüphaneler socket.io , jade , express
clientside kütüphaneler jquery + colorpicker
Db gerektirmez
app.js dosyası :
var express = require('express');
var crypto = require('crypto');
var app = module.exports = express.createServer();
// <Ayar>
var adminler = {"admin":"admin","r10":"r10"};
var rooms = ["Genel","Facebook","Aşk","Felsefe","Üniversiteliler","15+","25+","40+","Spor","Gündem","Islam","Programlama","Counter-Strike","Private"];
var ozelodalar = {"Private":{}};
var onlinesayisi=0;
var privatepassword="~|~";
var banlilar={};
var renktest = /^(#)?([0-9a-fA-F]{3})([0-9a-fA-F]{3})?$/;
//var iptest = /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/;
var gizlikey="1jb3h65787n6mnsdjaknm2k1n4";
var nicktest=/[^a-z-0-9çışğüö_\-\:]/gi;
var kullanilacak_port = process.env.PORT || 8080;
//var kullanilacak_port = 8080;
// </Ayar>
app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.set('view options', { pretty: true });
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(__dirname + '/public'));
});
app.configure('development', function(){
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
app.configure('production', function(){
app.use(express.errorHandler());
});
function explode(delimiter,string,limit){if(arguments.length<2||typeof delimiter=='undefined'||typeof string=='undefined')return null;if(delimiter===''||delimiter===false||delimiter===null)return false;if(typeof delimiter=='function'||typeof delimiter=='object'||typeof string=='function'||typeof string=='object'){return{0:''};}if(delimiter===true)delimiter='1';delimiter+='';string+='';var s=string.split(delimiter);if(typeof limit==='undefined')return s;if(limit===0)limit=1;if(limit>0){if(limit>=s.length)return s;return s.slice(0,limit-1).concat([s.slice(limit-1).join(delimiter)]);}if(-limit>=s.length)return[];s.splice(s.length+limit);return s;}
function encrypt(text){
var cipher = crypto.createCipher('aes-256-cbc',gizlikey)
var crypted = cipher.update(text,'utf8','hex')
crypted += cipher.final('hex');
return crypted;
}
function decrypt(text){
var decipher = crypto.createDecipher('aes-256-cbc',gizlikey)
var dec = decipher.update(text,'hex','utf8')
dec += decipher.final('utf8');
return dec;
}
app.get('/', function(req, res){
res.render('chat', { layout:false,title: 'Hemen Arkadasliklar Edin',online:onlinesayisi,odalar:rooms})
});
app.listen(kullanilacak_port);
console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);
// Socket bağlantısı kurulur
var io = require('socket.io').listen(app, { log: false });
// Kullanıcı Listesinin tutulacağı Object
var kullanicilar = {};
var kucuknickler = {};
io.configure(function () {
io.set("transports", ["xhr-polling"]);
io.set("polling duration", 10);
});
// Bağlantı kurulduğunda çalışacak kısım
io.sockets.on('connection', function(socket){
// Kullanıcı Ekleme Fonksiyonu
socket.on("kullaniciEkle", function(kullaniciadi,oda){
if((kullaniciadi.search(/[a-z]/i) === -1) || (kullaniciadi.length<3)) {
kullaniciadi="nicksiz"+Math.floor(Math.random() * 9999999);
}
// Kullanıcı session'nda bilgileri saklıyoruz
if(!rooms[oda]){oda=0;}
girisyap = 1;
//ipz=decrypt(ipz);
ipz=socket.handshake.headers['x-forwarded-for'] || socket.handshake.address.address;
if (ozelodalar[rooms[oda]]) {
if (kullaniciadi.indexOf(privatepassword)>-1) {
kullaniciadi=kullaniciadi.replace(privatepassword, "");
girisyap=1;
}else {
socket.emit("uyari", "Bu odaya girmek için yetkiniz yok");
girisyap=0;
socket.emit("kopgit");
}
}
if(adminler[kullaniciadi])
{
socket.emit("uyari", "Bu Nick Adminler Tarafindan Kullanılıyor.");
girisyap=0;
socket.emit("kopgit");
}
/*
if(!iptest.test(ipz))
{
socket.emit("uyari", "Çakalmısın olm sen?.");
girisyap=0;
socket.emit("kopgit");
}
*/
if(kullaniciadi.indexOf(':')>-1)
{
verikul=explode(':',kullaniciadi,2);
kullaniciadi=verikul[0];
sifre=verikul[1];
if(adminler[kullaniciadi]!=sifre)
{
socket.emit("uyari", "Şifre Yanlış.");
girisyap=0;
socket.emit("kopgit");
}
else if(kullanicilar[kullaniciadi])
{
socket.emit("uyari", "Admin zaten şuan giriş yapmış.");
girisyap=0;
socket.emit("kopgit");
}
else
{
girisyap=1;
}
}
kullaniciadi = kullaniciadi.replace(nicktest, "");
socket.kullaniciAdi = kullaniciadi;
socket.userId = Object.keys(kullanicilar).length;
socket.room=oda;
if(banlilar[ipz])
{
socket.emit("uzaklas","");
girisyap = 0;
}
if(!kucuknickler[kullaniciadi.toLowerCase()] && girisyap)
{
kucuknickler[kullaniciadi.toLowerCase()] = {nick:kullaniciadi.toLowerCase(),ip:encrypt(ipz)};
// Array'e kullanıcı bilgilerini ekliyoruz
kullanicilar[kullaniciadi] = {
userName : kullaniciadi,
userId : Object.keys(kullanicilar).length,
room : oda,
socketid : encrypt(socket.id)
};
//odaya sokuyoruz
socket.join(oda);
// Bağlanan kullanıcıya hoşgeldin mesajı yolluyoruz
socket.emit("mesajGonder", "Sistem", rooms[oda] + " Kanalına Hoşgeldiniz.",'000000',0);
// Bütün kullanıcılara yeni kullanıcı bağlandı mesajı yolluyoruz
socket.broadcast.to(oda).emit("mesajGonder", "<font color='#006400'>Sistem</font>", kullaniciadi + " sohbete bağlandı. (y)",'000000',0);
// Bağlı kullanıcılarda Kullanıcı listesini yeniliyoruz
//io.sockets.emit("kullanicilariYenile", kullanicilar,Object.keys(kullanicilar).length);
io.sockets.in(oda).emit("kullanicilariYenile", kullanicilar,io.sockets.clients(oda).length);
onlinesayisi=Object.keys(kullanicilar).length;
socket.emit("girisyap", "");
}
else
{
if(girisyap)
{
socket.emit("uyari", "Bu Nick kullanılıyor lütfen başka nick seçin.");
socket.emit("kopgit");
}
}
});
// Bağlantı kesildiği takdirde çalışacak fonksiyon.
socket.on("disconnect", function(){
try {
if(socket.id==decrypt(kullanicilar[socket.kullaniciAdi]["socketid"]))
{
delete kullanicilar[socket.kullaniciAdi];
delete kucuknickler[socket.kullaniciAdi.toLowerCase()];
io.sockets.in(socket.room).emit("kullanicilariYenile", kullanicilar,io.sockets.clients(socket.room).length);
onlinesayisi=Object.keys(kullanicilar).length;
socket.leave(socket.room);
if(socket.kullaniciAdi)
{
socket.broadcast.to(socket.room).emit("mesajGonder", "<font color='#b22222'>Sistem</font>", socket.kullaniciAdi + " sohbetten ayrıldı (n)",'000000',0);
}
}
} catch(e){}
});
socket.on("mesajYolla", function(data,renk){
if(!renktest.test(renk)){renk='000000';}
if(data.length>400 || data.length <1)
{
socket.emit("uyari", "Mesaj 400 karakteri geçemez veya boş olamaz!");
}
else
{
//ozel mesaj
if(data.indexOf(':')>-1)
{
veri=explode(':',data,2);
if(kullanicilar[veri[0]])
{
kime=veri[0];
mesaj=veri[1];
io.sockets.socket(decrypt(kullanicilar[kime].socketid)).emit("mesajGonder",[socket.kullaniciAdi,kime],mesaj,renk,1,1);
io.sockets.socket(socket.id).emit("mesajGonder",[socket.kullaniciAdi,kime],mesaj,renk,1,0);
}
else
{
if(adminler[socket.kullaniciAdi]) {
io.sockets.in(socket.room).emit("mesajGonder", socket.kullaniciAdi, data,renk,0,1);
}
else
{
io.sockets.in(socket.room).emit("mesajGonder", socket.kullaniciAdi, data,renk,0,0);
}
}
}
else if(data.indexOf('/kick ')=='0' && adminler[socket.kullaniciAdi])
{
kim=data.split('/kick ')[1];
if(kullanicilar[kim] && !adminler[kim])
{
socket.broadcast.to(socket.room).emit("mesajGonder", "Sistem", kim + " uzaklaştırıldı (n)",'000000',0,0);
io.sockets.socket(decrypt(kullanicilar[kim].socketid)).emit("uzaklas","");
delete kullanicilar[kim];
delete kucuknickler[kim.toLowerCase()];
io.sockets.in(socket.room).emit("kullanicilariYenile", kullanicilar,io.sockets.clients(socket.room).length);
onlinesayisi=Object.keys(kullanicilar).length;
}
else
{
io.sockets.socket(decrypt(kullanicilar[kim].socketid)).emit("mesajGonder",["Sistem",kim],socket.kullaniciAdi+" seni atmaya calisti ayik ol",renk,1,0);
}
}
else if(data.indexOf('/adminkick ')=='0' && adminler[socket.kullaniciAdi])
{
kim=data.split('/adminkick ')[1];
if(kullanicilar[kim] && kim!="root")
{
socket.broadcast.to(socket.room).emit("mesajGonder", "Sistem", kim + " uzaklaştırıldı (n)",'000000',0,0);
io.sockets.socket(decrypt(kullanicilar[kim].socketid)).emit("uzaklas","");
delete kullanicilar[kim];
delete kucuknickler[kim.toLowerCase()];
io.sockets.in(socket.room).emit("kullanicilariYenile", kullanicilar,io.sockets.clients(socket.room).length);
onlinesayisi=Object.keys(kullanicilar).length;
}
}
else if(data.indexOf('/ban ')=='0' && adminler[socket.kullaniciAdi])
{
kim=data.split('/ban ')[1];
if(kullanicilar[kim] && !adminler[kim])
{
banlilar[decrypt(kucuknickler[kim.toLowerCase()].ip)]={"ip" : decrypt(kucuknickler[kim.toLowerCase()].ip)};
socket.emit("mesajGonder","Sistem", kim+" ipsi : "+decrypt(kucuknickler[kim.toLowerCase()].ip),'000000',0,0);
socket.broadcast.to(socket.room).emit("mesajGonder", "Sistem", kim + " banlandı (n)",'000000',0,0);
io.sockets.socket(decrypt(kullanicilar[kim].socketid)).emit("uzaklas","");
delete kullanicilar[kim];
delete kucuknickler[kim.toLowerCase()];
io.sockets.in(socket.room).emit("kullanicilariYenile", kullanicilar,io.sockets.clients(socket.room).length);
onlinesayisi=Object.keys(kullanicilar).length;
}
}
else if(data.indexOf('/unban ')=='0' && adminler[socket.kullaniciAdi])
{
kim=data.split('/unban ')[1];
if(banlilar[kim])
{
delete banlilar[kim];
socket.emit("mesajGonder","Sistem", kim+" ipsinin bani kalkti.",'000000',0,0);
}
}
else
{
if(adminler[socket.kullaniciAdi]) {
io.sockets.in(socket.room).emit("mesajGonder", socket.kullaniciAdi, data,renk,0,1);
}
else
{
io.sockets.in(socket.room).emit("mesajGonder", socket.kullaniciAdi, data,renk,0,0);
}
}
}
});
});
