Skip to content

Commit 77ec42a

Browse files
committed
wip
1 parent b0950ed commit 77ec42a

File tree

3 files changed

+35
-110
lines changed

3 files changed

+35
-110
lines changed

ghcjs/cryptogram/src/App/Init.hs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,18 @@ module App.Init
33
)
44
where
55

6+
import qualified App.Jsm as Jsm
67
import App.Types
78
import Functora.Miso.Prelude
89

910
newModel ::
10-
( MonadThrow m,
11-
MonadUnliftIO m
12-
) =>
1311
MVar (Action -> IO ()) ->
1412
Maybe Model ->
1513
Maybe (St Unique) ->
16-
m Model
14+
JSM Model
1715
newModel sink mMod mApp = do
1816
defSt <- maybe (liftIO newSt) pure $ mMod ^? _Just . #modelState
17+
chatId <- Jsm.getChatId
1918
donate <- newDonateViewer
2019
pure
2120
Model
@@ -24,6 +23,7 @@ newModel sink mMod mApp = do
2423
modelDonate = Closed,
2524
modelLoading = True,
2625
modelState = fromMaybe defSt mApp,
26+
modelChatId = chatId,
2727
modelDonateViewer = donate
2828
}
2929

ghcjs/cryptogram/src/App/Types.hs

Lines changed: 19 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ module App.Types
88
newSt,
99
newFieldPair,
1010
mkUri,
11-
unUri,
1211
emitter,
1312
icon,
1413
vsn,
@@ -18,18 +17,14 @@ module App.Types
1817
)
1918
where
2019

21-
import qualified Data.ByteString.Base64.URL as B64URL
22-
import qualified Data.ByteString.Lazy as BL
2320
import Data.Functor.Barbie
24-
import qualified Data.Generics as Syb
2521
import qualified Data.Version as Version
2622
import qualified Functora.Aes as Aes
2723
import Functora.Cfg
2824
import Functora.Miso.Prelude
2925
import qualified Functora.Miso.Theme as Theme
3026
import Functora.Miso.Types as X hiding (newFieldPair)
3127
import qualified Functora.Miso.Types as FM
32-
import qualified Functora.Miso.Widgets.Field as Field
3328
import qualified Functora.Miso.Widgets.Icon as Icon
3429
import qualified Functora.Prelude as Prelude
3530
import qualified Paths_cryptogram as Paths
@@ -41,16 +36,17 @@ data Model = Model
4136
modelDonate :: OpenedOrClosed,
4237
modelLoading :: Bool,
4338
modelState :: St Unique,
39+
modelChatId :: Int,
4440
modelDonateViewer :: [FieldPair DynamicField Unique]
4541
}
4642
deriving stock (Eq, Generic)
4743

4844
data Action
4945
= Noop
50-
| SyncInputs
51-
| InitUpdate (Maybe (St Unique))
46+
| InitUpdate
5247
| EvalUpdate (Model -> Model)
5348
| PushUpdate (Update Model)
49+
| SyncInputs
5450

5551
data St f = St
5652
{ stReq :: StReq,
@@ -78,7 +74,7 @@ deriving via GenericType (St Identity) instance Binary (St Identity)
7874

7975
data StReq = StReq
8076
{ stReqKm :: Aes.Km,
81-
stReqMsg :: Maybe Aes.Crypto
77+
stReqCpt :: Maybe Aes.Crypto
8278
}
8379
deriving stock (Eq, Ord, Show, Read, Data, Generic)
8480
deriving (Binary) via GenericType StReq
@@ -116,71 +112,27 @@ newFieldPair key val = do
116112
mkUri :: (MonadThrow m) => Model -> m URI
117113
mkUri st = do
118114
uri <- mkURI $ from @Unicode @Prelude.Text baseUri
119-
qxs <-
120-
stQuery
121-
. Syb.everywhere
122-
( Syb.mkT
123-
$ const Blurred
124-
)
125-
. Syb.everywhere
126-
( Syb.mkT $ \x ->
127-
if x ^. #fieldType /= FieldTypeImage
128-
then x :: Field DynamicField Identity
129-
else
130-
x
131-
& #fieldInput
132-
.~ mempty
133-
& #fieldOutput
134-
.~ DynamicFieldText mempty
135-
)
136-
$ uniqueToIdentity
137-
( st ^. #modelState
138-
)
115+
key <- URI.mkQueryKey "startattach"
116+
val <-
117+
URI.mkQueryValue
118+
$ encodeBinaryB64Url
119+
StReq
120+
{ stReqKm = km,
121+
stReqCpt = Just cpt
122+
}
139123
pure
140124
$ uri
141-
{ URI.uriQuery = qxs
125+
{ URI.uriQuery = [URI.QueryParam key val]
142126
}
143-
144-
unUri ::
145-
( MonadIO m,
146-
MonadThrow m
147-
) =>
148-
URI ->
149-
m (Maybe (St Unique))
150-
unUri uri = do
151-
kSt <- URI.mkQueryKey "d"
152-
case qsGet kSt $ URI.uriQuery uri of
153-
Nothing -> pure Nothing
154-
Just tSt -> do
155-
bSt <- either throwString pure . B64URL.decode $ encodeUtf8 tSt
156-
iSt <- either (throwString . thd3) pure $ decodeBinary bSt
157-
uSt <-
158-
identityToUnique
159-
$ Syb.everywhere (Syb.mkT Field.expandDynamicField) iSt
160-
pure
161-
$ Just uSt
162-
163-
stQuery :: (MonadThrow m) => St Identity -> m [URI.QueryParam]
164-
stQuery st = do
165-
kSt <- URI.mkQueryKey "startapp"
166-
vSt <- URI.mkQueryValue <=< encode $ encodeBinary st
167-
pure [URI.QueryParam kSt vSt]
168127
where
169-
encode :: (MonadThrow m) => BL.ByteString -> m Text
170-
encode =
171-
either throw pure
172-
. decodeUtf8Strict
173-
. B64URL.encode
174-
. from @BL.ByteString @ByteString
128+
km = st ^. #modelState . #stReq . #stReqKm & #kmIkm .~ Ikm mempty
129+
ikm = encodeUtf8 $ st ^. #modelState . #stIkm . #fieldOutput
130+
aes = Aes.drvSomeAesKey @Aes.Word256 $ km & #kmIkm .~ Ikm ikm
131+
msg = encodeBinary $ st ^. #modelState . #stOut . #fieldOutput
132+
cpt = Aes.encryptHmac aes msg
175133

176134
baseUri :: Unicode
177-
#ifdef GHCID
178-
baseUri =
179-
"http://localhost:8080"
180-
#else
181-
baseUri =
182-
"https://functora.github.io/apps/cryptogram/" <> vsn <> "/index.html"
183-
#endif
135+
baseUri = "https://t.me/functora_cryptogram_bot"
184136

185137
emitter :: (MonadIO m) => Model -> Update Model -> m ()
186138
emitter st updater = do

ghcjs/cryptogram/src/Main.hs

Lines changed: 12 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import Functora.Miso.Prelude
2525
import Language.Javascript.JSaddle ((!))
2626
import qualified Language.Javascript.JSaddle as JS
2727
import qualified Miso
28-
import qualified Text.URI as URI
2928

3029
#ifdef wasi_HOST_OS
3130
foreign export javascript "hs_start" main :: IO ()
@@ -42,18 +41,16 @@ main =
4241
sleepSeconds 5
4342
)
4443
$ do
45-
uri <- URI.mkURI . inspect =<< getCurrentURI
46-
mSt <- handleAny (const $ pure Nothing) $ unUri uri
4744
sink <- newEmptyMVar
48-
st <- newModel sink Nothing mSt
45+
st <- newModel sink Nothing Nothing
4946
startApp
5047
App
5148
{ model = st,
5249
update = updateModel,
5350
Miso.view = viewModel,
5451
subs = mempty,
5552
events = Map.insert "focus" True defaultEvents,
56-
initialAction = InitUpdate mSt,
53+
initialAction = InitUpdate,
5754
mountPoint = Nothing,
5855
logLevel = Off
5956
}
@@ -106,43 +103,19 @@ runApp = JSaddle.Wasm.run
106103

107104
updateModel :: Action -> Model -> Effect Action Model
108105
updateModel Noop st = noEff st
109-
updateModel (InitUpdate mShortSt) prevSt = do
106+
updateModel InitUpdate prevSt = do
110107
effectSub prevSt $ \sink -> do
111108
mvSink <- newMVar sink
112109
let nextSt = prevSt {modelSink = mvSink}
113-
Jsm.selectStorage ("cryptogram-" <> vsn) $ \case
114-
Nothing ->
115-
Jsm.fetchInstallReferrerUri $ \case
116-
Nothing ->
117-
liftIO
118-
. sink
119-
. PushUpdate
120-
. PureUpdate
121-
$ #modelLoading
122-
.~ False
123-
Just {} -> do
124-
let st = mShortSt
125-
finSt <- newModel mvSink (Just nextSt) st
126-
liftIO
127-
. sink
128-
. PushUpdate
129-
. PureUpdate
130-
. const
131-
$ finSt
132-
& #modelLoading
133-
.~ False
134-
Just uri -> do
135-
mLongSt <- unUri uri
136-
let st = mShortSt <|> mLongSt
137-
finSt <- newModel mvSink (Just nextSt) st
138-
liftIO
139-
. sink
140-
. PushUpdate
141-
. PureUpdate
142-
. const
143-
$ finSt
144-
& #modelLoading
145-
.~ False
110+
finSt <- newModel mvSink (Just nextSt) . Just $ modelState nextSt
111+
liftIO
112+
. sink
113+
. PushUpdate
114+
. PureUpdate
115+
. const
116+
$ finSt
117+
& #modelLoading
118+
.~ False
146119
liftIO
147120
. sink
148121
. PushUpdate

0 commit comments

Comments
 (0)