Merge pull request #392 from calebmer/hotfix/jwt-time
Fix time fetch on initialization
This commit is contained in:
@@ -3,6 +3,11 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
This project adheres to [Semantic Versioning](http://semver.org/).
|
This project adheres to [Semantic Versioning](http://semver.org/).
|
||||||
|
|
||||||
|
## Unreleased
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Miscalculation of time used for expiring tokens - @calebmer
|
||||||
|
|
||||||
## [0.3.0.1] - 2015-11-27
|
## [0.3.0.1] - 2015-11-27
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|||||||
+1
-1
@@ -13,4 +13,4 @@ dependencies:
|
|||||||
test:
|
test:
|
||||||
post:
|
post:
|
||||||
- cabal exec hlint -- -X QuasiQuotes src/**/*.hs test/**/*.hs
|
- cabal exec hlint -- -X QuasiQuotes src/**/*.hs test/**/*.hs
|
||||||
- cabal exec packdeps postgrest.cabal
|
- cabal exec packdeps postgrest.cabal || true
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import Data.Functor.Identity
|
|||||||
import Data.Monoid ((<>))
|
import Data.Monoid ((<>))
|
||||||
import Data.String.Conversions (cs)
|
import Data.String.Conversions (cs)
|
||||||
import Data.Text (Text)
|
import Data.Text (Text)
|
||||||
|
import Data.Time.Clock.POSIX (getPOSIXTime)
|
||||||
import qualified Hasql as H
|
import qualified Hasql as H
|
||||||
import qualified Hasql.Postgres as P
|
import qualified Hasql.Postgres as P
|
||||||
import Network.Wai
|
import Network.Wai
|
||||||
@@ -73,7 +74,8 @@ main = do
|
|||||||
dbStructure <- either hasqlError return dbOrError
|
dbStructure <- either hasqlError return dbOrError
|
||||||
|
|
||||||
runSettings appSettings $ middle $ \ req respond -> do
|
runSettings appSettings $ middle $ \ req respond -> do
|
||||||
|
time <- getPOSIXTime
|
||||||
body <- strictRequestBody req
|
body <- strictRequestBody req
|
||||||
resOrError <- liftIO $ H.session pool $ H.tx txSettings $
|
resOrError <- liftIO $ H.session pool $ H.tx txSettings $
|
||||||
runWithClaims conf (app dbStructure conf body) req
|
runWithClaims conf time (app dbStructure conf body) req
|
||||||
either (respond . pgErrResponse) respond resOrError
|
either (respond . pgErrResponse) respond resOrError
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ module PostgREST.Middleware where
|
|||||||
import Data.Maybe (fromMaybe)
|
import Data.Maybe (fromMaybe)
|
||||||
import Data.Text
|
import Data.Text
|
||||||
import Data.String.Conversions (cs)
|
import Data.String.Conversions (cs)
|
||||||
import Data.Time.Clock.POSIX (getPOSIXTime)
|
import Data.Time.Clock (NominalDiffTime)
|
||||||
import qualified Hasql as H
|
import qualified Hasql as H
|
||||||
import qualified Hasql.Postgres as P
|
import qualified Hasql.Postgres as P
|
||||||
|
|
||||||
@@ -23,20 +23,17 @@ import PostgREST.Auth (setRole, jwtClaims, claimsToSQL)
|
|||||||
import PostgREST.Config (AppConfig (..), corsPolicy)
|
import PostgREST.Config (AppConfig (..), corsPolicy)
|
||||||
import PostgREST.Error (errResponse)
|
import PostgREST.Error (errResponse)
|
||||||
|
|
||||||
import System.IO.Unsafe (unsafePerformIO)
|
|
||||||
|
|
||||||
import Prelude hiding(concat)
|
import Prelude hiding(concat)
|
||||||
|
|
||||||
import qualified Data.Vector as V
|
import qualified Data.Vector as V
|
||||||
import qualified Hasql.Backend as B
|
import qualified Hasql.Backend as B
|
||||||
import qualified Data.Map.Lazy as M
|
import qualified Data.Map.Lazy as M
|
||||||
|
|
||||||
runWithClaims :: forall s. AppConfig ->
|
runWithClaims :: forall s. AppConfig -> NominalDiffTime ->
|
||||||
(Request -> H.Tx P.Postgres s Response) ->
|
(Request -> H.Tx P.Postgres s Response) ->
|
||||||
Request -> H.Tx P.Postgres s Response
|
Request -> H.Tx P.Postgres s Response
|
||||||
runWithClaims conf app req = do
|
runWithClaims conf time app req = do
|
||||||
_ <- H.unitEx $ stmt setAnon
|
_ <- H.unitEx $ stmt setAnon
|
||||||
let time = unsafePerformIO getPOSIXTime
|
|
||||||
case split (== ' ') (cs auth) of
|
case split (== ' ') (cs auth) of
|
||||||
("Bearer" : tokenStr : _) ->
|
("Bearer" : tokenStr : _) ->
|
||||||
case jwtClaims jwtSecret tokenStr time of
|
case jwtClaims jwtSecret tokenStr time of
|
||||||
|
|||||||
+3
-1
@@ -12,6 +12,7 @@ import Data.String.Conversions (cs)
|
|||||||
import Data.Monoid
|
import Data.Monoid
|
||||||
import Data.Text hiding (map)
|
import Data.Text hiding (map)
|
||||||
import qualified Data.Vector as V
|
import qualified Data.Vector as V
|
||||||
|
import Data.Time.Clock.POSIX (getPOSIXTime)
|
||||||
import Control.Monad (void)
|
import Control.Monad (void)
|
||||||
import Control.Applicative
|
import Control.Applicative
|
||||||
|
|
||||||
@@ -59,9 +60,10 @@ withApp perform = do
|
|||||||
db <- either (fail . show) return dbOrError
|
db <- either (fail . show) return dbOrError
|
||||||
|
|
||||||
perform $ middle $ \req resp -> do
|
perform $ middle $ \req resp -> do
|
||||||
|
time <- getPOSIXTime
|
||||||
body <- strictRequestBody req
|
body <- strictRequestBody req
|
||||||
result <- liftIO $ H.session pool $ H.tx txSettings
|
result <- liftIO $ H.session pool $ H.tx txSettings
|
||||||
$ runWithClaims cfg (app db cfg body) req
|
$ runWithClaims cfg time (app db cfg body) req
|
||||||
either (resp . pgErrResponse) resp result
|
either (resp . pgErrResponse) resp result
|
||||||
|
|
||||||
where middle = defaultMiddle
|
where middle = defaultMiddle
|
||||||
|
|||||||
Reference in New Issue
Block a user