Browse Source

Beginnings of a Sinatra thingy

Douglas Thrift 6 years ago
parent
commit
7c096b1d06
8 changed files with 167 additions and 0 deletions
  1. 2 0
      .gitignore
  2. 10 0
      Gemfile
  3. 55 0
      Gemfile.lock
  4. 70 0
      app.rb
  5. 9 0
      config.ru
  6. 3 0
      config.sample.yml
  7. 1 0
      views/index.erb
  8. 17 0
      views/layout.erb

+ 2 - 0
.gitignore

@@ -2,7 +2,9 @@
 *.gem
 *.rbc
 /.config
+/config.yml
 /coverage/
+/db.sqlite3
 /InstalledFiles
 /pkg/
 /spec/reports/

+ 10 - 0
Gemfile

@@ -0,0 +1,10 @@
+source 'https://rubygems.org'
+
+gem 'erubis'
+gem 'flickr-login'
+gem 'flickraw'
+gem 'pry'
+gem 'sinatra'
+gem 'sinatra-contrib'
+gem 'sinatra-sequel'
+gem 'sqlite3'

+ 55 - 0
Gemfile.lock

@@ -0,0 +1,55 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    backports (3.10.3)
+    bacon (1.2.0)
+    coderay (1.1.2)
+    erubis (2.7.0)
+    flickr-login (0.0.3)
+      oauth
+    flickraw (0.9.9)
+    method_source (0.9.0)
+    multi_json (1.12.2)
+    mustermann (1.0.1)
+    oauth (0.5.3)
+    pry (0.11.2)
+      coderay (~> 1.1.0)
+      method_source (~> 0.9.0)
+    rack (2.0.3)
+    rack-protection (2.0.0)
+      rack
+    sequel (5.2.0)
+    sinatra (2.0.0)
+      mustermann (~> 1.0)
+      rack (~> 2.0)
+      rack-protection (= 2.0.0)
+      tilt (~> 2.0)
+    sinatra-contrib (2.0.0)
+      backports (>= 2.0)
+      multi_json
+      mustermann (~> 1.0)
+      rack-protection (= 2.0.0)
+      sinatra (= 2.0.0)
+      tilt (>= 1.3, < 3)
+    sinatra-sequel (0.9.0)
+      bacon
+      sequel (>= 3.2.0)
+      sinatra (>= 0.9.4)
+    sqlite3 (1.3.13)
+    tilt (2.0.8)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  erubis
+  flickr-login
+  flickraw
+  pry
+  sinatra
+  sinatra-contrib
+  sinatra-sequel
+  sqlite3
+
+BUNDLED WITH
+   1.15.4

+ 70 - 0
app.rb

@@ -0,0 +1,70 @@
+require 'flickr/login'
+require 'flickraw'
+require 'sinatra'
+require 'sinatra/config_file'
+require 'sinatra/reloader'
+require 'sinatra/sequel'
+
+config_file 'config.yml'
+
+enable :sessions
+
+set :database, 'sqlite://db.sqlite3'
+
+migration 'create users, licenses, and photos tables' do
+  database.create_table :users do
+    column :nsid, String, primary_key: true
+    column :username, String
+    column :fullname, String
+  end
+
+  database.create_table :licenses do
+    column :id, Integer, primary_key: true
+    column :name, String
+    column :url, String
+  end
+
+  database.create_table :photos do
+    column :id, Integer, primary_key: true
+    foreign_key :owner, :users
+    foreign_key :license, :licenses
+    column :json, 'text'
+    column :ignore, 'boolean'
+  end
+end
+
+helpers Flickr::Login::Helpers
+helpers do
+  def flickr
+    unless @flickr
+      @flickr = FlickRaw::Flickr.new(api_key: settings.flickr_api_key, shared_secret: settings.flickr_shared_secret)
+      @flickr.access_token, @flickr.access_secret = flickr_access_token
+    end
+    @flickr
+  end
+end
+
+before do
+  redirect to('/login?perms=write') unless flickr_user
+end
+
+get '/' do
+  erb :index
+end
+
+get '/logout' do
+  flickr_clear
+  redirect to('/')
+end
+
+=begin
+def list(user)
+  all_photos = []
+  page = 0
+  begin
+    photos = flickr.photos.search(user_id: user, extras: 'license', per_page: 500, page: page += 1)
+    all_photos.push(*photos.to_a)
+  end until photos.size < 500
+  all_photos
+end
+=end

+ 9 - 0
config.ru

@@ -0,0 +1,9 @@
+require_relative 'app'
+require 'flickr/login'
+require 'pathname'
+
+flickr = Flickr::Login.new(settings.flickr_api_key, settings.flickr_shared_secret)
+flickr_endpoint = flickr.login_handler(return_to: '/')
+
+use Rack::Session::Cookie, secret: settings.session_secret
+run Rack::URLMap.new('/' => Sinatra::Application, '/login' => flickr_endpoint)

+ 3 - 0
config.sample.yml

@@ -0,0 +1,3 @@
+flickr_api_key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+flickr_shared_secret: xxxxxxxxxxxxxxxx
+session_secret: xxxxxxxxxxxx

+ 1 - 0
views/index.erb

@@ -0,0 +1 @@
+Hello <%= flickr_user[:fullname] %>!

+ 17 - 0
views/layout.erb

@@ -0,0 +1,17 @@
+<!DOCTYPE HTML>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+        <meta name="viewport" content="width=device-width, initial-scale=1.0">
+        <meta name="HandheldFriendly" content="True">
+        <meta name="MobileOptimized" content="320">
+
+        <title><% if @title %><%= @title %> &middot; <% end %>Flickr License</title>
+    </head>
+    <body>
+        <main container>
+            <%= yield %>
+        </main>
+    </body>
+</html>