otrs.rb 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. # Copyright (C) 2012-2013 Zammad Foundation, http://zammad-foundation.org/
  2. require 'import/otrs'
  3. module Auth::Otrs
  4. def self.check( username, password, config, user )
  5. endpoint = Setting.get('import_otrs_endpoint')
  6. return false if !endpoint || endpoint.empty? || endpoint == 'http://otrs_host/otrs'
  7. # connect to OTRS
  8. result = Import::OTRS.auth( username, password )
  9. return false if !result
  10. return false if !result['groups_ro']
  11. return false if !result['groups_rw']
  12. # check if required OTRS group exists
  13. types = {
  14. :required_group_ro => 'groups_ro',
  15. :required_group_rw => 'groups_rw',
  16. }
  17. types.each {|config_key,result_key|
  18. if config[config_key]
  19. return false if !result[result_key].has_value?( config[config_key] )
  20. end
  21. }
  22. # sync roles / groups
  23. if config[:group_ro_role_map] || config[:group_rw_role_map]
  24. user.role_ids = []
  25. user.save
  26. end
  27. types = {
  28. :group_ro_role_map => 'groups_ro',
  29. :group_rw_role_map => 'groups_rw',
  30. }
  31. types.each {|config_key,result_key|
  32. next if !config[config_key]
  33. config[config_key].each {|otrs_group, role|
  34. next if !result[result_key].has_value?( otrs_group )
  35. role_ids = user.role_ids
  36. role = Role.where( :name => role ).first
  37. next if !role
  38. role_ids.push role.id
  39. user.role_ids = role_ids
  40. user.save
  41. }
  42. }
  43. if config[:always_role]
  44. config[:always_role].each {|role, active|
  45. next if !active
  46. role_ids = user.role_ids
  47. role = Role.where( :name => role ).first
  48. next if !role
  49. role_ids.push role.id
  50. user.role_ids = role_ids
  51. user.save
  52. }
  53. end
  54. return user
  55. end
  56. end