Skip to content

Commit

Permalink
Initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
Gabriel Rinaldi committed Jun 15, 2012
0 parents commit 6bd9720
Show file tree
Hide file tree
Showing 395 changed files with 26,201 additions and 0 deletions.
1 change: 1 addition & 0 deletions Procfile
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
web: node app.js
46 changes: 46 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
##What's Countly?
Countly is an innovative, real-time, open source mobile analytics application. It collects data from mobile phones, and visualizes this information to analyze mobile application usage and end-user behavior. There are two parts of Countly: the server that collects and analyzes data, and mobile SDK that sends this data (for iOS & Android).

Below you can find Countly SDK repositories;

- [Countly API Server (Countly-API)](https://github.com/gabrielrinaldi/Countly-API-Heroku)
- [Countly Android SDK (countly-sdk-android)](https://github.com/Countly/countly-sdk-android)
- [Countly iOS SDK (countly-sdk-ios)](https://github.com/Countly/countly-sdk-ios)

##How do I install Countly Frontend Server on Heroku?

1. Configure the [Countly API Server](https://github.com/gabrielrinaldi/Countly-API-Heroku) first
2. Create a Heroku server (Cedar)
3. Configure this repository to push to Heroku
4. Run `heroku config:add COUNTLYDB=Your COUNTLYDB from the API server`
5. Change server on countly.config.js (`countlyCommon.READ_API_URL = "http://your_api_server/o"`)
6. Push to Heroku and you are done

##Frontend

Quick overview of some important files and directories included in this package;

####1. frontend/express/app.js

Countly dashboard that runs on express server.

####2. frontend/express/public/javascripts/countly
Contains seperate helper js files for each data visualization. For example `countly.session.js` is responsible for calculating session related metrics and interacts with `api/api.js` to retrieve data from the sessions collection.

##Which mobile operating systems are supported?
Countly offers integration with world's two leading smartphones, Android and iOS.

##How can I help you with your efforts?
Glad you asked. We need ideas, feedbacks and constructive comments. All your suggestions will be taken care with upmost importance.

My [Twitter](http://twitter.com/gabriel_rinaldi)

Countly is also on [Twitter](http://twitter.com/gocountly) (Original) and [Facebook](http://www.facebook.com/Countly), if you would like to keep up with their fast progress!

##Home

[http://count.ly](http://count.ly "Countly")

##Community & support

[http://support.count.ly](http://support.count.ly "Countly Support")
312 changes: 312 additions & 0 deletions app.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,312 @@
var express = require('express'),
mongoStore = require('connect-mongodb'),
expose = require('express-expose'),
mongo = require('mongoskin'),
crypto = require('crypto'),
countlyDb = mongo.db(process.env.COUNTLYDB),
fs = require('fs'),
im = require('imagemagick');

var app = module.exports = express.createServer();

app.configure(function(){
app.register('.html', require('ejs'));
app.set('views', __dirname + '/views');
app.set('view engine', 'html');
app.set('view options', {layout: false});
app.use(express.bodyParser({uploadDir: __dirname + '/uploads'}));
app.use(express.cookieParser());
countlyDb.open(function(err, db) {
app.use(express.session({
secret: 'countlyss',
store: new mongoStore({db: db, collection: 'usersessions'})
}));
});
app.use(express.session({
secret: 'countlyss',
store: new mongoStore({db: countlyDb, collection: 'usersessions'})
}));
app.use(express.methodOverride());
app.use(app.router);
var oneYear = 31557600000;
app.use(express.static(__dirname + '/public'), { maxAge: oneYear });
});

app.configure('development', function(){
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});

app.configure('production', function(){
app.use(express.errorHandler());
});

app.get('/', function(req, res, next){
res.redirect('/login');
});

app.get('/logout', function(req, res, next){
if (req.session) {
req.session.uid = null;
res.clearCookie('uid');
req.session.destroy(function() {});
}
res.redirect('/login');
});

app.get('/dashboard', function(req, res, next) {
if (!req.session.uid) {
res.redirect('/login');
} else {
countlyDb.collection('members').findOne({"_id": countlyDb.ObjectID(req.session.uid)}, function(err, member){
if (member) {
if (member.apps && member.apps.length) {
var appIdArr = [];

for (var i = 0; i < member.apps.length ;i++) {
appIdArr[appIdArr.length] = countlyDb.ObjectID(member.apps[i]);
}

countlyDb.collection('apps').find({ _id : { '$in': appIdArr } }, {"admins": 0}).toArray(function(err, apps) {

var memberApps = {};

for (var i = 0; i < apps.length ;i++) {
memberApps[apps[i]["_id"]] = {
"name": apps[i]["name"],
"key": apps[i]["key"],
"category": apps[i]["category"],
"timezone": apps[i]["timezone"],
"country": apps[i]["country"]
};
}

req.session.uid = member["_id"];

res.header('Cache-Control', 'no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0');
res.expose(memberApps, "gCountlyApps");
res.render('dashboard', { apps: apps, username: member["username"] });
});
} else {
req.session.uid = member["_id"];

res.header('Cache-Control', 'no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0');
res.expose([], "gCountlyApps");
res.render('dashboard', { apps: [], username: member["username"] });
}
} else {
if (req.session) {
req.session.uid = null;
res.clearCookie('uid');
req.session.destroy(function() {});
}
res.redirect('/login');
}
});
}
});

app.get('/setup', function(req, res, next){
countlyDb.collection('members').count({}, function(err, memberCount){
if (memberCount) {
res.redirect('/login');
} else {
res.render('setup');
}
});
});

app.get('/login', function(req, res, next){
if (req.session.uid) {
res.redirect('/dashboard');
} else {
countlyDb.collection('members').count({}, function(err, memberCount){
if (memberCount) {
res.render('login', { title: "Login" });
} else {
res.redirect('/setup');
}
});
}
});

app.post('/setup', function(req, res, next) {
if (req.body.username && req.body.password) {
var password = crypto.createHash('sha1').update(req.body.password + "").digest('hex');

countlyDb.collection('members').insert({"username": req.body.username, "password": password}, {safe: true}, function(err, member){
req.session.uid = member[0]["_id"];
res.redirect('/dashboard');
});
} else {
res.redirect('/setup');
}
});

app.post('/login', function(req, res, next) {
if (req.body.username && req.body.password) {
var password = crypto.createHash('sha1').update(req.body.password + "").digest('hex');

countlyDb.collection('members').findOne({"username": req.body.username, "password": password}, function(err, member){
if (member) {
req.session.uid = member["_id"];
res.redirect('/dashboard');
} else {
res.render('login', { title: "Login Failed" });
}
});
} else {
res.render('login', { title: "Login Failed" });
res.end();
}
});

app.post('/dashboard/apps/add', function(req, res, next) {

if (!req.session.uid) {
res.end();
return false;
}

var appObj = {
"name": req.body.app_name,
"category": req.body.category,
"timezone": req.body.timezone,
"country": req.body.country,
"admins": [req.session.uid],
"key": ""
}

countlyDb.collection('apps').insert(appObj, function(err, app) {
var salt = new Date().getTime(),
appKey = crypto.createHmac('sha1', salt + "").update(app[0]["_id"] + "").digest('hex');

countlyDb.collection('apps').update({"_id": app[0]["_id"]}, {$set: {key: appKey}}, function(err, app) {});
countlyDb.collection('members').update({"_id": countlyDb.ObjectID(req.session.uid)}, {$addToSet: {"apps": "" + app[0]["_id"]}}, function(err, app) {});

appObj.key = appKey;

res.send(appObj);
res.end();
});
});

app.post('/dashboard/apps/edit', function(req, res, next) {
if (!req.session.uid) {
res.end();
return false;
}

var appObj = {
"name": req.body.app_name,
"category": req.body.category,
"timezone": req.body.timezone,
"country": req.body.country
}

countlyDb.collection('apps').update({"_id": countlyDb.ObjectID(req.body.app_id), "admins": req.session.uid}, {$set: appObj}, function(err, app) {
res.send(appObj);
});
});

app.post('/dashboard/apps/delete', function(req, res, next) {
if (!req.session.uid) {
res.end();
return false;
}

countlyDb.collection('apps').remove({"_id": countlyDb.ObjectID(req.body.app_id), "admins": req.session.uid}, {safe: true}, function(err, result) {

if (!result) {
res.send(false);
return false;
}

var iconPath = __dirname + '/public/appimages/' + req.body.app_id + ".png";
fs.unlink(iconPath, function() {});

countlyDb.collection('members').update({"_id": countlyDb.ObjectID(req.session.uid)}, {$pull: {"apps": req.body.app_id}}, function(err, app) {});
countlyDb.collection('sessions').remove({"_id": countlyDb.ObjectID(req.body.app_id)});
countlyDb.collection('users').remove({"_id": countlyDb.ObjectID(req.body.app_id)});
countlyDb.collection('carriers').remove({"_id": countlyDb.ObjectID(req.body.app_id)});
countlyDb.collection('locations').remove({"_id": countlyDb.ObjectID(req.body.app_id)});
countlyDb.collection('realtime').remove({"_id": countlyDb.ObjectID(req.body.app_id)});
countlyDb.collection('app_users').remove({"_id": countlyDb.ObjectID(req.body.app_id)});
countlyDb.collection('devices').remove({"_id": countlyDb.ObjectID(req.body.app_id)});
countlyDb.collection('device_details').remove({"_id": countlyDb.ObjectID(req.body.app_id)});

res.send(true);
});
});

app.post('/user/settings', function(req, res, next) {

if (!req.session.uid) {
res.end();
return false;
}

var updatedUser = {};

if (req.body.username) {
updatedUser.username = req.body["username"].replace(/([.$])/mg, "");
} else {
res.send(false);
return false;
}

if (req.body.old_pwd) {
var password = crypto.createHash('sha1').update(req.body.old_pwd + "").digest('hex'),
newPassword = crypto.createHash('sha1').update(req.body.new_pwd + "").digest('hex');

updatedUser.password = newPassword;

countlyDb.collection('members').update({"_id": countlyDb.ObjectID(req.session.uid), "password": password}, {'$set': updatedUser}, {safe: true}, function(err, member){
if (member && !err) {
res.send(true);
} else {
res.send(false);
}
});
} else {
countlyDb.collection('members').update({"_id": countlyDb.ObjectID(req.session.uid)}, {'$set': updatedUser}, {safe: true}, function(err, member){
if (member && !err) {
res.send(true);
} else {
res.send(false);
}
});
}
});

app.post('/dashboard/apps/icon', function(req, res) {

if (!req.files.app_image || !req.body.app_image_id) {
res.end();
return true;
}

var tmp_path = req.files.app_image.path,
target_path = __dirname + '/public/appimages/' + req.body.app_image_id + ".png",
type = req.files.app_image.type;

if (type != "image/png" && type != "image/gif" && type != "image/jpeg") {
fs.unlink(tmp_path, function() {});
res.send(false);
return true;
}

fs.rename(tmp_path, target_path, function(err) {
fs.unlink(tmp_path, function() {});
im.resize({
srcPath: target_path,
dstPath: target_path,
format: 'png',
width: 25,
height: 25
}, function(err, stdout, stderr){});

res.send("/appimages/" + req.body.app_image_id + ".png");
});
});

app.listen(process.env.PORT);
20 changes: 20 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"name": "countlyapi",
"version": "12.05.0",
"engines": {
"node": "0.6.x",
"npm": "1.1.x"
},
"dependencies": {
"moment": "1.6.2",
"mongoskin": "0.3.6",
"geoip-lite": "1.0.8",
"time": "0.8.2",
"request": "2.9.153",
"imagemagick": "0.1.2",
"express-expose": "0.2.2",
"express": "2.5.9",
"ejs": "0.6.1",
"connect-mongodb": "1.1.3"
}
}
Binary file added public/images/dashboard/analytics_icons.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/dashboard/anayltcs_header_icons.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/dashboard/bg.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/dashboard/calendar_arrows.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/dashboard/calendar_bg.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/dashboard/calendar_seleted.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/dashboard/calendar_tip.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/dashboard/combobox.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/dashboard/dashboard-arrow.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/dashboard/dashboard_icons.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/dashboard/date-time-icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/dashboard/dropdown_bg.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/dashboard/dropdown_head.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/dashboard/dropdown_item.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/dashboard/dtrend.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/dashboard/logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/dashboard/logo_bg.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/dashboard/management_icons.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/dashboard/map_dotted_bg.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/dashboard/menu_bg.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/dashboard/menu_button.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/dashboard/menu_icons.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/dashboard/new-users.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/dashboard/settings.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/dashboard/submenu_bg.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/dashboard/submenu_seperator.png
Binary file added public/images/dashboard/total-user.png
Binary file added public/images/dashboard/utrend.png
Binary file added public/images/favicon.png
Binary file added public/images/flags/a1.png
Binary file added public/images/flags/a2.png
Binary file added public/images/flags/ad.png
Binary file added public/images/flags/ae.png
Binary file added public/images/flags/af.png
Binary file added public/images/flags/ag.png
Binary file added public/images/flags/ai.png
Binary file added public/images/flags/al.png
Binary file added public/images/flags/am.png
Binary file added public/images/flags/an.png
Binary file added public/images/flags/ao.png
Binary file added public/images/flags/aq.png
Binary file added public/images/flags/ar.png
Binary file added public/images/flags/as.png
Binary file added public/images/flags/at.png
Binary file added public/images/flags/au.png
Binary file added public/images/flags/aw.png
Binary file added public/images/flags/ax.png
Binary file added public/images/flags/az.png
Binary file added public/images/flags/ba.png
Binary file added public/images/flags/bb.png
Binary file added public/images/flags/bd.png
Binary file added public/images/flags/be.png
Binary file added public/images/flags/bf.png
Binary file added public/images/flags/bg.png
Binary file added public/images/flags/bh.png
Binary file added public/images/flags/bi.png
Binary file added public/images/flags/bj.png
Binary file added public/images/flags/bm.png
Binary file added public/images/flags/bn.png
Binary file added public/images/flags/bo.png
Binary file added public/images/flags/br.png
Binary file added public/images/flags/bs.png
Binary file added public/images/flags/bt.png
Binary file added public/images/flags/bv.png
Binary file added public/images/flags/bw.png
Binary file added public/images/flags/by.png
Binary file added public/images/flags/bz.png
Binary file added public/images/flags/ca.png
Binary file added public/images/flags/catalonia.png
Binary file added public/images/flags/cc.png
Binary file added public/images/flags/cd.png
Binary file added public/images/flags/cf.png
Binary file added public/images/flags/cg.png
Binary file added public/images/flags/ch.png
Binary file added public/images/flags/ci.png
Binary file added public/images/flags/ck.png
Binary file added public/images/flags/cl.png
Binary file added public/images/flags/cm.png
Binary file added public/images/flags/cn.png
Binary file added public/images/flags/co.png
Binary file added public/images/flags/cr.png
Binary file added public/images/flags/cs.png
Binary file added public/images/flags/cu.png
Binary file added public/images/flags/cv.png
Binary file added public/images/flags/cw.png
Binary file added public/images/flags/cx.png
Binary file added public/images/flags/cy.png
Binary file added public/images/flags/cz.png
Binary file added public/images/flags/de.png
Binary file added public/images/flags/dj.png
Binary file added public/images/flags/dk.png
Binary file added public/images/flags/dm.png
Binary file added public/images/flags/do.png
Binary file added public/images/flags/dz.png
Binary file added public/images/flags/ec.png
Binary file added public/images/flags/ee.png
Binary file added public/images/flags/eg.png
Binary file added public/images/flags/eh.png
Binary file added public/images/flags/england.png
Binary file added public/images/flags/er.png
Binary file added public/images/flags/es.png
Binary file added public/images/flags/et.png
Binary file added public/images/flags/eu.png
Binary file added public/images/flags/fam.png
Binary file added public/images/flags/fi.png
Binary file added public/images/flags/fj.png
Binary file added public/images/flags/fk.png
Binary file added public/images/flags/fm.png
Binary file added public/images/flags/fo.png
Binary file added public/images/flags/fr.png
Binary file added public/images/flags/ga.png
Binary file added public/images/flags/gb.png
Binary file added public/images/flags/gd.png
Binary file added public/images/flags/ge.png
Binary file added public/images/flags/gf.png
Binary file added public/images/flags/gh.png
Binary file added public/images/flags/gi.png
Binary file added public/images/flags/gl.png
Binary file added public/images/flags/gm.png
Binary file added public/images/flags/gn.png
Binary file added public/images/flags/gp.png
Binary file added public/images/flags/gq.png
Binary file added public/images/flags/gr.png
Binary file added public/images/flags/gs.png
Binary file added public/images/flags/gt.png
Binary file added public/images/flags/gu.png
Binary file added public/images/flags/gw.png
Binary file added public/images/flags/gy.png
Binary file added public/images/flags/hk.png
Binary file added public/images/flags/hm.png
Binary file added public/images/flags/hn.png
Binary file added public/images/flags/hr.png
Binary file added public/images/flags/ht.png
Binary file added public/images/flags/hu.png
Binary file added public/images/flags/id.png
Binary file added public/images/flags/ie.png
Binary file added public/images/flags/il.png
Binary file added public/images/flags/in.png
Binary file added public/images/flags/io.png
Binary file added public/images/flags/iq.png
Binary file added public/images/flags/ir.png
Binary file added public/images/flags/is.png
Binary file added public/images/flags/it.png
Binary file added public/images/flags/jm.png
Binary file added public/images/flags/jo.png
Binary file added public/images/flags/jp.png
Binary file added public/images/flags/ke.png
Binary file added public/images/flags/kg.png
Binary file added public/images/flags/kh.png
Binary file added public/images/flags/ki.png
Binary file added public/images/flags/km.png
Binary file added public/images/flags/kn.png
Binary file added public/images/flags/kp.png
Binary file added public/images/flags/kr.png
Binary file added public/images/flags/kw.png
Binary file added public/images/flags/ky.png
Binary file added public/images/flags/kz.png
Binary file added public/images/flags/la.png
Binary file added public/images/flags/lb.png
Binary file added public/images/flags/lc.png
Binary file added public/images/flags/li.png
Binary file added public/images/flags/lk.png
Binary file added public/images/flags/lr.png
Binary file added public/images/flags/ls.png
Binary file added public/images/flags/lt.png
Binary file added public/images/flags/lu.png
Binary file added public/images/flags/lv.png
Binary file added public/images/flags/ly.png
Binary file added public/images/flags/ma.png
Binary file added public/images/flags/mc.png
Binary file added public/images/flags/md.png
Binary file added public/images/flags/me.png
Binary file added public/images/flags/mg.png
Binary file added public/images/flags/mh.png
Binary file added public/images/flags/mk.png
Binary file added public/images/flags/ml.png
Binary file added public/images/flags/mm.png
Binary file added public/images/flags/mn.png
Binary file added public/images/flags/mo.png
Binary file added public/images/flags/mp.png
Binary file added public/images/flags/mq.png
Binary file added public/images/flags/mr.png
Binary file added public/images/flags/ms.png
Binary file added public/images/flags/mt.png
Binary file added public/images/flags/mu.png
Binary file added public/images/flags/mv.png
Binary file added public/images/flags/mw.png
Binary file added public/images/flags/mx.png
Binary file added public/images/flags/my.png
Binary file added public/images/flags/mz.png
Binary file added public/images/flags/na.png
Binary file added public/images/flags/nc.png
Binary file added public/images/flags/ne.png
Binary file added public/images/flags/nf.png
Binary file added public/images/flags/ng.png
Binary file added public/images/flags/ni.png
Binary file added public/images/flags/nl.png
Binary file added public/images/flags/no.png
Binary file added public/images/flags/np.png
Binary file added public/images/flags/nr.png
Binary file added public/images/flags/nu.png
Binary file added public/images/flags/nz.png
Binary file added public/images/flags/o1.png
Binary file added public/images/flags/om.png
Binary file added public/images/flags/pa.png
Binary file added public/images/flags/pe.png
Binary file added public/images/flags/pf.png
Binary file added public/images/flags/pg.png
Binary file added public/images/flags/ph.png
Binary file added public/images/flags/pk.png
Binary file added public/images/flags/pl.png
Binary file added public/images/flags/pm.png
Binary file added public/images/flags/pn.png
Binary file added public/images/flags/pr.png
Binary file added public/images/flags/ps.png
Binary file added public/images/flags/pt.png
Binary file added public/images/flags/pw.png
Binary file added public/images/flags/py.png
Binary file added public/images/flags/qa.png
Binary file added public/images/flags/re.png
Binary file added public/images/flags/ro.png
Binary file added public/images/flags/rs.png
Binary file added public/images/flags/ru.png
Binary file added public/images/flags/rw.png
Binary file added public/images/flags/sa.png
Binary file added public/images/flags/sb.png
Binary file added public/images/flags/sc.png
Binary file added public/images/flags/scotland.png
Binary file added public/images/flags/sd.png
Binary file added public/images/flags/se.png
Binary file added public/images/flags/sg.png
Binary file added public/images/flags/sh.png
Binary file added public/images/flags/si.png
Binary file added public/images/flags/sj.png
Binary file added public/images/flags/sk.png
Binary file added public/images/flags/sl.png
Binary file added public/images/flags/sm.png
Binary file added public/images/flags/sn.png
Binary file added public/images/flags/so.png
Binary file added public/images/flags/sr.png
Binary file added public/images/flags/st.png
Binary file added public/images/flags/sv.png
Binary file added public/images/flags/sy.png
Binary file added public/images/flags/sz.png
Binary file added public/images/flags/tc.png
Binary file added public/images/flags/td.png
Binary file added public/images/flags/tf.png
Binary file added public/images/flags/tg.png
Binary file added public/images/flags/th.png
Binary file added public/images/flags/tj.png
Binary file added public/images/flags/tk.png
Binary file added public/images/flags/tl.png
Binary file added public/images/flags/tm.png
Binary file added public/images/flags/tn.png
Binary file added public/images/flags/to.png
Binary file added public/images/flags/tr.png
Binary file added public/images/flags/tt.png
Binary file added public/images/flags/tv.png
Binary file added public/images/flags/tw.png
Binary file added public/images/flags/tz.png
Binary file added public/images/flags/ua.png
Binary file added public/images/flags/ug.png
Binary file added public/images/flags/um.png
Binary file added public/images/flags/unknown.png
Binary file added public/images/flags/us.png
Binary file added public/images/flags/uy.png
Binary file added public/images/flags/uz.png
Binary file added public/images/flags/va.png
Binary file added public/images/flags/vc.png
Binary file added public/images/flags/ve.png
Binary file added public/images/flags/vg.png
Binary file added public/images/flags/vi.png
Binary file added public/images/flags/vn.png
Binary file added public/images/flags/vu.png
Binary file added public/images/flags/wales.png
Binary file added public/images/flags/wf.png
Binary file added public/images/flags/ws.png
Binary file added public/images/flags/ye.png
Binary file added public/images/flags/yt.png
Binary file added public/images/flags/za.png
Binary file added public/images/flags/zm.png
Binary file added public/images/flags/zw.png
Binary file added public/images/login/cly_login.png
Binary file added public/images/login/cly_login_bg.png
Binary file added public/images/login/logo.png
Binary file added public/images/management/add.png
Binary file added public/images/management/edit.png
Binary file added public/images/reports/add_icon.png
Binary file added public/images/reports/checkbox.png
Binary file added public/images/reports/combo-arrow.png
Binary file added public/images/reports/date-time.png
Binary file added public/images/reports/pdf_icon.png
Binary file added public/images/reports/reports.png
Binary file added public/images/reports/title_arrow.png
Loading

0 comments on commit 6bd9720

Please sign in to comment.