1# frozen_string_literal: true
2
3require "jennifer"
4require_relative "../rantly_extensions/data_extensions"
5
6class PortOutPinExecuteCmd
7 # @param redis [FakeRedis]
8 def initialize(redis)
9 @redis = redis
10 end
11
12 include Jennifer.rant(self) {
13 jid { bare_jid }
14 phone(transient: true) { nanpa_phone }
15
16 stanza derived_from(:jid) do |jid|
17 cmd = Blather::Stanza::Iq::Command.new
18 cmd.type = :set
19 cmd.to = 'component'
20 cmd.node = 'set-port-out-pin'
21 cmd.action = :execute
22 cmd.from = jid
23 cmd
24 end
25
26 redis_state derived_from(:jid, :phone), transient: true do |jid, phone|
27 @redis.reset!
28 @redis.rpush("catapult_cred-#{jid}", 'acct', 'token', 'secret', phone)
29 end
30
31 written_state(transient: true) {
32 SGXbwmsgsv2.instance_variable_set(:@written, [])
33 }
34 }
35end
36
37class PortOutPinCompleteCmd
38 # @param redis [FakeRedis]
39 def initialize(redis)
40 @redis = redis
41 end
42
43 include Jennifer.rant(self) {
44 jid { bare_jid }
45 phone(transient: true) { nanpa_phone }
46 pin { sized(range(4, 10)) { string(:alnum) } }
47 confirm_pin derived_from(:pin) { |pin| pin }
48 sessionid { SecureRandom.uuid }
49
50 stanza derived_from(:jid, :sessionid, :pin, :confirm_pin) do |jid, sid, pin, cpin|
51 cmd = Blather::Stanza::Iq::Command.new
52 cmd.type = :set
53 cmd.to = 'component'
54 cmd.node = 'set-port-out-pin'
55 cmd.sessionid = sid
56 cmd.action = :complete
57 cmd.from = jid
58 cmd.form.type = :submit
59 cmd.form.fields = [
60 { var: 'pin', value: pin },
61 { var: 'confirm_pin', value: cpin }
62 ]
63 cmd
64 end
65
66 redis_state derived_from(:jid, :phone), transient: true do |jid, phone|
67 @redis.reset!
68 @redis.rpush("catapult_cred-#{jid}", 'acct', 'token', 'secret', phone)
69 end
70
71 written_state(transient: true) {
72 SGXbwmsgsv2.instance_variable_set(:@written, [])
73 }
74 }
75end