require 'sinatra' require 'data_mapper' require 'json' DataMapper::setup(:default, "sqlite3://#{Dir.pwd}/hacklabbo.db") class Entry include DataMapper::Resource property :id, Serial property :open, Boolean property :date, DateTime end DataMapper.finalize Entry.auto_upgrade! set :secret_token, "unsecure_token" get '/' do entry = Entry.all(limit: 1, order: [ :id.desc ]) state = { open: false, date: nil } unless entry.empty? state[:open] = entry[0][:open] state[:date] = entry[0][:date] end erb :index, locals: { state: state } end get '/rss.xml' do entries = Entry.all(limit: 10, order: [ :id.desc ]) erb :rss, locals: { entries: entries } end get '/hacklabbo/state.json' do entry = Entry.all(limit: 1, order: [ :id.desc ]) state = { open: false, date: nil } unless entry.empty? state[:open] = entry[0][:open] state[:date] = entry[0][:date] end content_type :json state.to_json end get '/hacklabbo/open/:token' do |token| if token == settings.secret_token entry = Entry.create(open: true, date: DateTime.now) if entry.saved? 200 else 500 end else 403 end end get '/hacklabbo/close/:token' do |token| if token == settings.secret_token entry = Entry.create(open: false, date: DateTime.now) if entry.saved? 200 else 500 end else 403 end end