port_out_pin_cmd.rb

 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