Skip to content

Instantly share code, notes, and snippets.

@pirj
Created August 16, 2012 15:38
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pirj/3371151 to your computer and use it in GitHub Desktop.
Save pirj/3371151 to your computer and use it in GitHub Desktop.
Sinatra + Omniauth
require './site.rb'
run Site
#!/usr/bin/env ruby
require 'bundler'
require 'logger'
Bundler.require
Dir['*.rb', 'models/*.rb'].each { |file| require File.join Dir.pwd, file }
version = ">= 0"
gem 'pry', version
load Gem.bin_path('pry', 'pry', version)
# coding: utf-8
class Site < Sinatra::Base
get '/sessions/new' do
slim :'sessions/new'
end
get '/auth/:provider/callback' do
identity = Identity.authenticate({:email => params[:auth_key]}, params[:password])
return redirect 'sessions/new' unless identity
session[:user_id] = identity.id
flash[:info] = "Добро пожаловать!"
redirect '/company'
end
get '/sessions/logout' do
session[:user_id] = nil
redirect '/'
end
end
# coding: utf-8
class Site < Sinatra::Base
get '/company/register' do
slim :'company/register'
end
post '/company/register' do
company = Company.new name: params[:company]
identity = Identity.create email: params[:auth_key], password: params[:password], password_confirmation: params[:password], :role => 'customer'
Employee.create name: params[:name], company: company, identity: identity
session[:user_id] = identity.id
flash[:info] = "Добро пожаловать!"
redirect '/company'
end
...
end
source 'https://rubygems.org'
gem 'thin'
gem 'eventmachine', '1.0.0.rc.4'
gem 'sinatra'
gem 'sinatra-contrib', :require => 'sinatra/contrib'
gem 'sinatra-flash', :require => 'sinatra/flash'
gem 'rack-protection'
gem 'slim'
gem 'pg'
gem 'datamapper'
%w(core postgres-adapter validations timestamps migrations constraints aggregates types pager is-tree).each do |g|
gem 'dm-' + g
end
gem 'bcrypt-ruby', :require => "bcrypt"
group :development do
gem 'pry'
gem 'dm-sqlite-adapter'
end
gem 'omniauth-identity', :git => 'git://github.com/intridea/omniauth-identity.git'
# coding: utf-8
require 'bundler'
require 'logger'
Bundler.require
require 'sinatra/contrib'
require 'sinatra/streaming'
require 'sinatra/reloader'
require 'sinatra/namespace'
require 'sinatra/content_for'
require 'sinatra/reloader' if development?
Dir['*.rb', 'models/*.rb', 'controllers/*.rb'].each { |file| require File.join Dir.pwd, file }
class Site < Sinatra::Base
register Sinatra::Contrib
register Sinatra::Namespace
enable :sessions
register Sinatra::Flash
helpers Sinatra::ContentFor
helpers Sinatra::Streaming
use Rack::Session::Cookie, :secret => 'fssdfsdfsfohwoiwehfowoefgqfh.zxcn.nwne;knnqonda.sdnca.nwnn'
use Rack::Protection
enable :logging
use Rack::CommonLogger #, Logger.new(STDOUT)
set :root, File.dirname(__FILE__)
use OmniAuth::Builder do
provider :identity, :fields => [:email]
end
error OmniAuth::Error do
403
end
[403, 404, 405, 500].each do |code|
error code do
slim "errors/#{code}.slim"
end
end
DataMapper.setup(:default, ENV['DATABASE_URL'] || "sqlite://#{Dir.pwd}/development.db")
DataMapper.finalize
configure :development do
register Sinatra::Reloader
also_reload './*.rb'
also_reload './models/*.rb'
also_reload './controllers/*.rb'
end
not_found do
'Не найдено.'
end
error do
'Произошло нечто ужасное: ' + env['sinatra.error'].name
end
def current_user
@current_user ||= Identity.get(session[:user_id]) if session[:user_id]
end
end
div#navbar.navbar.navbar-fixed-top
div.navbar-inner
div.container
button.btn.btn-navbar type="button" data-toggle="collapse" data-target=".nav-collapse"
span.icon-bar
span.icon-bar
span.icon-bar
div.nav-collapse.collapse
ul.nav.pull-right
- if current_user
li
a href="/sessions/logout"
| Выйти
- unless current_user
a.btn.btn-primary href="/company/register"
| Зарегистрироваться
li
a href="/sessions/new"
| Войти
- if false
li
a href="#"
| Выйти
- content_for :nav do
== slim :'sessions/nav'
p
a href='/company/register'
| Ещё не зарегистрированы?
form.form-horizontal action="/auth/identity/callback"
fieldset
div.control-group
label.control-label for='auth_key'
| Электронная почта
div.controls
input name='auth_key' type='text'
div.control-group
label.control-label for='password'
| Пароль
div.controls
input name='password' type='password'
div.form-actions
input type='submit' value='Войти' class='btn btn-primary'
- content_for :nav do
== slim :'sessions/nav'
p
a href='/sessions/new'
| Уже зарегистрированы?
form.form-horizontal method='post' action='/company/register'
fieldset
div.control-group
label.control-label for='auth_key'
| Электронная почта
div.controls
input name='auth_key' type='text'
div.control-group
label.control-label for='password'
| Пароль
div.controls
input name='password' type='password'
fieldset
div.control-group
label.control-label for='company'
| Название компании
div.controls
input name='company' type='text'
p.help-block
/| Supporting help text
div.control-group
label.control-label for='name'
| Фамилия Имя Отчество
div.controls
input name='name' type='text'
p.help-block
/| Supporting help text
div.form-actions
input type='submit' value='Зарегистрироваться' class='btn btn-primary'
@pirj
Copy link
Author

pirj commented Oct 13, 2012

This one sucks deeply because of omniauth/omniauth-identity#39

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment