on master help sign in
Added support for identities
commit3d89e8b02f0747255ce848cd45a4121f217cd816 authoriko <ilyakooo0@gmail.com> dateSat 30 Jul 2022, 09:41 (4 years ago) parent305ea93
7 files changed+243−20
backend/BW/Types.purs+18−18 backend/Bridge.purs+31 backend/Main.purs+42 bridge.yaml+19 frontend/Bridge.elm+71 frontend/Main.elm+5−2 frontend/Pages/Cipher.elm+57
backend/BW/Types.purs+18−18
@@ -532,24 +532,24 @@ type CardApi
532532 }
533533
534534type IdentityApi
535− = { title :: String
536− , firstName :: String
537− , middleName :: String
538− , lastName :: String
539− , address1 :: String
540− , address2 :: String
541− , address3 :: String
542− , city :: String
543− , state :: String
544− , postalCode :: String
545− , country :: String
546− , company :: String
547− , email :: String
548− , phone :: String
549− , ssn :: String
550− , username :: String
551− , passportNumber :: String
552− , licenseNumber :: String
535+ = { title :: JNullable EncryptedString
536+ , firstName :: JNullable EncryptedString
537+ , middleName :: JNullable EncryptedString
538+ , lastName :: JNullable EncryptedString
539+ , address1 :: JNullable EncryptedString
540+ , address2 :: JNullable EncryptedString
541+ , address3 :: JNullable EncryptedString
542+ , city :: JNullable EncryptedString
543+ , state :: JNullable EncryptedString
544+ , postalCode :: JNullable EncryptedString
545+ , country :: JNullable EncryptedString
546+ , company :: JNullable EncryptedString
547+ , email :: JNullable EncryptedString
548+ , phone :: JNullable EncryptedString
549+ , ssn :: JNullable EncryptedString
550+ , username :: JNullable EncryptedString
551+ , passportNumber :: JNullable EncryptedString
552+ , licenseNumber :: JNullable EncryptedString
553553 }
554554
555555secureNoteApiGeneric = 0 :: SecureNoteApi
backend/Bridge.purs+31
@@ -61,6 +61,36 @@ derive instance genericSub_LoadCipher_cipherType_CardCipher :: Generic Sub_LoadC
6161derive instance eqSub_LoadCipher_cipherType_CardCipher :: Eq Sub_LoadCipher_cipherType_CardCipher
6262derive instance ordSub_LoadCipher_cipherType_CardCipher :: Ord Sub_LoadCipher_cipherType_CardCipher
6363
64+newtype Sub_LoadCipher_cipherType_IdentityCipher =
65+ Sub_LoadCipher_cipherType_IdentityCipher {
66+ address1 :: String
67+ , address2 :: String
68+ , address3 :: String
69+ , city :: String
70+ , company :: String
71+ , country :: String
72+ , email :: String
73+ , firstName :: String
74+ , lastName :: String
75+ , licenseNumber :: String
76+ , middleName :: String
77+ , passportNumber :: String
78+ , phone :: String
79+ , postalCode :: String
80+ , ssn :: String
81+ , state :: String
82+ , title :: String
83+ , username :: String
84+ }
85+
86+instance encodeJsonSub_LoadCipher_cipherType_IdentityCipher :: EncodeJson Sub_LoadCipher_cipherType_IdentityCipher where
87+ encodeJson = genericEncodeAeson Argonaut.defaultOptions
88+instance decodeJsonSub_LoadCipher_cipherType_IdentityCipher :: DecodeJson Sub_LoadCipher_cipherType_IdentityCipher where
89+ decodeJson = genericDecodeAeson Argonaut.defaultOptions
90+derive instance genericSub_LoadCipher_cipherType_IdentityCipher :: Generic Sub_LoadCipher_cipherType_IdentityCipher _
91+derive instance eqSub_LoadCipher_cipherType_IdentityCipher :: Eq Sub_LoadCipher_cipherType_IdentityCipher
92+derive instance ordSub_LoadCipher_cipherType_IdentityCipher :: Ord Sub_LoadCipher_cipherType_IdentityCipher
93+
6494newtype Sub_LoadCipher_cipherType_LoginCipher_uris_List =
6595 Sub_LoadCipher_cipherType_LoginCipher_uris_List (Array String)
6696
@@ -89,6 +119,7 @@ derive instance ordSub_LoadCipher_cipherType_LoginCipher :: Ord Sub_LoadCipher_c
89119
90120data Sub_LoadCipher_cipherType =
91121 CardCipher Sub_LoadCipher_cipherType_CardCipher
122+ | IdentityCipher Sub_LoadCipher_cipherType_IdentityCipher
92123 | LoginCipher Sub_LoadCipher_cipherType_LoginCipher
93124 | NoteCipher String
94125
backend/Main.purs+42
@@ -153,6 +153,48 @@ main = do
153153 expYear <- fromJNullable "" <$> (traverse decrypt card.expYear)
154154 pure $ Bridge.CardCipher $ Bridge.Sub_LoadCipher_cipherType_CardCipher
155155 { brand, cardholderName, code, expMonth, expYear, number }
156+ n | cipherTypeIdentity == n -> do
157+ case JNullable.toMaybe cipher.identity of
158+ Nothing -> throwError $ error "Identity data is missing"
159+ Just identity -> do
160+ firstName <- fromJNullable "" <$> (traverse decrypt identity.firstName)
161+ middleName <- fromJNullable "" <$> (traverse decrypt identity.middleName)
162+ lastName <- fromJNullable "" <$> (traverse decrypt identity.lastName)
163+ address1 <- fromJNullable "" <$> (traverse decrypt identity.address1)
164+ address2 <- fromJNullable "" <$> (traverse decrypt identity.address2)
165+ address3 <- fromJNullable "" <$> (traverse decrypt identity.address3)
166+ city <- fromJNullable "" <$> (traverse decrypt identity.city)
167+ company <- fromJNullable "" <$> (traverse decrypt identity.company)
168+ country <- fromJNullable "" <$> (traverse decrypt identity.country)
169+ email <- fromJNullable "" <$> (traverse decrypt identity.email)
170+ licenseNumber <- fromJNullable "" <$> (traverse decrypt identity.licenseNumber)
171+ passportNumber <- fromJNullable "" <$> (traverse decrypt identity.passportNumber)
172+ phone <- fromJNullable "" <$> (traverse decrypt identity.phone)
173+ postalCode <- fromJNullable "" <$> (traverse decrypt identity.postalCode)
174+ ssn <- fromJNullable "" <$> (traverse decrypt identity.ssn)
175+ state <- fromJNullable "" <$> (traverse decrypt identity.state)
176+ title <- fromJNullable "" <$> (traverse decrypt identity.title)
177+ username <- fromJNullable "" <$> (traverse decrypt identity.username)
178+ pure $ Bridge.IdentityCipher $ Bridge.Sub_LoadCipher_cipherType_IdentityCipher
179+ { firstName,
180+ middleName,
181+ lastName,
182+ address1,
183+ address2,
184+ address3,
185+ city,
186+ company,
187+ country,
188+ email,
189+ licenseNumber,
190+ passportNumber,
191+ phone,
192+ postalCode,
193+ ssn,
194+ state,
195+ title,
196+ username
197+ }
156198 n -> throwError $ error $ "Unsupported cipher type: " <> show n
157199 send $ Bridge.LoadCipher $ Bridge.Sub_LoadCipher {cipherType, name, id}
158200 pure unit
bridge.yaml+19
@@ -32,6 +32,25 @@ Sub:
3232 expMonth: String
3333 expYear: String
3434 code: String
35+ - IdentityCipher:
36+ title: String
37+ firstName: String
38+ middleName: String
39+ lastName: String
40+ address1: String
41+ address2: String
42+ address3: String
43+ city: String
44+ state: String
45+ postalCode: String
46+ country: String
47+ company: String
48+ email: String
49+ phone: String
50+ ssn: String
51+ username: String
52+ passportNumber: String
53+ licenseNumber: String
3554
3655Cmd:
3756- Init
frontend/Bridge.elm+71
@@ -97,6 +97,74 @@ jsonEncSub_LoadCipher_cipherType_CardCipher val =
9797
9898
9999
100+type alias Sub_LoadCipher_cipherType_IdentityCipher =
101+ { address1: String
102+ , address2: String
103+ , address3: String
104+ , city: String
105+ , company: String
106+ , country: String
107+ , email: String
108+ , firstName: String
109+ , lastName: String
110+ , licenseNumber: String
111+ , middleName: String
112+ , passportNumber: String
113+ , phone: String
114+ , postalCode: String
115+ , ssn: String
116+ , state: String
117+ , title: String
118+ , username: String
119+ }
120+
121+jsonDecSub_LoadCipher_cipherType_IdentityCipher : Json.Decode.Decoder ( Sub_LoadCipher_cipherType_IdentityCipher )
122+jsonDecSub_LoadCipher_cipherType_IdentityCipher =
123+ Json.Decode.succeed (\paddress1 paddress2 paddress3 pcity pcompany pcountry pemail pfirstName plastName plicenseNumber pmiddleName ppassportNumber pphone ppostalCode pssn pstate ptitle pusername -> {address1 = paddress1, address2 = paddress2, address3 = paddress3, city = pcity, company = pcompany, country = pcountry, email = pemail, firstName = pfirstName, lastName = plastName, licenseNumber = plicenseNumber, middleName = pmiddleName, passportNumber = ppassportNumber, phone = pphone, postalCode = ppostalCode, ssn = pssn, state = pstate, title = ptitle, username = pusername})
124+ |> required "address1" (Json.Decode.string)
125+ |> required "address2" (Json.Decode.string)
126+ |> required "address3" (Json.Decode.string)
127+ |> required "city" (Json.Decode.string)
128+ |> required "company" (Json.Decode.string)
129+ |> required "country" (Json.Decode.string)
130+ |> required "email" (Json.Decode.string)
131+ |> required "firstName" (Json.Decode.string)
132+ |> required "lastName" (Json.Decode.string)
133+ |> required "licenseNumber" (Json.Decode.string)
134+ |> required "middleName" (Json.Decode.string)
135+ |> required "passportNumber" (Json.Decode.string)
136+ |> required "phone" (Json.Decode.string)
137+ |> required "postalCode" (Json.Decode.string)
138+ |> required "ssn" (Json.Decode.string)
139+ |> required "state" (Json.Decode.string)
140+ |> required "title" (Json.Decode.string)
141+ |> required "username" (Json.Decode.string)
142+
143+jsonEncSub_LoadCipher_cipherType_IdentityCipher : Sub_LoadCipher_cipherType_IdentityCipher -> Value
144+jsonEncSub_LoadCipher_cipherType_IdentityCipher val =
145+ Json.Encode.object
146+ [ ("address1", Json.Encode.string val.address1)
147+ , ("address2", Json.Encode.string val.address2)
148+ , ("address3", Json.Encode.string val.address3)
149+ , ("city", Json.Encode.string val.city)
150+ , ("company", Json.Encode.string val.company)
151+ , ("country", Json.Encode.string val.country)
152+ , ("email", Json.Encode.string val.email)
153+ , ("firstName", Json.Encode.string val.firstName)
154+ , ("lastName", Json.Encode.string val.lastName)
155+ , ("licenseNumber", Json.Encode.string val.licenseNumber)
156+ , ("middleName", Json.Encode.string val.middleName)
157+ , ("passportNumber", Json.Encode.string val.passportNumber)
158+ , ("phone", Json.Encode.string val.phone)
159+ , ("postalCode", Json.Encode.string val.postalCode)
160+ , ("ssn", Json.Encode.string val.ssn)
161+ , ("state", Json.Encode.string val.state)
162+ , ("title", Json.Encode.string val.title)
163+ , ("username", Json.Encode.string val.username)
164+ ]
165+
166+
167+
100168type alias Sub_LoadCipher_cipherType_LoginCipher_uris_List = (List String)
101169
102170jsonDecSub_LoadCipher_cipherType_LoginCipher_uris_List : Json.Decode.Decoder ( Sub_LoadCipher_cipherType_LoginCipher_uris_List )
@@ -133,6 +201,7 @@ jsonEncSub_LoadCipher_cipherType_LoginCipher val =
133201
134202type Sub_LoadCipher_cipherType =
135203 CardCipher Sub_LoadCipher_cipherType_CardCipher
204+ | IdentityCipher Sub_LoadCipher_cipherType_IdentityCipher
136205 | LoginCipher Sub_LoadCipher_cipherType_LoginCipher
137206 | NoteCipher String
138207
@@ -140,6 +209,7 @@ jsonDecSub_LoadCipher_cipherType : Json.Decode.Decoder ( Sub_LoadCipher_cipherTy
140209jsonDecSub_LoadCipher_cipherType =
141210 let jsonDecDictSub_LoadCipher_cipherType = Dict.fromList
142211 [ ("CardCipher", Json.Decode.lazy (\_ -> Json.Decode.map CardCipher (jsonDecSub_LoadCipher_cipherType_CardCipher)))
212+ , ("IdentityCipher", Json.Decode.lazy (\_ -> Json.Decode.map IdentityCipher (jsonDecSub_LoadCipher_cipherType_IdentityCipher)))
143213 , ("LoginCipher", Json.Decode.lazy (\_ -> Json.Decode.map LoginCipher (jsonDecSub_LoadCipher_cipherType_LoginCipher)))
144214 , ("NoteCipher", Json.Decode.lazy (\_ -> Json.Decode.map NoteCipher (Json.Decode.string)))
145215 ]
@@ -150,6 +220,7 @@ jsonEncSub_LoadCipher_cipherType : Sub_LoadCipher_cipherType -> Value
150220jsonEncSub_LoadCipher_cipherType val =
151221 let keyval v = case v of
152222 CardCipher v1 -> ("CardCipher", encodeValue (jsonEncSub_LoadCipher_cipherType_CardCipher v1))
223+ IdentityCipher v1 -> ("IdentityCipher", encodeValue (jsonEncSub_LoadCipher_cipherType_IdentityCipher v1))
153224 LoginCipher v1 -> ("LoginCipher", encodeValue (jsonEncSub_LoadCipher_cipherType_LoginCipher v1))
154225 NoteCipher v1 -> ("NoteCipher", encodeValue (Json.Encode.string v1))
155226 in encodeSumTaggedObject "tag" "contents" keyval val
frontend/Main.elm+5−2
@@ -95,7 +95,7 @@ showPage page =
9595 LoadingPage ->
9696 { title = ""
9797 , body = [ loader ]
98− , topButton = Nothing
98+ , topButton = Just (BackButton PopView)
9999 }
100100
101101 MasterPasswordModel model ->
@@ -168,7 +168,10 @@ init =
168168
169169view : Model -> Html Msg
170170view model =
171− Navigation.showNavigationView model.pageStack showPage
171+ div []
172+ (maybeList (List.head model.notifications) (Notification.notification CloseNotification)
173+ ++ [ Navigation.showNavigationView model.pageStack showPage ]
174+ )
172175
173176
174177mapHead : (a -> a) -> Nonempty a -> Nonempty a
frontend/Pages/Cipher.elm+57
@@ -118,6 +118,63 @@ view { passwordHidden, cipher, cvvHidden } =
118118 }
119119 , row { name = "Cardholder name", value = cardholderName, nameIcon = "user", icons = [ ( "copy", Noop ) ] }
120120 ]
121+
122+ Bridge.IdentityCipher { address1, address2, address3, city, company, country, email, firstName, lastName, licenseNumber, middleName, passportNumber, phone, postalCode, ssn, state, title, username } ->
123+ [ row
124+ { name = "Name"
125+ , value = firstName ++ " " ++ middleName ++ " " ++ lastName
126+ , nameIcon = ""
127+ , icons = [ ( "copy", Noop ) ]
128+ }
129+ , row
130+ { name = "Username"
131+ , value = username
132+ , nameIcon = ""
133+ , icons = [ ( "copy", Noop ) ]
134+ }
135+ , row
136+ { name = "Company"
137+ , value = company
138+ , nameIcon = ""
139+ , icons = [ ( "copy", Noop ) ]
140+ }
141+ , row
142+ { name = "Socia security number"
143+ , value = ssn
144+ , nameIcon = ""
145+ , icons = [ ( "copy", Noop ) ]
146+ }
147+ , row
148+ { name = "Passport number"
149+ , value = passportNumber
150+ , nameIcon = ""
151+ , icons = [ ( "copy", Noop ) ]
152+ }
153+ , row
154+ { name = "License Number"
155+ , value = licenseNumber
156+ , nameIcon = ""
157+ , icons = [ ( "copy", Noop ) ]
158+ }
159+ , row
160+ { name = "Email"
161+ , value = email
162+ , nameIcon = ""
163+ , icons = [ ( "copy", Noop ) ]
164+ }
165+ , row
166+ { name = "Phone number"
167+ , value = phone
168+ , nameIcon = ""
169+ , icons = [ ( "copy", Noop ) ]
170+ }
171+ , row
172+ { name = "Address"
173+ , value = address1 ++ "\n" ++ address2 ++ "\n" ++ address3
174+ , nameIcon = ""
175+ , icons = [ ( "copy", Noop ) ]
176+ }
177+ ]
121178 )
122179 |> List.intersperse (hr [] [])
123180