Skip to content

Commit c74de17

Browse files
committed
Hide value contructor
1 parent 61a326b commit c74de17

File tree

2 files changed

+25
-14
lines changed

2 files changed

+25
-14
lines changed

src/Node/Simple/Jwt.purs

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
module Node.Simple.Jwt
22
( Secret
3-
, Jwt(..)
3+
, Jwt
44
, Algorithm(..)
55
, JwtError(..)
6+
, fromString
7+
, toString
68
, decode
79
, encode
810
) where
@@ -17,7 +19,8 @@ import Data.String.Regex (replace)
1719
import Data.String.Regex.Flags (global)
1820
import Data.String.Regex.Unsafe (unsafeRegex)
1921
import Effect (Effect)
20-
import Node.Buffer (Buffer, fromString, toString)
22+
import Node.Buffer (Buffer)
23+
import Node.Buffer as Buffer
2124
import Node.Crypto.Hash as Hash
2225
import Node.Crypto.Hmac as Hmac
2326
import Node.Encoding (Encoding(..))
@@ -59,6 +62,14 @@ instance showJwtError :: Show JwtError where
5962

6063
derive instance eqJwtError :: Eq JwtError
6164

65+
-- | Convert a `String` to a `Jwt`.
66+
fromString :: String -> Jwt
67+
fromString = Jwt
68+
69+
-- | Convert a `Jwt` to a `String`.
70+
toString :: Jwt -> String
71+
toString (Jwt x) = x
72+
6273
-- | Decode JWT with signature verification.
6374
decode :: forall payload. ReadForeign payload => Secret -> Jwt -> Effect (Either JwtError payload)
6475
decode secret (Jwt jwt) =
@@ -104,7 +115,7 @@ algorithmFromString alg
104115

105116
base64URLDecode :: String -> Effect String
106117
base64URLDecode x =
107-
(fromString (unescape x) Base64 :: Effect Buffer) >>= toString UTF8
118+
(Buffer.fromString (unescape x) Base64 :: Effect Buffer) >>= Buffer.toString UTF8
108119

109120
unescape :: String -> String
110121
unescape x =
@@ -129,7 +140,7 @@ sign secret alg input =
129140

130141
base64URLEncode :: String -> Effect String
131142
base64URLEncode x =
132-
escape <$> ((fromString x UTF8 :: Effect Buffer) >>= toString Base64)
143+
escape <$> ((Buffer.fromString x UTF8 :: Effect Buffer) >>= Buffer.toString Base64)
133144

134145
escape :: String -> String
135146
escape =

test/Main.purs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import Prelude
55
import Data.Either (Either(..))
66
import Effect (Effect)
77
import Effect.Class (liftEffect)
8-
import Node.Simple.Jwt (Algorithm(..), Jwt(..), JwtError(..), decode, encode)
8+
import Node.Simple.Jwt (Algorithm(..), Jwt, JwtError(..), decode, encode, fromString)
99
import Test.Unit (suite, test)
1010
import Test.Unit.Assert as Assert
1111
import Test.Unit.Main (runTest)
@@ -29,30 +29,30 @@ main = runTest do
2929
payloadOrErr <- liftEffect $ decode secret jwtByHS256
3030
Assert.equal (Right payload) payloadOrErr
3131
test "invalid token" do
32-
(payloadOrErr :: Either JwtError Payload) <- liftEffect $ decode secret (Jwt "fjaie.afeoafe.cadiwo.ofwo")
32+
(payloadOrErr :: Either JwtError Payload) <- liftEffect $ decode secret (fromString "fjaie.afeoafe.cadiwo.ofwo")
3333
Assert.equal (Left InvalidTokenError) payloadOrErr
3434
test "verify error" do
35-
(payloadOrErr :: Either JwtError Payload) <- liftEffect $ decode secret (Jwt "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0c3ViIn0.Xy3Gvp5nlc")
35+
(payloadOrErr :: Either JwtError Payload) <- liftEffect $ decode secret (fromString "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0c3ViIn0.Xy3Gvp5nlc")
3636
Assert.equal (Left VerifyError) payloadOrErr
3737
test "decode error" do
38-
(payloadOrErr :: Either JwtError Payload) <- liftEffect $ decode secret (Jwt "dfiaofao.ffifeadl.afwoefiqw")
38+
(payloadOrErr :: Either JwtError Payload) <- liftEffect $ decode secret (fromString "dfiaofao.ffifeadl.afwoefiqw")
3939
Assert.equal (Left DecodeError) payloadOrErr
4040
suite "HS512" do
4141
test "success" do
4242
payloadOrErr <- liftEffect $ decode secret jwtByHS512
4343
Assert.equal (Right payload) payloadOrErr
4444
test "invalid token" do
45-
(payloadOrErr :: Either JwtError Payload) <- liftEffect $ decode secret (Jwt "fjaie.afeoafe.cadiwo.ofwo")
45+
(payloadOrErr :: Either JwtError Payload) <- liftEffect $ decode secret (fromString "fjaie.afeoafe.cadiwo.ofwo")
4646
Assert.equal (Left InvalidTokenError) payloadOrErr
4747
test "verify error" do
48-
(payloadOrErr :: Either JwtError Payload) <- liftEffect $ decode secret (Jwt "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0c3ViIn0.Xy3Gvp5nlc")
48+
(payloadOrErr :: Either JwtError Payload) <- liftEffect $ decode secret (fromString "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0c3ViIn0.Xy3Gvp5nlc")
4949
Assert.equal (Left VerifyError) payloadOrErr
5050
test "decode error" do
51-
(payloadOrErr :: Either JwtError Payload) <- liftEffect $ decode secret (Jwt "848q4jfifewww.8382qu3lds.389rnekjffa")
51+
(payloadOrErr :: Either JwtError Payload) <- liftEffect $ decode secret (fromString "848q4jfifewww.8382qu3lds.389rnekjffa")
5252
Assert.equal (Left DecodeError) payloadOrErr
5353
suite "Unknown algorithm" do
5454
test "not supported algorithm error" do
55-
(payloadOrErr :: Either JwtError Payload) <- liftEffect $ decode secret (Jwt "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzM4NCJ9.eyJzd.Xy3Gvp")
55+
(payloadOrErr :: Either JwtError Payload) <- liftEffect $ decode secret (fromString "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzM4NCJ9.eyJzd.Xy3Gvp")
5656
Assert.equal (Left NotSupportedAlgorithmError) payloadOrErr
5757

5858
payload :: Payload
@@ -62,7 +62,7 @@ secret :: String
6262
secret = "testsecret"
6363

6464
jwtByHS256 :: Jwt
65-
jwtByHS256 = Jwt "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0c3ViIn0.Xy3Gvp5nlca62KqH66kDKeadYM99jRP-e2S--qVYdbs"
65+
jwtByHS256 = fromString "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0c3ViIn0.Xy3Gvp5nlca62KqH66kDKeadYM99jRP-e2S--qVYdbs"
6666

6767
jwtByHS512 :: Jwt
68-
jwtByHS512 = Jwt "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0c3ViIn0.Z5bsx4og_2UL-1WyxulgXXA7VtC01OhFVivvT_C8wS_uY3QUaqDhLzVsTBACNyv8z-VoYkhboTzlBiZ4Gk5mLQ"
68+
jwtByHS512 = fromString "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0c3ViIn0.Z5bsx4og_2UL-1WyxulgXXA7VtC01OhFVivvT_C8wS_uY3QUaqDhLzVsTBACNyv8z-VoYkhboTzlBiZ4Gk5mLQ"

0 commit comments

Comments
 (0)