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