Merge branch 'master' of https://github.com/crunchbutton/crunchbutton
This commit is contained in:
commit
d2cc2a960e
113
cli/chat.js
Normal file
113
cli/chat.js
Normal file
@ -0,0 +1,113 @@
|
||||
// Setup basic express server
|
||||
var express = require('express');
|
||||
var app = express();
|
||||
var server = require('http').createServer(app);
|
||||
var io = require('socket.io')(server);
|
||||
var port = process.env.PORT || 3000;
|
||||
var http = require('http');
|
||||
var querystring = require('querystring');
|
||||
|
||||
server.listen(port, function () {
|
||||
console.log('Server listening at port %d', port);
|
||||
});
|
||||
|
||||
// Routing
|
||||
app.use(express.static(__dirname + '/public'));
|
||||
|
||||
io.on('connection', function (socket) {
|
||||
var addedUser = false;
|
||||
console.log('user connected...');
|
||||
|
||||
socket.events = {};
|
||||
|
||||
// from php
|
||||
socket.on('event.broadcast', function (payload) {
|
||||
console.log('recieved broadcast...', payload);
|
||||
|
||||
if (payload.room) {
|
||||
if (typeof payload.room != 'object') {
|
||||
payload.room = [payload.room];
|
||||
}
|
||||
|
||||
for (var x in payload.room) {
|
||||
io.to(payload.room[x]).emit(payload.event, payload.data);
|
||||
}
|
||||
}
|
||||
|
||||
if (payload.admin) {
|
||||
if (typeof payload.admin != 'object') {
|
||||
payload.admin = [payload.admin];
|
||||
}
|
||||
|
||||
io.sockets.clients().forEach(function(socket) {
|
||||
if (payload.admin.indexOf(socket.id_admin) > -1) {
|
||||
socket.emit(payload.event, payload.data);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
// from socket
|
||||
socket.on('event.message', function (payload) {
|
||||
console.log('recieved message...', payload);
|
||||
|
||||
if (!payload.url) {
|
||||
return;
|
||||
}
|
||||
|
||||
var post = querystring.stringify(payload.data);
|
||||
|
||||
var options = {
|
||||
host: payload.host || 'beta.cockpit.la',
|
||||
path: payload.url,
|
||||
port: '80',
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
'Content-Length': post.length,
|
||||
'Cookie': 'token=' + socket.token
|
||||
}
|
||||
};
|
||||
|
||||
var complete = function(data) {
|
||||
console.log('api response: ', data);
|
||||
//io.to('ticket.' + data.id_support).emit('ticket.message', data);
|
||||
};
|
||||
|
||||
var req = http.request(options, function(res) {
|
||||
console.log("statusCode: ", res.statusCode);
|
||||
console.log("headers: ", res.headers);
|
||||
|
||||
res.setEncoding('utf8');
|
||||
var str = '';
|
||||
res.on('data', function (chunk) {
|
||||
str += chunk;
|
||||
console.log('chunk: ', chunk);
|
||||
});
|
||||
res.on('end', function () {
|
||||
complete(str);
|
||||
});
|
||||
});
|
||||
|
||||
req.write(post);
|
||||
req.end();
|
||||
});
|
||||
|
||||
// listen for events
|
||||
socket.on('event.subscribe', function (event) {
|
||||
console.log('subscribing to ', event);
|
||||
socket.join(event);
|
||||
});
|
||||
|
||||
// stop listening for events
|
||||
socket.on('event.unsubscribe', function (event) {
|
||||
console.log('unsubscribing to ', event);
|
||||
socket.leave(event);
|
||||
});
|
||||
|
||||
// set the token to be used for authentication
|
||||
socket.on('token', function (token) {
|
||||
socket.token = token;
|
||||
});
|
||||
});
|
||||
44
conf/chat.conf
Normal file
44
conf/chat.conf
Normal file
@ -0,0 +1,44 @@
|
||||
map $http_upgrade $connection_upgrade {
|
||||
default upgrade;
|
||||
'' close;
|
||||
}
|
||||
|
||||
upstream websocket {
|
||||
#least_conn;
|
||||
server localhost:3000;
|
||||
# fail_timeout=20s;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
listen 443 ssl;
|
||||
|
||||
server_name chat.cockpit.la;
|
||||
|
||||
ssl_certificate /home/chat.cockpit.la/ssl/wild.sha-2.cockpit.la.crt;
|
||||
ssl_certificate_key /home/chat.cockpit.la/ssl/wild.sha-2.cockpit.la.key.private;
|
||||
|
||||
# Redirect all non-SSL traffic to SSL.
|
||||
if ($ssl_protocol = "") {
|
||||
rewrite ^ https://$host$request_uri? permanent;
|
||||
}
|
||||
|
||||
location / {
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-NginX-Proxy true;
|
||||
proxy_set_header Host $http_host;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_redirect off;
|
||||
proxy_pass http://websocket;
|
||||
proxy_set_header Connection "upgrade";
|
||||
# proxy_cache_bypass $http_upgrade;
|
||||
}
|
||||
|
||||
# root /home/chat.cockpit.la/www;
|
||||
# index index.html index.htm;
|
||||
# location / {
|
||||
# try_files $uri $uri/ index.html;
|
||||
# }
|
||||
}
|
||||
@ -3,9 +3,6 @@
|
||||
class Controller_api_tickets extends Crunchbutton_Controller_RestAccount {
|
||||
|
||||
public function init() {
|
||||
if ($this->method() != 'get') {
|
||||
exit;
|
||||
}
|
||||
|
||||
if (c::getPagePiece(2)) {
|
||||
$support = Support::o(c::getPagePiece(2));
|
||||
@ -17,9 +14,28 @@ class Controller_api_tickets extends Crunchbutton_Controller_RestAccount {
|
||||
if (get_class($support) != 'Crunchbutton_Support') {
|
||||
$support = $support->get(0);
|
||||
}
|
||||
|
||||
if ($this->method() == 'get') {
|
||||
echo $support->json();
|
||||
exit;
|
||||
}
|
||||
|
||||
if (c::getPagePiece(3) == 'message' && $this->method() == 'post') {
|
||||
$message = $support->addAdminMessage([
|
||||
'body' => $this->request()['body'],
|
||||
'phone' => c::admin()->phone,
|
||||
'id_admin' => c::admin()->id_admin
|
||||
]);
|
||||
if ($message->id_support_message) {
|
||||
$message->notify();
|
||||
}
|
||||
echo $message->json();
|
||||
exit;
|
||||
}
|
||||
|
||||
echo $support->json();
|
||||
header('HTTP/1.0 409 Conflict');
|
||||
exit;
|
||||
|
||||
}
|
||||
|
||||
$limit = $this->request()['limit'] ? c::db()->escape($this->request()['limit']) : 25;
|
||||
|
||||
@ -4,16 +4,18 @@
|
||||
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.0/angular-resource.min.js"></script>
|
||||
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.0/angular-animate.min.js"></script>
|
||||
-->
|
||||
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.0-beta.18/angular.min.js"></script>
|
||||
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.0-beta.18/angular.min.js"></script>
|
||||
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.0-beta.18/angular-route.min.js"></script>
|
||||
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.0-beta.18/angular-resource.min.js"></script>
|
||||
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.0-beta.18/angular-animate.min.js"></script>
|
||||
<script src="//cdn.socket.io/socket.io-1.2.0.js"></script>
|
||||
<!-- Payment stuff -->
|
||||
<script src="https://js.stripe.com/v2/"></script>
|
||||
<script src="https://js.balancedpayments.com/1.1/balanced.js"></script>
|
||||
|
||||
|
||||
|
||||
|
||||
<script src="/assets/js/snap.js"></script>
|
||||
<script src="/assets/js/date.js"></script>
|
||||
<script src="/assets/js/jquery.totalstorage.js"></script>
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
|
||||
<div ng-controller="SideTicketCtrl" class="support-side-chat">
|
||||
<table style="height: 100%">
|
||||
<table class="support-side-chat-table">
|
||||
<tr><td class="support-chat-header">
|
||||
<a class="support-chat-header-back" ng-click="setViewTicket(0)"> <i class="fa fa-chevron-left"></i> Issues</a>
|
||||
<a class="support-chat-header-issue" href="/ticket/{{ticket.id_support}}">#{{ticket.id_support}}</a>
|
||||
|
||||
46
stackscript/chat.sh
Normal file
46
stackscript/chat.sh
Normal file
@ -0,0 +1,46 @@
|
||||
#!/bin/bash
|
||||
# <udf name="machinename" label="Hostname" example="somedomain.com"/>
|
||||
# <udf name="mysqlrootpw" label="MySQL root password" example="password"/>
|
||||
# <udf name="sshport" label="Port for SSH" example="22" default="22"/>
|
||||
|
||||
source <ssinclude StackScriptID="8646">
|
||||
source <ssinclude StackScriptID="8649">
|
||||
|
||||
|
||||
function install_cockpit {
|
||||
apache_virtualhost $1
|
||||
|
||||
groupadd dev
|
||||
useradd -m -s /bin/bash -G dev deploy
|
||||
# echo "sup3rb4c0n" | passwd --stdin deploy
|
||||
|
||||
setup_github
|
||||
|
||||
chown deploy:dev /home
|
||||
rm -Rf /home/${1}
|
||||
|
||||
sudo -u deploy git clone git@github.com:crunchbutton/crunchbutton.git /home/${1}
|
||||
mkdir /home/${1}/logs /home/${1}/cache
|
||||
mkdir /home/${1}/cache/min /home/${1}/cache/thumb /home/${1}/data
|
||||
chmod -R 0777 /home/${1}/cache
|
||||
|
||||
}
|
||||
|
||||
# set basic shit
|
||||
set_hostname $MACHINENAME
|
||||
set_timezone
|
||||
|
||||
# update and install shit
|
||||
system_update
|
||||
|
||||
ssh_port $SSHPORT
|
||||
|
||||
apache_install
|
||||
apache_virtualhost $MACHINENAME
|
||||
# mysql_install $MYSQLROOTPW
|
||||
php_install
|
||||
install_basics
|
||||
install_cockpit $MACHINENAME
|
||||
|
||||
# restart it
|
||||
restart_services
|
||||
@ -182,8 +182,11 @@ function mysql_grant_user {
|
||||
# install php from a 3rd party repo
|
||||
function php_install {
|
||||
# yum -y remove php-common
|
||||
rpm -Uvh http://mirror.webtatic.com/yum/el6/latest.rpm
|
||||
#rpm -Uvh http://mirror.webtatic.com/yum/el6/latest.rpm
|
||||
rpm -Uvh https://mirror.webtatic.com/yum/el7/epel-release.rpm
|
||||
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
|
||||
yum -y install php55w php55w-opcache php55w-xml php55w-mysql php55w-mbstring php55w-mcrypt php55w-pear
|
||||
|
||||
|
||||
sed -i -e 's/^short_open_tag = Off$/short_open_tag = On/' /etc/php.ini
|
||||
}
|
||||
|
||||
@ -44,7 +44,7 @@ NGApp.controller('SideTicketCtrl', function($scope, $rootScope, TicketService, T
|
||||
};
|
||||
|
||||
$rootScope.$on('triggerViewTicket', function(e, ticket) {
|
||||
loadTicket(ticket);
|
||||
loadTicket(ticket == 'refresh' ? TicketViewService.scope.ticket : ticket);
|
||||
});
|
||||
|
||||
$scope.send = TicketViewService.send;
|
||||
@ -81,24 +81,23 @@ NGApp.factory('TicketViewService', function($rootScope, $resource, $routeParams,
|
||||
}
|
||||
});
|
||||
|
||||
service.websocket = new WebSocket('wss://' + location.host + ':9000/test?_token=' + $.cookie('token'));
|
||||
// service.websocket = new WebSocket('wss://' + location.host + ':9000/test?_token=' + $.cookie('token'));
|
||||
|
||||
service.websocket.onopen = function(ev) {
|
||||
console.debug('Connected to chat server.');
|
||||
}
|
||||
service.websocket.onerror = function(ev) {
|
||||
console.error('Chat server error: ', ev.data);
|
||||
};
|
||||
service.websocket.onclose = function(ev) {
|
||||
console.debug('Chat server connection closed.');
|
||||
};
|
||||
service.socket = io('https://chat.cockpit.la');
|
||||
|
||||
service.socket.on('connect', function (data) {
|
||||
console.debug('Connected to socket.io');
|
||||
service.socket.emit('token', $.cookie('token'));
|
||||
service.socket.emit('event.subscribe', 'ticket.' + service.scope.viewTicket);
|
||||
});
|
||||
|
||||
service.send = function(message) {
|
||||
var msg = {
|
||||
type: 'ticket.message',
|
||||
ticket: service.scope.viewTicket,
|
||||
body: message,
|
||||
_token: $.cookie('token')
|
||||
url: '/api/tickets/' + service.scope.viewTicket + '/message',
|
||||
host: location.host,
|
||||
data: {
|
||||
body: message
|
||||
}
|
||||
};
|
||||
|
||||
service.scope.ticket.messages.push({
|
||||
@ -108,8 +107,8 @@ NGApp.factory('TicketViewService', function($rootScope, $resource, $routeParams,
|
||||
});
|
||||
service.scope.$apply();
|
||||
service.scroll();
|
||||
|
||||
service.websocket.send(JSON.stringify(msg));
|
||||
|
||||
service.socket.emit('event.message', msg);
|
||||
service.isTyping = false;
|
||||
};
|
||||
|
||||
@ -145,8 +144,8 @@ NGApp.factory('TicketViewService', function($rootScope, $resource, $routeParams,
|
||||
}, 5000);
|
||||
};
|
||||
|
||||
service.websocket.onmessage = function(ev) {
|
||||
var payload = JSON.parse(ev.data);
|
||||
service.socket.on('ticket.message', function(payload) {
|
||||
|
||||
console.debug('Recieved chat message: ', payload);
|
||||
|
||||
if (payload.type != 'ticket.message') {
|
||||
@ -162,8 +161,8 @@ NGApp.factory('TicketViewService', function($rootScope, $resource, $routeParams,
|
||||
service.scope.ticket.messages.push(payload);
|
||||
service.scope.$apply();
|
||||
service.scroll();
|
||||
};
|
||||
|
||||
});
|
||||
|
||||
service.scroll = function() {
|
||||
$('.support-chat-contents-scroll').stop(true,false).animate({
|
||||
scrollTop: $('.support-chat-contents-scroll')[0].scrollHeight
|
||||
|
||||
@ -3101,4 +3101,9 @@ h1.driver-title {
|
||||
@-webkit-keyframes fadeIn {
|
||||
from { opacity: 0; }
|
||||
to { opacity: 1.0; }
|
||||
}
|
||||
|
||||
.support-side-chat-table {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user