Skip to content

Commit d762400

Browse files
committed
wip
1 parent 7b9feef commit d762400

File tree

5 files changed

+30
-110
lines changed

5 files changed

+30
-110
lines changed

ghcjs/cryptogram/cryptogram.cabal

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -89,17 +89,11 @@ common pkg
8989
, base
9090
, base64-bytestring
9191
, bytestring
92-
, containers
9392
, functora-ghcjs
94-
, microlens
9593
, miso
9694
, miso-functora
9795
, modern-uri
98-
, network-uri
99-
, regex-compat
10096
, syb
101-
, time
102-
, xlsx
10397

10498
if flag(ghcid)
10599
build-depends: jsaddle
@@ -152,5 +146,4 @@ test-suite cryptogram-test
152146
build-depends:
153147
, aeson
154148
, hspec
155-
, optics-core
156149
, quickcheck-instances

ghcjs/cryptogram/src/App/Init.hs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,16 @@ where
55

66
import App.Types
77
import Functora.Miso.Prelude
8-
import qualified Functora.Web as Web
98

109
newModel ::
1110
( MonadThrow m,
1211
MonadUnliftIO m
1312
) =>
14-
Web.Opts ->
1513
MVar (Action -> IO ()) ->
1614
Maybe Model ->
1715
Maybe (St Unique) ->
1816
m Model
19-
newModel webOpts sink mMod mApp = do
17+
newModel sink mMod mApp = do
2018
defSt <- maybe (liftIO newSt) pure $ mMod ^? _Just . #modelState
2119
donate <- newDonateViewer
2220
pure
@@ -26,9 +24,7 @@ newModel webOpts sink mMod mApp = do
2624
modelDonate = Closed,
2725
modelLoading = True,
2826
modelState = fromMaybe defSt mApp,
29-
modelUriViewer = mempty,
30-
modelDonateViewer = donate,
31-
modelWebOpts = webOpts
27+
modelDonateViewer = donate
3228
}
3329

3430
newDonateViewer :: (MonadIO m) => m [FieldPair DynamicField Unique]

ghcjs/cryptogram/src/App/Types.hs

Lines changed: 17 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,8 @@ module App.Types
88
newSt,
99
newFieldPair,
1010
newFieldPairId,
11-
mkShortUri,
12-
unShortUri,
13-
mkLongUri,
14-
unLongUri,
11+
mkUri,
12+
unUri,
1513
emitter,
1614
icon,
1715
vsn,
@@ -26,6 +24,7 @@ import qualified Data.ByteString.Lazy as BL
2624
import Data.Functor.Barbie
2725
import qualified Data.Generics as Syb
2826
import qualified Data.Version as Version
27+
import qualified Functora.Aes as Aes
2928
import Functora.Cfg
3029
import Functora.Miso.Prelude
3130
import qualified Functora.Miso.Theme as Theme
@@ -37,7 +36,6 @@ import qualified Functora.Miso.Types as FM
3736
import qualified Functora.Miso.Widgets.Field as Field
3837
import qualified Functora.Miso.Widgets.Icon as Icon
3938
import qualified Functora.Prelude as Prelude
40-
import qualified Functora.Web as Web
4139
import qualified Paths_cryptogram as Paths
4240
import qualified Text.URI as URI
4341

@@ -47,9 +45,7 @@ data Model = Model
4745
modelDonate :: OpenedOrClosed,
4846
modelLoading :: Bool,
4947
modelState :: St Unique,
50-
modelUriViewer :: [FieldPair DynamicField Unique],
51-
modelDonateViewer :: [FieldPair DynamicField Unique],
52-
modelWebOpts :: Web.Opts
48+
modelDonateViewer :: [FieldPair DynamicField Unique]
5349
}
5450
deriving stock (Eq, Generic)
5551

@@ -61,10 +57,9 @@ data Action
6157
| PushUpdate (Update Model)
6258

6359
data St f = St
64-
{ stPwd :: Field Unicode f,
65-
stEncReq :: Field Unicode f,
66-
stDecReq :: Field Unicode f,
67-
stDecRes :: Field Unicode f,
60+
{ stKm :: Aes.Km,
61+
stIkm :: Field Unicode f,
62+
stMsg :: Field Unicode f,
6863
stEnableTheme :: Bool,
6964
stTheme :: Theme
7065
}
@@ -78,10 +73,6 @@ deriving stock instance (Hkt f) => Show (St f)
7873

7974
deriving stock instance (Hkt f) => Data (St f)
8075

81-
deriving via (GenericType (St f)) instance (Hkt f) => ToQuery (St f)
82-
83-
deriving via (GenericType (St Identity)) instance FromQuery (St Identity)
84-
8576
instance FunctorB St
8677

8778
instance TraversableB St
@@ -90,16 +81,14 @@ deriving via GenericType (St Identity) instance Binary (St Identity)
9081

9182
newSt :: (MonadIO m) => m (St Unique)
9283
newSt = do
93-
pwd <- newTextField mempty
94-
encReq <- newTextField mempty
95-
decReq <- newTextField mempty
96-
decRes <- newTextField mempty
84+
km <- Aes.randomKm 32
85+
ikm <- newPasswordField . decodeUtf8 $ km ^. #kmIkm . #unIkm
86+
msg <- newTextField mempty
9787
pure
9888
St
99-
{ stPwd = pwd,
100-
stEncReq = encReq,
101-
stDecReq = decReq,
102-
stDecRes = decRes,
89+
{ stKm = km,
90+
stIkm = ikm,
91+
stMsg = msg,
10392
stEnableTheme = True,
10493
stTheme = Theme.Matcha
10594
}
@@ -130,19 +119,8 @@ newFieldPairId key val = do
130119
. #fieldOptsAllowCopy
131120
.~ False
132121

133-
mkShortUri :: (MonadThrow m) => Model -> m URI
134-
mkShortUri st = do
135-
uri <- mkURI $ from @Unicode @Prelude.Text baseUri
136-
let qxs = toQuery . uniqueToIdentity $ modelState st
137-
pure $ uri {URI.uriQuery = qxs}
138-
139-
unShortUri :: (MonadIO m, MonadThrow m) => URI -> m (St Unique)
140-
unShortUri uri = do
141-
st <- either throw pure . fromQuery $ URI.uriQuery uri
142-
identityToUnique st
143-
144-
mkLongUri :: (MonadThrow m) => Model -> m URI
145-
mkLongUri st = do
122+
mkUri :: (MonadThrow m) => Model -> m URI
123+
mkUri st = do
146124
uri <- mkURI $ from @Unicode @Prelude.Text baseUri
147125
qxs <-
148126
stQuery
@@ -169,13 +147,13 @@ mkLongUri st = do
169147
{ URI.uriQuery = qxs
170148
}
171149

172-
unLongUri ::
150+
unUri ::
173151
( MonadIO m,
174152
MonadThrow m
175153
) =>
176154
URI ->
177155
m (Maybe (St Unique))
178-
unLongUri uri = do
156+
unUri uri = do
179157
kSt <- URI.mkQueryKey "d"
180158
case qsGet kSt $ URI.uriQuery uri of
181159
Nothing -> pure Nothing

ghcjs/cryptogram/src/Main.hs

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import qualified Data.Generics as Syb
2222
import qualified Data.Map as Map
2323
import qualified Functora.Miso.Jsm as Jsm
2424
import Functora.Miso.Prelude
25-
import qualified Functora.Web as Web
2625
import Language.Javascript.JSaddle ((!))
2726
import qualified Language.Javascript.JSaddle as JS
2827
import qualified Miso
@@ -44,10 +43,9 @@ main =
4443
)
4544
$ do
4645
uri <- URI.mkURI . inspect =<< getCurrentURI
47-
mSt <- handleAny (const $ pure Nothing) . fmap Just $ unShortUri uri
48-
web <- getWebOpts
46+
mSt <- handleAny (const $ pure Nothing) $ unUri uri
4947
sink <- newEmptyMVar
50-
st <- newModel web sink Nothing mSt
48+
st <- newModel sink Nothing mSt
5149
startApp
5250
App
5351
{ model = st,
@@ -60,15 +58,6 @@ main =
6058
logLevel = Off
6159
}
6260

63-
getWebOpts :: JSM Web.Opts
64-
getWebOpts = do
65-
#ifdef wasi_HOST_OS
66-
ctx <- JS.askJSM
67-
pure $ Web.defOpts ctx
68-
#else
69-
pure Web.defOpts
70-
#endif
71-
7261
#if !defined(__GHCJS__) && !defined(ghcjs_HOST_OS) && !defined(wasi_HOST_OS)
7362
runApp :: JSM () -> IO ()
7463
runApp app = do
@@ -133,7 +122,7 @@ updateModel (InitUpdate mShortSt) prevSt = do
133122
.~ False
134123
Just {} -> do
135124
let st = mShortSt
136-
finSt <- newModel (nextSt ^. #modelWebOpts) mvSink (Just nextSt) st
125+
finSt <- newModel mvSink (Just nextSt) st
137126
liftIO
138127
. sink
139128
. PushUpdate
@@ -143,9 +132,9 @@ updateModel (InitUpdate mShortSt) prevSt = do
143132
& #modelLoading
144133
.~ False
145134
Just uri -> do
146-
mLongSt <- unLongUri uri
135+
mLongSt <- unUri uri
147136
let st = mShortSt <|> mLongSt
148-
finSt <- newModel (nextSt ^. #modelWebOpts) mvSink (Just nextSt) st
137+
finSt <- newModel mvSink (Just nextSt) st
149138
liftIO
150139
. sink
151140
. PushUpdate
@@ -182,7 +171,7 @@ updateModel (EvalUpdate f) st = do
182171
. PushUpdate
183172
. PureUpdate
184173
$ unload
185-
longUri <- mkLongUri next
174+
longUri <- mkUri next
186175
Jsm.insertStorage ("cryptogram-" <> vsn) longUri
187176
pure Noop,
188177
do
Lines changed: 5 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,13 @@
11
module App.TypesSpec (spec) where
22

3+
import App.Init
34
import App.Types
4-
import App.Widgets.Templates
55
import qualified Data.Aeson as A
6-
import qualified Data.Generics as Syb
76
import Functora.Miso.Prelude hiding (prop)
8-
import qualified Functora.Web as Web
9-
import qualified Optics.Generic as Ops
10-
import qualified Optics.Setter as Ops
117
import Test.Hspec
128
import Test.Hspec.QuickCheck
139
import Test.QuickCheck.Instances ()
1410

15-
data Expr
16-
= Lit Int
17-
| Add Expr Expr
18-
| Sub Expr Expr
19-
| Mul Expr Expr
20-
deriving stock (Eq, Ord, Show, Data, Generic)
21-
22-
expr :: Expr
23-
expr = Add (Sub (Lit 1) (Lit 2)) (Lit 3)
24-
25-
fun :: Expr -> Expr
26-
fun = \case
27-
Add a b -> Mul a b
28-
Lit i -> Lit (i + 1)
29-
a -> a
30-
3111
spec :: Spec
3212
spec = do
3313
prop "Identity/JSON" $ \txt -> do
@@ -38,27 +18,11 @@ spec = do
3818
txtJson `shouldBe` wrapJson
3919
A.decode txtJson `shouldBe` Just txt
4020
A.decode wrapJson `shouldBe` Just wrap
41-
it "syb/everywhere"
42-
-- good?
43-
$ Syb.everywhere (Syb.mkT fun) expr
44-
`shouldBe` Mul (Sub (Lit 2) (Lit 3)) (Lit 4)
45-
it "generic-lens/types"
46-
-- bad?
47-
$ over types fun expr
48-
`shouldBe` Mul (Sub (Lit 1) (Lit 2)) (Lit 3)
49-
it "optics-core/gplate"
50-
-- bad?
51-
$ Ops.over Ops.gplate fun expr
52-
`shouldBe` Add (Sub (Lit 1) (Lit 2)) (Lit 4)
53-
-- it "soplate"
54-
-- -- good?
55-
-- $ over soplate fun expr
56-
-- `shouldBe` Mul (Sub (Lit 2) (Lit 3)) (Lit 4)
5721
it "serialization" $ do
5822
var <- newEmptyMVar
59-
st0 <- newModel Web.defOpts var Nothing Nothing
60-
uri <- mkLongUri st0
61-
mSt <- unLongUri uri
62-
st1 <- newModel Web.defOpts var Nothing mSt
23+
st0 <- newModel var Nothing Nothing
24+
uri <- mkUri st0
25+
mSt <- unUri uri
26+
st1 <- newModel var Nothing mSt
6327
(st0 ^. #modelState . to uniqueToIdentity)
6428
`shouldBe` (st1 ^. #modelState . to uniqueToIdentity)

0 commit comments

Comments
 (0)