Add encoding and decoding of login datas a function.

This commit is contained in:
Danila Fedorin 2018-12-17 15:34:21 -08:00
parent 471f5b301b
commit 128430b38f
2 changed files with 21 additions and 2 deletions

View File

@ -125,7 +125,7 @@ updateLoginResponse model a r = case r of
Ok lr -> ( { model | token = Just lr.accessToken, loginUsername = lr.userId, apiUrl = a }, Cmd.batch
[ firstSync model.apiUrl lr.accessToken
, Nav.pushUrl model.key <| Url.Builder.absolute [] []
, setStoreValuePort ("scylla.loginInfo", Json.Encode.string (lr.accessToken ++ "\n" ++ model.apiUrl))
, setStoreValuePort ("scylla.loginInfo", encodeLoginInfo (lr.accessToken, model.apiUrl, lr.userId))
] )
Err e -> (model, Cmd.none)

View File

@ -1,11 +1,30 @@
module Scylla.Login exposing (..)
import Scylla.Api exposing (ApiToken)
import Scylla.Api exposing (ApiUrl, ApiToken)
import Json.Decode as Decode exposing (Decoder, int, string, float, list, value, dict, bool)
import Json.Decode.Pipeline exposing (required, optional)
import Json.Encode as Encode
type alias Username = String
type alias Password = String
type alias LoginInfo = (ApiToken, ApiUrl, Username)
encodeLoginInfo : LoginInfo -> Decode.Value
encodeLoginInfo (t,a,u) = Encode.string (t ++ "," ++ a ++ "," ++ u)
parseLoginInfoString : String -> Decoder LoginInfo
parseLoginInfoString s = case String.indexes "," s of
[ fst, snd ] -> Decode.succeed
( (String.slice 0 fst s)
, (String.slice (fst + 1) snd s)
, (String.dropLeft snd s)
)
_ -> Decode.fail "Incorrectly formatted Login Info string"
loginInfoDecoder : Decoder LoginInfo
loginInfoDecoder = string
|> Decode.andThen parseLoginInfoString
type alias LoginResponse =
{ userId : String
, accessToken : ApiToken