webapp.rb 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. require 'sinatra'
  2. require 'data_mapper'
  3. require 'json'
  4. DataMapper::setup(:default, "sqlite3:///hlbb/data/hacklabbo.db")
  5. configure {
  6. set :server, :puma
  7. }
  8. class Entry
  9. include DataMapper::Resource
  10. property :id, Serial
  11. property :open, Boolean
  12. property :date, DateTime
  13. end
  14. DataMapper.finalize
  15. Entry.auto_upgrade!
  16. set :secret_token, ENV["hl_secret_token"]
  17. get '/' do
  18. entry = Entry.all(limit: 1, order: [ :id.desc ])
  19. state = {
  20. open: false,
  21. date: nil
  22. }
  23. unless entry.empty?
  24. state[:open] = entry[0][:open]
  25. state[:date] = entry[0][:date]
  26. end
  27. erb :index, locals: { state: state }
  28. end
  29. get '/rss.xml' do
  30. entries = Entry.all(limit: 10, order: [ :id.desc ])
  31. erb :rss, locals: { entries: entries }
  32. end
  33. get '/hacklabbo/state.json' do
  34. entry = Entry.all(limit: 1, order: [ :id.desc ])
  35. state = {
  36. open: false,
  37. date: nil
  38. }
  39. unless entry.empty?
  40. state[:open] = entry[0][:open]
  41. state[:date] = entry[0][:date]
  42. end
  43. content_type :json
  44. state.to_json
  45. end
  46. get '/hacklabbo/space.json' do
  47. entry = Entry.all(limit: 1, order: [ :id.desc ])
  48. state = {
  49. open: false,
  50. date: nil
  51. }
  52. unless entry.empty?
  53. state[:open] = entry[0][:open]
  54. state[:date] = entry[0][:date]
  55. end
  56. content_type :json
  57. {
  58. api: "0.13",
  59. space: "hacklabbo",
  60. logo: "http://thecatapi.com/api/images/get?format=src&type=jpg",
  61. url: "https://hacklabbo.indivia.net",
  62. location: {
  63. address: "XM24, Via Aristotile Fioravanti 24, Bologna",
  64. lat: 44.512243,
  65. lon: 11.341099
  66. },
  67. issue_report_channels: [
  68. "ml"
  69. ],
  70. contact: {
  71. ml: "hacklabbo@indivia.net"
  72. },
  73. state: {
  74. open: state[:open]
  75. }
  76. }.to_json
  77. end
  78. get '/hacklabbo/open/:token' do |token|
  79. if token == settings.secret_token
  80. entry = Entry.create(open: true, date: DateTime.now)
  81. if entry.saved?
  82. 200
  83. else
  84. 500
  85. end
  86. else
  87. 403
  88. end
  89. end
  90. get '/hacklabbo/close/:token' do |token|
  91. if token == settings.secret_token
  92. entry = Entry.create(open: false, date: DateTime.now)
  93. if entry.saved?
  94. 200
  95. else
  96. 500
  97. end
  98. else
  99. 403
  100. end
  101. end