@@ -8,7 +8,6 @@ module App.Types
8
8
newSt ,
9
9
newFieldPair ,
10
10
mkUri ,
11
- unUri ,
12
11
emitter ,
13
12
icon ,
14
13
vsn ,
@@ -18,18 +17,14 @@ module App.Types
18
17
)
19
18
where
20
19
21
- import qualified Data.ByteString.Base64.URL as B64URL
22
- import qualified Data.ByteString.Lazy as BL
23
20
import Data.Functor.Barbie
24
- import qualified Data.Generics as Syb
25
21
import qualified Data.Version as Version
26
22
import qualified Functora.Aes as Aes
27
23
import Functora.Cfg
28
24
import Functora.Miso.Prelude
29
25
import qualified Functora.Miso.Theme as Theme
30
26
import Functora.Miso.Types as X hiding (newFieldPair )
31
27
import qualified Functora.Miso.Types as FM
32
- import qualified Functora.Miso.Widgets.Field as Field
33
28
import qualified Functora.Miso.Widgets.Icon as Icon
34
29
import qualified Functora.Prelude as Prelude
35
30
import qualified Paths_cryptogram as Paths
@@ -41,16 +36,17 @@ data Model = Model
41
36
modelDonate :: OpenedOrClosed ,
42
37
modelLoading :: Bool ,
43
38
modelState :: St Unique ,
39
+ modelChatId :: Int ,
44
40
modelDonateViewer :: [FieldPair DynamicField Unique ]
45
41
}
46
42
deriving stock (Eq , Generic )
47
43
48
44
data Action
49
45
= Noop
50
- | SyncInputs
51
- | InitUpdate (Maybe (St Unique ))
46
+ | InitUpdate
52
47
| EvalUpdate (Model -> Model )
53
48
| PushUpdate (Update Model )
49
+ | SyncInputs
54
50
55
51
data St f = St
56
52
{ stReq :: StReq ,
@@ -78,7 +74,7 @@ deriving via GenericType (St Identity) instance Binary (St Identity)
78
74
79
75
data StReq = StReq
80
76
{ stReqKm :: Aes. Km ,
81
- stReqMsg :: Maybe Aes. Crypto
77
+ stReqCpt :: Maybe Aes. Crypto
82
78
}
83
79
deriving stock (Eq , Ord , Show , Read , Data , Generic )
84
80
deriving (Binary ) via GenericType StReq
@@ -116,71 +112,27 @@ newFieldPair key val = do
116
112
mkUri :: (MonadThrow m ) => Model -> m URI
117
113
mkUri st = do
118
114
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
+ }
139
123
pure
140
124
$ uri
141
- { URI. uriQuery = qxs
125
+ { URI. uriQuery = [ URI. QueryParam key val]
142
126
}
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]
168
127
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
175
133
176
134
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"
184
136
185
137
emitter :: (MonadIO m ) => Model -> Update Model -> m ()
186
138
emitter st updater = do
0 commit comments