token_access.coffee 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. class Index extends App.Controller
  2. events:
  3. 'click [data-type=delete]': 'delete'
  4. 'submit form.js-create': 'create'
  5. constructor: ->
  6. super
  7. return if !@authenticate()
  8. @title 'Token Access', true
  9. @load()
  10. @interval(
  11. =>
  12. @load()
  13. 12000
  14. )
  15. # fetch data, render view
  16. load: (force = false) =>
  17. @ajax(
  18. id: 'user_access_token'
  19. type: 'GET'
  20. url: "#{@apiPath}/user_access_token"
  21. success: (data) =>
  22. # verify is rerender is needed
  23. if !force && @lastestUpdated && data && data[0] && @lastestUpdated.updated_at is data[0].updated_at
  24. return
  25. @lastestUpdated = data[0]
  26. @data = data
  27. @render()
  28. )
  29. render: =>
  30. @html App.view('profile/token_access')(
  31. tokens: @data
  32. )
  33. create: (e) =>
  34. e.preventDefault()
  35. params = @formParam(e.target)
  36. @ajax(
  37. id: 'user_access_token_create'
  38. type: 'POST'
  39. url: "#{@apiPath}/user_access_token"
  40. data: JSON.stringify(params)
  41. processData: true
  42. success: @show
  43. error: @error
  44. )
  45. show: (data) =>
  46. @load()
  47. ui = @
  48. new App.ControllerModal(
  49. head: 'Your New Personal Access Token'
  50. buttonSubmit: 'OK, I\'ve copied my token'
  51. content: ->
  52. App.view('profile/token_access_created')(
  53. name: data.name
  54. )
  55. post: ->
  56. @el.find('.js-select').on('click', ui.selectAll)
  57. onCancel: ->
  58. @close()
  59. onSubmit: ->
  60. @close()
  61. )
  62. delete: (e) =>
  63. e.preventDefault()
  64. return if !confirm(App.i18n.translateInline('Sure?'))
  65. id = $(e.target).closest('a').data('token-id')
  66. @ajax(
  67. id: 'user_access_token_delete'
  68. type: 'DELETE'
  69. url: "#{@apiPath}/user_access_token/#{id}"
  70. processData: true
  71. success: =>
  72. @load(true)
  73. error: @error
  74. )
  75. error: (xhr, status, error) =>
  76. data = JSON.parse(xhr.responseText)
  77. @notify(
  78. type: 'error'
  79. msg: App.i18n.translateContent(data.message)
  80. )
  81. App.Config.set('Token Access', { prio: 3200, name: 'Token Access', parent: '#profile', target: '#profile/token_access', controller: Index, role: [ 'Agent', 'Admin' ] }, 'NavBarProfile')