nginx acp stuff
This commit is contained in:
parent
6fe9b52d00
commit
8684f32db2
@ -3,6 +3,7 @@ require('./../client/assets/styles/skeleton.css');
|
|||||||
|
|
||||||
require('./../client/assets/styles/styles.less');
|
require('./../client/assets/styles/styles.less');
|
||||||
require('./../client/assets/styles/menu.less');
|
require('./../client/assets/styles/menu.less');
|
||||||
|
require('./../client/assets/styles/acp.less');
|
||||||
require('./../client/assets/styles/nav.less');
|
require('./../client/assets/styles/nav.less');
|
||||||
require('./../client/assets/styles/footer.less');
|
require('./../client/assets/styles/footer.less');
|
||||||
require('./../client/assets/styles/account.less');
|
require('./../client/assets/styles/account.less');
|
||||||
|
|||||||
@ -14,10 +14,13 @@ const addState = connect(
|
|||||||
const {
|
const {
|
||||||
account,
|
account,
|
||||||
user,
|
user,
|
||||||
|
msg,
|
||||||
} = state;
|
} = state;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
account, user,
|
account,
|
||||||
|
user,
|
||||||
|
msg,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -30,8 +33,13 @@ const addState = connect(
|
|||||||
dispatch(actions.setGames(list));
|
dispatch(actions.setGames(list));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function setMsg(msg) {
|
||||||
|
dispatch(actions.setMsg(msg));
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
setUser,
|
setUser,
|
||||||
|
setMsg,
|
||||||
setGames,
|
setGames,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@ -43,12 +51,8 @@ class AcpMain extends Component {
|
|||||||
super(props);
|
super(props);
|
||||||
|
|
||||||
this.state = {
|
this.state = {
|
||||||
account: {},
|
|
||||||
name: null,
|
|
||||||
id: null,
|
id: null,
|
||||||
msg: '',
|
name: null,
|
||||||
user: null,
|
|
||||||
games: [],
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -56,31 +60,38 @@ class AcpMain extends Component {
|
|||||||
const {
|
const {
|
||||||
setGames,
|
setGames,
|
||||||
setUser,
|
setUser,
|
||||||
|
setMsg,
|
||||||
|
|
||||||
|
msg,
|
||||||
} = args;
|
} = args;
|
||||||
|
|
||||||
const {
|
const {
|
||||||
msg,
|
|
||||||
name,
|
name,
|
||||||
id,
|
id,
|
||||||
} = state;
|
} = state;
|
||||||
|
|
||||||
|
const reset = () => {
|
||||||
|
setMsg(null);
|
||||||
|
this.setState({ id: null, name: null });
|
||||||
|
};
|
||||||
|
|
||||||
const getUser = () => {
|
const getUser = () => {
|
||||||
this.setState({ msg: null });
|
reset();
|
||||||
postData('/acp/user', { id, name })
|
postData('/acp/user', { id, name })
|
||||||
.then(res => res.json())
|
.then(res => res.json())
|
||||||
.then(data => {
|
.then(data => {
|
||||||
if (data.error) return this.setState({ msg: data.error });
|
if (data.error) return setMsg(data.error);
|
||||||
setUser(data);
|
setUser(data);
|
||||||
})
|
})
|
||||||
.catch(error => errorToast(error));
|
.catch(error => errorToast(error));
|
||||||
};
|
};
|
||||||
|
|
||||||
const gameList = () => {
|
const gameList = () => {
|
||||||
this.setState({ msg: null });
|
reset();
|
||||||
postData('/acp/game/list', { number: 20 })
|
postData('/acp/game/list', { number: 20 })
|
||||||
.then(res => res.json())
|
.then(res => res.json())
|
||||||
.then(data => {
|
.then(data => {
|
||||||
if (data.error) return this.setState({ msg: data.error });
|
if (data.error) return setMsg(data.error);
|
||||||
console.log(data);
|
console.log(data);
|
||||||
setGames(data.data);
|
setGames(data.data);
|
||||||
})
|
})
|
||||||
@ -88,11 +99,11 @@ class AcpMain extends Component {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const gameOpen = () => {
|
const gameOpen = () => {
|
||||||
this.setState({ msg: null });
|
reset();
|
||||||
postData('/acp/game/open')
|
postData('/acp/game/open')
|
||||||
.then(res => res.json())
|
.then(res => res.json())
|
||||||
.then(data => {
|
.then(data => {
|
||||||
if (data.error) return this.setState({ msg: data.error });
|
if (data.error) return setMsg(data.error);
|
||||||
console.log(data);
|
console.log(data);
|
||||||
setGames(data);
|
setGames(data);
|
||||||
})
|
})
|
||||||
@ -102,7 +113,7 @@ class AcpMain extends Component {
|
|||||||
return (
|
return (
|
||||||
<main class='menu'>
|
<main class='menu'>
|
||||||
<div class="top">
|
<div class="top">
|
||||||
<div>{msg}</div>
|
<div class="msg">{msg}</div>
|
||||||
<AcpUser />
|
<AcpUser />
|
||||||
<AcpGameList />
|
<AcpGameList />
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -3,8 +3,7 @@ const { Component } = require('preact');
|
|||||||
const { connect } = require('preact-redux');
|
const { connect } = require('preact-redux');
|
||||||
const linkState = require('linkstate').default;
|
const linkState = require('linkstate').default;
|
||||||
|
|
||||||
const axios = require('axios');
|
const { postData, errorToast } = require('./../../client/src/utils');
|
||||||
|
|
||||||
const actions = require('./actions');
|
const actions = require('./actions');
|
||||||
|
|
||||||
const addState = connect(
|
const addState = connect(
|
||||||
@ -14,22 +13,58 @@ const addState = connect(
|
|||||||
} = state;
|
} = state;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
user
|
user,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
function receiveDispatch(dispatch) {
|
||||||
|
function setUser(user) {
|
||||||
|
dispatch(actions.setUser(user));
|
||||||
|
}
|
||||||
|
|
||||||
|
function setMsg(msg) {
|
||||||
|
dispatch(actions.setMsg(msg));
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
setUser,
|
||||||
|
setMsg,
|
||||||
|
};
|
||||||
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
function AcpGameList(args) {
|
function AcpUser(args) {
|
||||||
const {
|
const {
|
||||||
user,
|
user,
|
||||||
|
setUser,
|
||||||
|
setMsg,
|
||||||
} = args;
|
} = args;
|
||||||
|
|
||||||
|
const {
|
||||||
|
credits,
|
||||||
|
} = this.state;
|
||||||
|
|
||||||
if (!user) return false;
|
if (!user) return false;
|
||||||
|
|
||||||
|
const reset = () => {
|
||||||
|
setMsg(null);
|
||||||
|
this.setState({ credits: null });
|
||||||
|
};
|
||||||
|
|
||||||
|
const addCredits = () => {
|
||||||
|
reset();
|
||||||
|
postData('/acp/user/credits', { id: user.id, credits })
|
||||||
|
.then(res => res.json())
|
||||||
|
.then(data => {
|
||||||
|
if (data.error) return setMsg(data.error);
|
||||||
|
return setUser(data);
|
||||||
|
})
|
||||||
|
.catch(error => setMsg(error));
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div class="user">
|
||||||
<h1>{user.name}</h1>
|
|
||||||
<dl>
|
<dl>
|
||||||
|
<h1>{user.name}</h1>
|
||||||
<dt>Id</dt>
|
<dt>Id</dt>
|
||||||
<dd>{user.id}</dd>
|
<dd>{user.id}</dd>
|
||||||
<dt>Credits</dt>
|
<dt>Credits</dt>
|
||||||
@ -37,8 +72,26 @@ function AcpGameList(args) {
|
|||||||
<dt>Subscribed</dt>
|
<dt>Subscribed</dt>
|
||||||
<dd>{user.subscribed.toString()}</dd>
|
<dd>{user.subscribed.toString()}</dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
<div>
|
||||||
|
<label for="current">Add Credits:</label>
|
||||||
|
<input
|
||||||
|
class="login-input"
|
||||||
|
type="number"
|
||||||
|
name="credits"
|
||||||
|
value={credits}
|
||||||
|
onInput={linkState(this, 'credits')}
|
||||||
|
placeholder="credits"
|
||||||
|
/>
|
||||||
|
<button
|
||||||
|
onClick={addCredits}>
|
||||||
|
Add Credits
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
)
|
<div>
|
||||||
|
<h2>Constructs</h2>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = addState(AcpGameList);
|
module.exports = addState(AcpUser);
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
export const setAccount = value => ({ type: 'SET_ACCOUNT', value });
|
export const setAccount = value => ({ type: 'SET_ACCOUNT', value });
|
||||||
export const setUser = value => ({ type: 'SET_USER', value });
|
export const setUser = value => ({ type: 'SET_USER', value });
|
||||||
|
export const setMsg = value => ({ type: 'SET_MSG', value });
|
||||||
export const setGames = value => ({ type: 'SET_GAMES', value });
|
export const setGames = value => ({ type: 'SET_GAMES', value });
|
||||||
|
|||||||
@ -13,5 +13,6 @@ function createReducer(defaultState, actionType) {
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
account: createReducer(null, 'SET_ACCOUNT'),
|
account: createReducer(null, 'SET_ACCOUNT'),
|
||||||
user: createReducer(null, 'SET_USER'),
|
user: createReducer(null, 'SET_USER'),
|
||||||
|
msg: createReducer(null, 'SET_MSG'),
|
||||||
games: createReducer([], 'SET_GAMES'),
|
games: createReducer([], 'SET_GAMES'),
|
||||||
};
|
};
|
||||||
|
|||||||
@ -12,3 +12,9 @@ cd $MNML_PATH/client
|
|||||||
rm -rf dist
|
rm -rf dist
|
||||||
npm i
|
npm i
|
||||||
npm run build
|
npm run build
|
||||||
|
|
||||||
|
echo "Building acp version $VERSION"
|
||||||
|
cd $MNML_PATH/acp
|
||||||
|
rm -rf dist
|
||||||
|
npm i
|
||||||
|
npm run build
|
||||||
|
|||||||
@ -6,8 +6,12 @@ MNML_PATH=$(realpath "$DIR/../")
|
|||||||
VERSION=$(<"$MNML_PATH/VERSION")
|
VERSION=$(<"$MNML_PATH/VERSION")
|
||||||
|
|
||||||
SERVER_BIN_DIR="/usr/local/mnml/bin"
|
SERVER_BIN_DIR="/usr/local/mnml/bin"
|
||||||
|
|
||||||
CLIENT_DIST_DIR="/var/lib/mnml/client"
|
CLIENT_DIST_DIR="/var/lib/mnml/client"
|
||||||
CLIENT_PUBLIC_DIR="/var/lib/mnml/public/current"
|
CLIENT_PUBLIC_DIR="/var/lib/mnml/public/client"
|
||||||
|
|
||||||
|
ACP_DIST_DIR="/var/lib/mnml/acp"
|
||||||
|
ACP_PUBLIC_DIR="/var/lib/mnml/public/acp"
|
||||||
|
|
||||||
# server updates
|
# server updates
|
||||||
echo "syncing server $VERSION "
|
echo "syncing server $VERSION "
|
||||||
@ -19,6 +23,11 @@ ssh -q mnml ls -lah "$SERVER_BIN_DIR"
|
|||||||
echo "syncing client $VERSION"
|
echo "syncing client $VERSION"
|
||||||
rsync -a --delete --delete-excluded "$MNML_PATH/client/dist/" mnml:"$CLIENT_DIST_DIR/$VERSION/"
|
rsync -a --delete --delete-excluded "$MNML_PATH/client/dist/" mnml:"$CLIENT_DIST_DIR/$VERSION/"
|
||||||
ssh -q mnml ln -nfs "$CLIENT_DIST_DIR/$VERSION" "$CLIENT_PUBLIC_DIR"
|
ssh -q mnml ln -nfs "$CLIENT_DIST_DIR/$VERSION" "$CLIENT_PUBLIC_DIR"
|
||||||
|
|
||||||
|
# acp updates
|
||||||
|
echo "syncing acp $VERSION"
|
||||||
|
rsync -a --delete --delete-excluded "$MNML_PATH/acp/dist/" mnml:"$ACP_DIST_DIR/$VERSION/"
|
||||||
|
ssh -q mnml ln -nfs "$ACP_DIST_DIR/$VERSION" "$ACP_PUBLIC_DIR"
|
||||||
ssh -q mnml ls -lah "/var/lib/mnml/public"
|
ssh -q mnml ls -lah "/var/lib/mnml/public"
|
||||||
|
|
||||||
echo "restarting mnml service"
|
echo "restarting mnml service"
|
||||||
|
|||||||
24
client/assets/styles/acp.less
Normal file
24
client/assets/styles/acp.less
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#mnml.acp {
|
||||||
|
user-select: text;
|
||||||
|
-moz-user-select: text;
|
||||||
|
-webkit-user-select: text;
|
||||||
|
-ms-user-select: text;
|
||||||
|
|
||||||
|
.bottom {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(4, 1fr);
|
||||||
|
}
|
||||||
|
|
||||||
|
.top {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
input {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.user {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(3, 1fr);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -88,19 +88,3 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#mnml.acp {
|
|
||||||
user-select: text;
|
|
||||||
-moz-user-select: text;
|
|
||||||
-webkit-user-select: text;
|
|
||||||
-ms-user-select: text;
|
|
||||||
|
|
||||||
.bottom {
|
|
||||||
display: grid;
|
|
||||||
grid-template-columns: repeat(4, 1fr);
|
|
||||||
}
|
|
||||||
|
|
||||||
input {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,7 +1,3 @@
|
|||||||
upstream mnml_dev {
|
|
||||||
server 0.0.0.0:41337;
|
|
||||||
}
|
|
||||||
|
|
||||||
error_log /var/log/mnml/nginx.log;
|
error_log /var/log/mnml/nginx.log;
|
||||||
|
|
||||||
upstream mnml_http {
|
upstream mnml_http {
|
||||||
@ -21,11 +17,17 @@ map $http_upgrade $connection_upgrade {
|
|||||||
# DEV
|
# DEV
|
||||||
server {
|
server {
|
||||||
location / {
|
location / {
|
||||||
root /var/lib/mnml/public/current;
|
root /var/lib/mnml/public/client;
|
||||||
index index.html;
|
index index.html;
|
||||||
try_files $uri $uri/ index.html;
|
try_files $uri $uri/ index.html;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
location /acp {
|
||||||
|
root /var/lib/mnml/public/acp;
|
||||||
|
index acp.html;
|
||||||
|
try_files $uri $uri/ acp.html;
|
||||||
|
}
|
||||||
|
|
||||||
location /imgs/ {
|
location /imgs/ {
|
||||||
root /var/lib/mnml/public/;
|
root /var/lib/mnml/public/;
|
||||||
try_files $uri $uri/ =404;
|
try_files $uri $uri/ =404;
|
||||||
@ -51,25 +53,3 @@ server {
|
|||||||
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
|
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
|
||||||
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
|
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
|
||||||
}
|
}
|
||||||
|
|
||||||
# http -> https
|
|
||||||
server {
|
|
||||||
server_name mnml.gg;
|
|
||||||
return 301 https://$host$request_uri;
|
|
||||||
}
|
|
||||||
|
|
||||||
server {
|
|
||||||
server_name minimal.gg;
|
|
||||||
return 301 https://mnml.gg$request_uri;
|
|
||||||
}
|
|
||||||
|
|
||||||
server {
|
|
||||||
server_name cryps.gg;
|
|
||||||
return 301 https://mnml.gg$request_uri;
|
|
||||||
}
|
|
||||||
|
|
||||||
server {
|
|
||||||
server_name dev.mnml.gg;
|
|
||||||
return 301 https://$host$request_uri;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|||||||
@ -396,9 +396,11 @@ impl Instance {
|
|||||||
|
|
||||||
// if you don't win, you lose
|
// if you don't win, you lose
|
||||||
// ties can happen if both players forfeit
|
// ties can happen if both players forfeit
|
||||||
|
// in this case we just finish the game and
|
||||||
|
// dock them 10k mmr
|
||||||
let winner_id = match game.winner() {
|
let winner_id = match game.winner() {
|
||||||
Some(w) => w.id,
|
Some(w) => w.id,
|
||||||
None => Uuid::nil(),
|
None => return Ok(self.finish()),
|
||||||
};
|
};
|
||||||
|
|
||||||
for player in game.players.iter() {
|
for player in game.players.iter() {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user