summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Kozak <spag@golwen.net>2013-12-11 09:59:57 +0000
committerPeter Kozak <spag@golwen.net>2013-12-11 09:59:57 +0000
commit97710aea6d75e16a0442f4d05d93a6b89ad3dc6c (patch)
tree30e95a06205204087b9782f505bb6ee80ef6e623
parent48507842cfdab395d4225c6273a6420c4ea24a6c (diff)
automatic creation of phone/sip_account added
-rw-r--r--app/controllers/config_gigaset_controller.rb100
1 files changed, 81 insertions, 19 deletions
diff --git a/app/controllers/config_gigaset_controller.rb b/app/controllers/config_gigaset_controller.rb
index c028819..7a03860 100644
--- a/app/controllers/config_gigaset_controller.rb
+++ b/app/controllers/config_gigaset_controller.rb
@@ -16,6 +16,13 @@ class ConfigGigasetController < ApplicationController
@phone = Phone.where(:mac_address => @mac_address).first
end
+ if ! @phone && GsParameter.get('PROVISIONING_AUTO_ADD_PHONE')
+ @phone = create_phone(@mac_address, @build_variant, @provisioning_id)
+ if @phone && GsParameter.get('PROVISIONING_AUTO_ADD_SIP_ACCOUNT')
+ create_sip_account(@phone)
+ end
+ end
+
if ! @phone
render(
:status => 404,
@@ -27,11 +34,6 @@ class ConfigGigasetController < ApplicationController
end
@profile_name = 'GS5'
-
- config_changed = [@phone.updated_at]
- @phone.phone_sip_accounts.each do |phone_sip_account|
- config_changed << phone_sip_account.updated_at
- end
@config_version = Time.now.utc.strftime('%d%m%y%H%M')
=begin
@@ -322,10 +324,10 @@ class ConfigGigasetController < ApplicationController
@settings["BS_AE_Subscriber.stMtDat[#{index-1}].aucTlnName"] = "\"HS#{index}\""
end
- sip_accounts = @phone.sip_accounts.any? ? @phone.sip_accounts : [@phone.fallback_sip_account]
+ sip_accounts = @phone.fallback_sip_account ? [@phone.fallback_sip_account] : []
+ sip_accounts = @phone.sip_accounts.any? ? @phone.sip_accounts : sip_accounts
sip_accounts.each_with_index do |sip_account, index|
- config_changed << sip_account.updated_at
@settings["BS_IP_Data1.aucS_SIP_ACCOUNT_NAME_#{index+1}"] = "\"#{sip_account.caller_name}\""
@settings["BS_IP_Data1.ucB_SIP_ACCOUNT_IS_ACTIVE_#{index+1}"] = "1"
@settings["BS_Accounts.astAccounts[#{index}].aucAccountName[0]"] = sip_account.phone_numbers.first ? "\"#{sip_account.phone_numbers.first.number}\"" : "\"#{sip_account.caller_name}\""
@@ -351,26 +353,24 @@ class ConfigGigasetController < ApplicationController
end
end
- mask = 0
- for index in 1..MAX_HANDSETS
- if sip_accounts.count <= index
- if sip_accounts.last.phone_numbers.first
- @settings["BS_AE_Subscriber.stMtDat[#{index-1}].aucTlnName"] = "\"#{index}:#{sip_accounts.last.phone_numbers.first.number}\""
+ if sip_accounts.any?
+ mask = 0
+ for index in 1..MAX_HANDSETS
+ if sip_accounts.count <= index
+ if sip_accounts.last.phone_numbers.first
+ @settings["BS_AE_Subscriber.stMtDat[#{index-1}].aucTlnName"] = "\"#{index}:#{sip_accounts.last.phone_numbers.first.number}\""
+ end
+ mask = mask + 2**(index-1)
+ @settings["BS_Accounts.astAccounts[#{sip_accounts.count-1}].uiSendMask"] = mask
+ @settings["BS_Accounts.astAccounts[#{sip_accounts.count-1}].uiReceiveMask"] = mask
end
- mask = mask + 2**(index-1)
- @settings["BS_Accounts.astAccounts[#{sip_accounts.count-1}].uiSendMask"] = mask
- @settings["BS_Accounts.astAccounts[#{sip_accounts.count-1}].uiReceiveMask"] = mask
end
- end
- if sip_accounts.any?
phone_book_url = "#{request.protocol}#{request.host_with_port}/config_gigaset/#{@phone.id}/#{sip_accounts.first.id}/phone_book.xml"
@settings['BS_XML_Netdirs.astNetdirProvider[1].aucServerURL'] = "\"#{phone_book_url}\""
#@settings['BS_XML_Netdirs.astNetdirProvider[0].aucServerURL'] = "\"#{phone_book_url}\""
end
- #@config_version = config_changed.sort.last.utc.strftime('%d%m%y%H%M')
-
if request.env['HTTP_USER_AGENT'].index('N510') || request.env['HTTP_USER_AGENT'].index('C610')
Rails.logger.info "---> Phone #{@mac_address.inspect}, IP address #{request_remote_ip.inspect}"
@phone.update_attributes({ :ip_address => request_remote_ip })
@@ -477,6 +477,68 @@ class ConfigGigasetController < ApplicationController
value.length+1,
value,
].pack("CCCCa#{value.length+1}")
+ end
+ def create_phone(mac_address, build_variant, provisioning_id)
+ if !build_variant || !provisioning_id || !mac_address
+ return nil
+ end
+
+ phone_model = 'Gigaset C610 IP'
+ if build_variant == 42 && provisioning_id = 2
+ phone_model = 'Gigaset N510 IP PRO'
+ end
+
+ tenant = Tenant.where(:id => GsParameter.get('PROVISIONING_AUTO_TENANT_ID')).first
+ if ! tenant
+ return nil
+ end
+
+ phone = tenant.phones.build
+ phone.mac_address = mac_address
+ phone.hot_deskable = true
+ phone.tenant = tenant
+ phone.phone_model = PhoneModel.where(:name => phone_model).first
+ if ! phone.save
+ return nil
+ end
+
+ return phone
+ end
+
+ def create_sip_account(phone)
+ caller_name_index = 0
+ sip_account_last = phone.tenant.sip_accounts.where('caller_name LIKE ?', "#{GsParameter.get('PROVISIONING_AUTO_SIP_ACCOUNT_CALLER_PREFIX')}%").sort { |item1, item2|
+ item1.caller_name.gsub(/[^0-9]/, '').to_i <=> item2.caller_name.gsub(/[^0-9]/, '').to_i
+ }.last
+
+ if sip_account_last
+ caller_name_index = sip_account_last.caller_name.gsub(/[^0-9]/, '').to_i
+ end
+ caller_name_index = caller_name_index + 1
+
+ sip_account = phone.tenant.sip_accounts.build
+ sip_account.caller_name = "#{GsParameter.get('PROVISIONING_AUTO_SIP_ACCOUNT_CALLER_PREFIX')}#{caller_name_index}"
+ sip_account.call_waiting = GsParameter.get('CALL_WAITING')
+ sip_account.clir = GsParameter.get('DEFAULT_CLIR_SETTING')
+ sip_account.clip = GsParameter.get('DEFAULT_CLIP_SETTING')
+ sip_account.voicemail_pin = random_pin
+ sip_account.callforward_rules_act_per_sip_account = GsParameter.get('CALLFORWARD_RULES_ACT_PER_SIP_ACCOUNT_DEFAULT')
+ sip_account.hotdeskable = false
+ loop do
+ sip_account.auth_name = SecureRandom.hex(GsParameter.get('DEFAULT_LENGTH_SIP_AUTH_NAME'))
+ break unless SipAccount.exists?(:auth_name => sip_account.auth_name)
+ end
+ sip_account.password = SecureRandom.hex(GsParameter.get('DEFAULT_LENGTH_SIP_PASSWORD'))
+
+ if ! sip_account.save
+ return nil
+ end
+
+ phone.fallback_sip_account = sip_account
+ if ! phone.save
+ return nil
+ end
+ return sip_account
end
end