Skip to content
This repository was archived by the owner on Jun 11, 2023. It is now read-only.

Commit e583741

Browse files
author
Marcelo Amancio de Lima Santos
committed
WIP
1 parent df3b440 commit e583741

32 files changed

Lines changed: 1566 additions & 63 deletions

File tree

lib/account/websocket/channel/account.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ channel Helix.Account.Websocket.Channel.Account do
2727
authenticated on the socket.
2828
+ base errors
2929
"""
30-
join _, AccountJoin
30+
join "account:" <> _, AccountJoin
3131

3232
@doc """
3333
Forces a bootstrap to happen. It is the exact same operation ran during join.

lib/core/validator/validator.ex

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ defmodule Helix.Core.Validator do
2424
def validate_input(input, :password, _),
2525
do: validate_password(input)
2626

27+
def validate_input(input, :money, _),
28+
do: validate_money(input)
29+
2730
def validate_input(input, :hostname, _),
2831
do: validate_hostname(input)
2932

@@ -51,4 +54,7 @@ defmodule Helix.Core.Validator do
5154

5255
defp validate_reply_id(v),
5356
do: validate_hostname(v) # TODO
57+
58+
defp validate_money(v),
59+
do: validate_hostname(v)
5460
end

lib/event/dispatcher.ex

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,10 +301,18 @@ defmodule Helix.Event.Dispatcher do
301301
BankHandler.Bank.Account,
302302
:password_reveal_processed
303303

304+
event BankEvent.ChangePassword.Processed,
305+
BankHandler.Bank.Account,
306+
:password_change_processed
307+
304308
event BankEvent.Bank.Account.Password.Revealed,
305309
EntityHandler.Database,
306310
:bank_password_revealed
307311

312+
event BankEvent.Bank.Account.Password.Changed,
313+
BankHandler.Bank.Account,
314+
:bank_password_changed
315+
308316
event BankEvent.Bank.Account.Login,
309317
EntityHandler.Database,
310318
:bank_account_login

lib/process/executable.ex

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -318,18 +318,25 @@ defmodule Helix.Process.Executable do
318318
src_acc_number: BankAccount.account | nil
319319
}
320320
@doc false
321-
defp get_source_bank_account(_, _, _, _),
322-
do: %{src_atm_id: nil, src_acc_number: nil}
321+
defp get_source_bank_account(_, _, _, meta) do
322+
%{
323+
src_atm_id: Map.get(meta, :src_atm_id, nil),
324+
src_acc_number: Map.get(meta, :src_acc_number, nil)
325+
}
326+
end
323327

324328
@spec get_target_bank_account(Server.t, Server.t, params, meta) ::
325329
%{
326330
tgt_atm_id: Server.t | nil,
327331
tgt_acc_number: BankAccount.account | nil
328332
}
329333
@doc false
330-
defp get_target_bank_account(_, _, _, _),
331-
do: %{tgt_atm_id: nil, tgt_acc_number: nil}
332-
334+
defp get_target_bank_account(_, _, _, meta) do
335+
%{
336+
tgt_atm_id: Map.get(meta, :tgt_atm_id, nil),
337+
tgt_acc_number: Map.get(meta, :tgt_acc_number, nil)
338+
}
339+
end
333340
@spec get_target_process(Server.t, Server.t, params, meta) ::
334341
%{tgt_process_id: Process.t | nil}
335342
@doc false

lib/process/model/process.ex

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ defmodule Helix.Process.Model.Process do
7777
| :cracker_bruteforce
7878
| :cracker_overflow
7979
| :install_virus
80+
| :bank_change_password
8081

8182
@typedoc """
8283
List of signals a process may receive during its lifetime.

lib/universe/bank/action/bank.ex

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ defmodule Helix.Universe.Bank.Action.Bank do
2222
as: BankAccountUpdatedEvent
2323
alias Helix.Universe.Bank.Event.Bank.Account.Password.Revealed,
2424
as: BankAccountPasswordRevealedEvent
25+
alias Helix.Universe.Bank.Event.Bank.Account.Password.Changed,
26+
as: BankAccountPasswordChangedEvent
2527
alias Helix.Universe.Bank.Event.Bank.Account.Token.Acquired,
2628
as: BankAccountTokenAcquiredEvent
2729

@@ -198,6 +200,21 @@ defmodule Helix.Universe.Bank.Action.Bank do
198200
end
199201
end
200202

203+
@spec change_password(BankAccount.t, Entity.id) ::
204+
{:ok, BankAccount.t, [BankAccountPasswordChangedEvent.t]}
205+
| {:error, :internal}
206+
def change_password(account, changed_by) do
207+
event = BankAccountPasswordChangedEvent.new(account, changed_by)
208+
{:ok, account, [event]}
209+
end
210+
211+
@spec update_password(BankAccount.t) ::
212+
{:ok, BankAccount.t}
213+
| {:error, :internal}
214+
defdelegate update_password(account),
215+
to: BankAccountInternal,
216+
as: :change_password
217+
201218
@spec login_password(BankAccount.t, String.t, Entity.idt) ::
202219
{:ok, BankAccount.t, [BankAccountLoginEvent.t]}
203220
| term

lib/universe/bank/action/flow/bank_account.ex

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ defmodule Helix.Universe.Bank.Action.Flow.BankAccount do
1515

1616
alias Helix.Universe.Bank.Process.Bank.Account.RevealPassword,
1717
as: BankAccountRevealPasswordProcess
18+
alias Helix.Universe.Bank.Process.Bank.Account.ChangePassword,
19+
as: BankAccountChangePasswordProcess
1820

1921
@typep relay :: Event.relay
2022

@@ -46,6 +48,19 @@ defmodule Helix.Universe.Bank.Action.Flow.BankAccount do
4648
BankAccountRevealPasswordProcess.execute(gateway, atm, params, meta, relay)
4749
end
4850

51+
@spec change_password(BankAccount.t, Server.t, Server.t, relay) ::
52+
{:ok, Process.t}
53+
| BankAccountChangePasswordProcess.executable_error
54+
def change_password(account, gateway, atm, relay) do
55+
meta = %{
56+
network_id: NetworkQuery.internet().network_id,
57+
src_atm_id: atm.server_id,
58+
src_acc_number: account.account_number,
59+
bounce: nil
60+
}
61+
62+
BankAccountChangePasswordProcess.execute(gateway, atm, %{}, meta, relay)
63+
end
4964
@doc """
5065
Logs into a bank account using a password. If the given password matches the
5166
current account password, the login is successful, in which case a BankLogin
@@ -74,9 +89,9 @@ defmodule Helix.Universe.Bank.Action.Flow.BankAccount do
7489
{:ok, _, events} <- BankAction.login_password(acc, password, entity),
7590
on_success(fn -> Event.emit(events) end),
7691

77-
{:ok, _, connection} <- start_connection.()
92+
{:ok, tunnel, connection} <- start_connection.()
7893
do
79-
{:ok, connection}
94+
{:ok, tunnel, connection}
8095
end
8196
end
8297
end

lib/universe/bank/action/flow/bank_transfer.ex

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,11 @@ defmodule Helix.Universe.Bank.Action.Flow.BankTransfer do
6363

6464
meta = %{
6565
network_id: tunnel.network_id,
66-
bounce: tunnel.bounce_id
66+
bounce: tunnel.bounce_id,
67+
src_atm_id: from_account.atm_id,
68+
src_acc_number: from_account.account_number,
69+
tgt_atm_id: to_account.atm_id,
70+
tgt_acc_number: to_account.account_number
6771
}
6872

6973
BankTransferProcess.execute(gateway, target_atm, params, meta, relay)

lib/universe/bank/event/bank/account/password.ex

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,26 @@ defmodule Helix.Universe.Bank.Event.Bank.Account.Password do
2323
}
2424
end
2525
end
26+
27+
event Changed do
28+
29+
alias Helix.Entity.Model.Entity
30+
alias Helix.Universe.Bank.Model.BankAccount
31+
32+
@type t :: %__MODULE__{
33+
entity_id: Entity.id,
34+
account: BankAccount.t
35+
}
36+
37+
event_struct [:entity_id, :account]
38+
39+
@spec new(BankAccount.t, Entity.id) ::
40+
t
41+
def new(account = %BankAccount{}, entity_id) do
42+
%__MODULE__{
43+
entity_id: entity_id,
44+
account: account
45+
}
46+
end
47+
end
2648
end
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
defmodule Helix.Universe.Bank.Event.ChangePassword do
2+
3+
import Helix.Event
4+
5+
event Processed do
6+
7+
alias Helix.Process.Model.Process
8+
alias Helix.Server.Model.Server
9+
alias Helix.Universe.Bank.Model.BankAccount
10+
alias Helix.Universe.Bank.Process.Bank.Account.ChangePassword,
11+
as: ChangePasswordProcess
12+
alias Helix.Universe.Bank.Query.Bank, as: BankQuery
13+
14+
@type t :: %__MODULE__{
15+
gateway_id: Server.id,
16+
account: BankAccount.t
17+
}
18+
19+
event_struct [:gateway_id, :account]
20+
21+
@spec new(BankAccount.t, Server.id) ::
22+
t
23+
def new(account = %BankAccount{}, gateway_id) do
24+
%__MODULE__{
25+
gateway_id: gateway_id,
26+
account: account
27+
}
28+
end
29+
30+
@spec new(Process.t, ChangePasswordProcess.t) ::
31+
t
32+
def new(process = %Process{}, _data = %ChangePasswordProcess{}) do
33+
atm_id = process.src_atm_id
34+
account_number = process.src_acc_number
35+
account = BankQuery.fetch_account(atm_id, account_number)
36+
37+
%__MODULE__{
38+
gateway_id: process.gateway_id,
39+
account: account
40+
}
41+
end
42+
end
43+
end

0 commit comments

Comments
 (0)