webapp.rb 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. require 'sinatra'
  2. require 'data_mapper'
  3. require 'json'
  4. DataMapper::setup(:default, "sqlite3://#{Dir.pwd}/hacklabbo.db")
  5. class Entry
  6. include DataMapper::Resource
  7. property :id, Serial
  8. property :open, Boolean
  9. property :date, DateTime, default: Time.now
  10. end
  11. DataMapper.finalize
  12. Entry.auto_upgrade!
  13. set :secret_token, "unsecure_token"
  14. get '/' do
  15. entry = Entry.all(limit: 1, order: [ :date.desc ])
  16. state = {
  17. open: false,
  18. date: nil
  19. }
  20. unless entry.empty?
  21. state[:open] = entry[0][:open]
  22. state[:date] = entry[0][:date]
  23. end
  24. erb :index, locals: { state: state }
  25. end
  26. get '/rss.xml' do
  27. entries = Entry.all(limit: 10, order: [ :date.desc ])
  28. erb :rss, locals: { entries: entries }
  29. end
  30. get '/hacklabbo/state.json' do
  31. entry = Entry.all(limit: 1, order: [ :date.desc ])
  32. state = {
  33. open: false,
  34. date: nil
  35. }
  36. unless entry.empty?
  37. state[:open] = entry[0][:open]
  38. state[:date] = entry[0][:date]
  39. end
  40. content_type :json
  41. state.to_json
  42. end
  43. get '/hacklabbo/open/:token' do |token|
  44. if token == settings.secret_token
  45. entry = Entry.create(open: true)
  46. if entry.saved?
  47. 200
  48. else
  49. 500
  50. end
  51. else
  52. 403
  53. end
  54. end
  55. get '/hacklabbo/close/:token' do |token|
  56. if token == settings.secret_token
  57. entry = Entry.create(open: false)
  58. if entry.saved?
  59. 200
  60. else
  61. 500
  62. end
  63. else
  64. 403
  65. end
  66. end