app.rb 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. require 'flickr/login'
  2. require 'flickraw'
  3. require 'pry'
  4. require 'sinatra'
  5. require 'sinatra/config_file'
  6. require 'sinatra/json'
  7. require 'sinatra/reloader'
  8. require 'sinatra/sequel'
  9. config_file 'config.yml'
  10. enable :sessions
  11. set :database, 'sqlite://db.sqlite3'
  12. migration 'create users, licenses, and photos tables' do
  13. database.create_table :users do
  14. column :nsid, String, primary_key: true
  15. column :username, String
  16. column :fullname, String
  17. end
  18. database.create_table :licenses do
  19. column :id, Integer, primary_key: true
  20. column :name, String
  21. column :url, String
  22. end
  23. database.create_table :photos do
  24. column :id, Integer, primary_key: true
  25. foreign_key :owner, :users
  26. foreign_key :license, :licenses
  27. column :json, 'text'
  28. column :ignore, 'boolean'
  29. end
  30. end
  31. class User < Sequel::Model
  32. one_to_many :photo, key: :owner
  33. unrestrict_primary_key
  34. end
  35. class License < Sequel::Model
  36. one_to_many :photo, key: :license
  37. unrestrict_primary_key
  38. end
  39. class Photo < Sequel::Model
  40. many_to_one :user, key: :owner
  41. many_to_one :license, key: :license
  42. unrestrict_primary_key
  43. end
  44. helpers Flickr::Login::Helpers
  45. helpers do
  46. def flickr
  47. unless @flickr
  48. @flickr = FlickRaw::Flickr.new(api_key: settings.flickr_api_key, shared_secret: settings.flickr_shared_secret)
  49. @flickr.access_token, @flickr.access_secret = flickr_access_token
  50. end
  51. @flickr
  52. end
  53. end
  54. before do
  55. redirect to('/login?perms=write') unless flickr_user
  56. @user = User.find_or_create(nsid: flickr_user[:user_nsid]) do |user|
  57. user.username = flickr_user[:username]
  58. user.fullname = flickr_user[:fullname]
  59. end
  60. end
  61. get '/' do
  62. flickr.photos.licenses.getInfo.each do |flickr_license|
  63. License.create do |license|
  64. license.id = flickr_license.id
  65. license.name = flickr_license.name
  66. license.url = flickr_license.url
  67. end
  68. end if License.count == 0
  69. erb :index
  70. end
  71. get '/logout' do
  72. flickr_clear
  73. redirect to('/')
  74. end
  75. get %r{/photos/([1-8])} do |page|
  76. page, per_page = page.to_i, 500
  77. photos = flickr.photos.search(user_id: :me, extras: 'license', per_page: per_page, page: page)
  78. json page: page, per_page: per_page, photos: photos
  79. end