Compare commits
No commits in common. "7b5bfa4fe1b60ab914317d9870e242011753d848" and "63999a9e74fc3015b1641b5aa2b4a85dd5a7503e" have entirely different histories.
7b5bfa4fe1
...
63999a9e74
3 changed files with 16 additions and 77 deletions
|
|
@ -8,7 +8,7 @@ VOLUME ["/app"]
|
||||||
CMD [ "yarn", "dev" ]
|
CMD [ "yarn", "dev" ]
|
||||||
|
|
||||||
|
|
||||||
FROM node:lts AS prod
|
FROM node:lts-alpine AS prod
|
||||||
ENV NODE_ENV production
|
ENV NODE_ENV production
|
||||||
# some dir for our code
|
# some dir for our code
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
|
||||||
|
|
@ -20,19 +20,17 @@ class FFTCGSESSION
|
||||||
@db.on 'error', (err) =>
|
@db.on 'error', (err) =>
|
||||||
logger.error err.message
|
logger.error err.message
|
||||||
|
|
||||||
sessionKey: (digest) -> "session.#{digest}"
|
start: (data) ->
|
||||||
gameKey: (digest) -> "game.#{digest}"
|
|
||||||
|
|
||||||
start: (userid) ->
|
|
||||||
new Promise (resolve) =>
|
new Promise (resolve) =>
|
||||||
# hash userid
|
# hash data
|
||||||
hmac = crypto.createHmac 'sha256', Math.random().toString()
|
hmac = crypto.createHmac 'sha256', Math.random().toString()
|
||||||
hmac.update userid.toString()
|
hmac.update (JSON.stringify data)
|
||||||
digest = hmac.digest 'base64'
|
digest = hmac.digest 'base64'
|
||||||
|
logger.debug 'digest', digest
|
||||||
|
|
||||||
# push (hash, userid) into DB for the configured timespan
|
# push (hash, data) into DB for the configured timespan
|
||||||
@db.setex (@sessionKey digest), EXPIRY.login * 86400, userid, =>
|
@db.setex digest, EXPIRY.login * 86400, (JSON.stringify data), (err) ->
|
||||||
logger.info "OK '#{@sessionKey digest}' created"
|
logger.info "OK '#{digest}' created"
|
||||||
# return cookie data
|
# return cookie data
|
||||||
resolve
|
resolve
|
||||||
value: digest
|
value: digest
|
||||||
|
|
@ -42,83 +40,23 @@ class FFTCGSESSION
|
||||||
destroy: (digest) ->
|
destroy: (digest) ->
|
||||||
new Promise (resolve, reject) =>
|
new Promise (resolve, reject) =>
|
||||||
# delete hash immediately
|
# delete hash immediately
|
||||||
@db.del (@sessionKey digest), (err, res) =>
|
@db.del digest, (err, res) ->
|
||||||
if res == 0
|
if res == 0
|
||||||
reject null
|
reject null
|
||||||
else
|
else
|
||||||
logger.info "OK '#{@sessionKey digest}' deleted"
|
logger.info "OK '#{digest}' deleted"
|
||||||
resolve null
|
resolve null
|
||||||
|
|
||||||
check: (digest) ->
|
check: (digest) ->
|
||||||
new Promise (resolve, reject) =>
|
new Promise (resolve, reject) =>
|
||||||
# refresh expiry timer on digest
|
# refresh expiry timer on digest
|
||||||
@db.expire (@sessionKey digest), EXPIRY.login * 86400, (err, res) =>
|
@db.expire digest, EXPIRY.login * 86400, (err, res) =>
|
||||||
if res == 0
|
if res == 0
|
||||||
reject null
|
reject null
|
||||||
|
|
||||||
else
|
else
|
||||||
@db.get (@sessionKey digest), (err, res) =>
|
@db.get digest, (err, res) ->
|
||||||
logger.debug "OK '#{@sessionKey digest}' resumed"
|
logger.debug "OK '#{digest}' resumed"
|
||||||
resolve res
|
resolve (JSON.parse res)
|
||||||
|
|
||||||
newGame: (userid) ->
|
|
||||||
new Promise (resolve, reject) =>
|
|
||||||
# generate hash
|
|
||||||
hmac = crypto.createHmac 'sha256', Math.random().toString()
|
|
||||||
hmac.update userid.toString()
|
|
||||||
digest = hmac.digest 'base64'
|
|
||||||
|
|
||||||
# insert game key
|
|
||||||
@db.hsetnx (@gameKey digest), 'owner', userid, (err, res) =>
|
|
||||||
if res == 0
|
|
||||||
@db.del (@gameKey digest)
|
|
||||||
reject null
|
|
||||||
|
|
||||||
else
|
|
||||||
@db.expire (@gameKey digest), EXPIRY.game * 86400, (err, res) =>
|
|
||||||
if res == 0
|
|
||||||
@db.del (@gameKey digest)
|
|
||||||
reject null
|
|
||||||
|
|
||||||
else
|
|
||||||
# return game ID
|
|
||||||
logger.info "OK '#{@gameKey digest}' created"
|
|
||||||
resolve digest
|
|
||||||
|
|
||||||
joinGame: (digest, userid) ->
|
|
||||||
new Promise (resolve, reject) =>
|
|
||||||
# refresh expiry timer on digest
|
|
||||||
@db.expire (@gameKey digest), EXPIRY.game * 86400, (err, res) =>
|
|
||||||
if res == 0
|
|
||||||
reject null
|
|
||||||
|
|
||||||
else
|
|
||||||
# insert opponent value
|
|
||||||
@db.hsetnx (@gameKey digest), 'opponent', userid, (err, res) =>
|
|
||||||
if res == 0
|
|
||||||
reject null
|
|
||||||
|
|
||||||
else
|
|
||||||
# return game ID
|
|
||||||
logger.info "OK '#{@gameKey digest}' joined"
|
|
||||||
resolve digest
|
|
||||||
|
|
||||||
updateGame: (digest, state) ->
|
|
||||||
new Promise (resolve, reject) =>
|
|
||||||
# refresh expiry timer on digest
|
|
||||||
@db.expire (@gameKey digest), EXPIRY.game * 86400, (err, res) =>
|
|
||||||
if res == 0
|
|
||||||
reject null
|
|
||||||
|
|
||||||
else
|
|
||||||
# update state value
|
|
||||||
@db.hset (@gameKey digest), 'state', (JSON.stringify state), (err, res) =>
|
|
||||||
if res == 0
|
|
||||||
reject null
|
|
||||||
|
|
||||||
else
|
|
||||||
# return game ID
|
|
||||||
logger.info "OK '#{@gameKey digest}' updated"
|
|
||||||
resolve digest
|
|
||||||
|
|
||||||
module.exports = new FFTCGSESSION
|
module.exports = new FFTCGSESSION
|
||||||
|
|
|
||||||
|
|
@ -18,4 +18,5 @@ COPY . .
|
||||||
RUN yarn build
|
RUN yarn build
|
||||||
|
|
||||||
FROM nginx:stable-alpine AS prod
|
FROM nginx:stable-alpine AS prod
|
||||||
COPY --from=build /app/dist /usr/share/nginx/html
|
COPY --from=build /app/index.html /app/favicon.ico /usr/share/nginx/html/
|
||||||
|
COPY --from=build /app/dist/* /usr/share/nginx/html/dist/
|
||||||
|
|
|
||||||
Reference in a new issue