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