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" },
45			{ var: "password", value: @password, label: "Password" },
46			{ var: "server", value: server, label: "Server" }
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	class New < SipAccount
75		def put
76			BandwidthIris::SipCredential.create(
77				user_name: username,
78				hash1: @api_object.hash1,
79				hash1b: @api_object.hash1b,
80				realm: server,
81				http_voice_v2_app_id: @api_object.http_voice_v2_app_id
82			)
83			self
84		end
85	end
86end