Compare commits

..

No commits in common. "7b5bfa4fe1b60ab914317d9870e242011753d848" and "63999a9e74fc3015b1641b5aa2b4a85dd5a7503e" have entirely different histories.

3 changed files with 16 additions and 77 deletions

View file

@ -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

View file

@ -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

View file

@ -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/