sip_account.rb

 1# frozen_string_literal: true
 2
 3require "digest"
 4require "securerandom"
 5require "value_semantics/monkey_patched"
 6
 7require_relative "mn_words"
 8
 9class SipAccount
10	def self.find(name)
11		new(BandwidthIris::SipCredential.get(name))
12	rescue BandwidthIris::Errors::GenericError # 404
13		New.new(BandwidthIris::SipCredential.new(
14			user_name: name,
15			realm: CONFIG[:sip][:realm],
16			http_voice_v2_app_id: CONFIG[:sip][:app]
17		))
18	end
19
20	def initialize(api_object, password: nil)
21		@api_object = api_object
22		@password = password
23	end
24
25	def with(password:)
26		self.class.new(@api_object.class.new(@api_object.to_data.merge(
27			hash1: Digest::MD5.hexdigest("#{username}:#{server}:#{password}"),
28			hash1b: Digest::MD5.hexdigest(
29				"#{username}:#{server}:#{server}:#{password}"
30			)
31		)), password: password)
32	end
33
34	def with_random_password
35		with(password: MN_WORDS.sample(3).join(" "))
36	end
37
38	def form
39		form = Blather::Stanza::X.new(:result)
40		form.title = "Sip Account Reset!"
41		form.instructions = "These are your new SIP credentials"
42
43		form.fields = [
44			{ var: "username", value: username, label: "Username", type: :fixed },
45			{ var: "password", value: @password, label: "Password", type: :fixed },
46			{ var: "server", value: server, label: "Server", type: :fixed }
47		]
48
49		form
50	end
51
52	def put
53		@api_object.update(
54			hash1: @api_object.hash1,
55			hash1b: @api_object.hash1b,
56			realm: server,
57			http_voice_v2_app_id: @api_object.http_voice_v2_app_id
58		)
59		self
60	end
61
62	def delete
63		@api_object.delete
64	end
65
66	def username
67		@api_object.user_name.to_s
68	end
69
70	def server
71		@api_object.realm
72	end
73
74	def uri
75		"sip:#{username}@#{server}"
76	end
77
78	class New < SipAccount
79		def put
80			BandwidthIris::SipCredential.create(
81				user_name: username,
82				hash1: @api_object.hash1,
83				hash1b: @api_object.hash1b,
84				realm: server,
85				http_voice_v2_app_id: @api_object.http_voice_v2_app_id
86			)
87			self
88		end
89	end
90end