sinatra-backstage 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/sinatra/backstage/rest/rest_model.rb +18 -0
- data/lib/sinatra/backstage/rest/rest_routes.rb +68 -0
- data/lib/sinatra/backstage/rest.rb +5 -0
- data/lib/sinatra/backstage/user/user_helper.rb +68 -0
- data/lib/sinatra/backstage/user/user_middleware.rb +78 -0
- data/lib/sinatra/backstage/user/user_model.rb +45 -0
- data/lib/sinatra/backstage/user.rb +5 -0
- data/lib/sinatra/backstage.rb +1 -0
- metadata +122 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 8994f18d2816cd1b60ab0d0eaaf902fc3257734d
|
4
|
+
data.tar.gz: 96cf5456d3f53b05660fa121f6764ab1ba42cb48
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 78f4facabf69816443541ed85e4a75d4221d83e3af0a1206eb980456f677222b9bbef158cd054078877138641e38dd053669ce571189fc31405d036def6dea09
|
7
|
+
data.tar.gz: 66d9b80b2c7f6340e6950cf371f5c094d9af0277c873d26efc9a17ea5a4cf35c020c3ff2ad67174d62ff6e2fc653b5d3540ca7e632e9b90d541dc782114a5e9f
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
module Sinatra
|
4
|
+
module Backstage
|
5
|
+
module REST
|
6
|
+
module Routing
|
7
|
+
|
8
|
+
def self.included(controller)
|
9
|
+
controller.extend self
|
10
|
+
end
|
11
|
+
|
12
|
+
def rest_routes(klass, namespace)
|
13
|
+
|
14
|
+
## Routes
|
15
|
+
### get list
|
16
|
+
get namespace do
|
17
|
+
@objects = klass.all params.inject({}){ | hash_sym, (key, val) | hash_sym[key.to_sym] = val; hash_sym }
|
18
|
+
request.accept.each do |type|
|
19
|
+
# puts "type.to_s = #{type.to_s}"
|
20
|
+
case type.to_s
|
21
|
+
when 'text/html'
|
22
|
+
halt eval "#{settings.render_engine} '#{klass.name.split('::').last.downcase}_list'"
|
23
|
+
when 'text/json', 'application/json'
|
24
|
+
halt @objects.to_a.to_json
|
25
|
+
end
|
26
|
+
end
|
27
|
+
error 406
|
28
|
+
end
|
29
|
+
|
30
|
+
### create object
|
31
|
+
post namespace do
|
32
|
+
# puts "params = #{params}"
|
33
|
+
# puts "-- rest_routes post namespace = #{namespace}"
|
34
|
+
# puts "-- rest_routes post klass = #{klass}"
|
35
|
+
# halt
|
36
|
+
begin
|
37
|
+
object = klass.create params[:object]
|
38
|
+
redirect namespace
|
39
|
+
rescue DataMapper::SaveFailureError => e
|
40
|
+
puts e.resource.errors.inspect
|
41
|
+
puts e.message
|
42
|
+
puts e.backtrace
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
### update object
|
47
|
+
put "#{namespace}/:id" do |id|
|
48
|
+
klass.get!(id).update params[:object]
|
49
|
+
redirect namespace
|
50
|
+
end
|
51
|
+
|
52
|
+
### delete object
|
53
|
+
delete "#{namespace}/:id" do |id|
|
54
|
+
klass.get!(id).destroy
|
55
|
+
redirect namespace
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.included(app)
|
63
|
+
app.include Routing
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
## sinatra gems
|
2
|
+
require 'sinatra'
|
3
|
+
|
4
|
+
require_relative './user_model'
|
5
|
+
|
6
|
+
module Sinatra
|
7
|
+
module Backstage
|
8
|
+
module User
|
9
|
+
module Helper
|
10
|
+
|
11
|
+
def self.included(app)
|
12
|
+
if app.ancestors.include? Sinatra::Base
|
13
|
+
app.set(:user_routes) do |bool|
|
14
|
+
condition do
|
15
|
+
(request.path =~ ( bool ?
|
16
|
+
/^\/(login|signup)/ :
|
17
|
+
/^(?!\/(login|signup))/
|
18
|
+
)) != nil
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
## Hooks
|
23
|
+
app.before :user_routes => true do
|
24
|
+
# puts "-- Backstage::User login|signup authorized? = #{authorized?}"
|
25
|
+
redirect '/' if authorized?
|
26
|
+
# settings.site_routes[request.path]['active'] = true if settings.site_routes[request.path]
|
27
|
+
end
|
28
|
+
|
29
|
+
# app.after :user_routes => true do
|
30
|
+
# settings.site_routes[request.path]['active'] = false if settings.site_routes[request.path]
|
31
|
+
# end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def set_session(user)
|
36
|
+
if user
|
37
|
+
cookies[:username] = user.username
|
38
|
+
cookies[:session] = user.session
|
39
|
+
else
|
40
|
+
cookies[:username] = nil
|
41
|
+
cookies[:session] = nil
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def authorized?
|
46
|
+
authorized_user.is_a? User
|
47
|
+
end
|
48
|
+
|
49
|
+
def authorized_user
|
50
|
+
if @authorized_user.nil?
|
51
|
+
return nil unless cookies[:username] && cookies[:session]
|
52
|
+
user = settings.user_class.first :username => cookies[:username]
|
53
|
+
return nil unless user
|
54
|
+
@authorized_user = (user.session == cookies[:session] ? user : false)
|
55
|
+
end
|
56
|
+
@authorized_user
|
57
|
+
end
|
58
|
+
|
59
|
+
def user_role
|
60
|
+
authorized? ? :user : :guest
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
include Helper
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require_relative './user_helper'
|
2
|
+
|
3
|
+
module Sinatra
|
4
|
+
module Backstage
|
5
|
+
module User
|
6
|
+
|
7
|
+
def self.registered(app)
|
8
|
+
|
9
|
+
## Helpers
|
10
|
+
app.helpers Sinatra::Cookies, Backstage::User::Helper
|
11
|
+
|
12
|
+
## Configure
|
13
|
+
app.enable :sessions
|
14
|
+
|
15
|
+
app.set :user_class, Backstage::User::User
|
16
|
+
|
17
|
+
## Routes
|
18
|
+
### get login page
|
19
|
+
app.get '/login' do
|
20
|
+
eval "#{settings.render_engine} 'user/login'"
|
21
|
+
end
|
22
|
+
|
23
|
+
app.get '/signup' do
|
24
|
+
eval "#{settings.render_engine} 'user/signup'"
|
25
|
+
end
|
26
|
+
|
27
|
+
### signup user
|
28
|
+
app.post '/signup' do
|
29
|
+
# puts "params = #{params}"
|
30
|
+
# halt
|
31
|
+
@errors = []
|
32
|
+
begin
|
33
|
+
user = settings.user_class.create params[:user]
|
34
|
+
set_session user
|
35
|
+
redirect '/'
|
36
|
+
rescue DataMapper::SaveFailureError => e
|
37
|
+
puts e.resource.errors.inspect
|
38
|
+
e.resource.errors.each do |error|
|
39
|
+
puts error.inspect
|
40
|
+
@errors << error
|
41
|
+
end
|
42
|
+
@errors.flatten!
|
43
|
+
puts @errors.inspect
|
44
|
+
end
|
45
|
+
# puts "User::Middleware post /signup ( params['user']['email'] = #{params['user']['email']} )"
|
46
|
+
eval "#{settings.render_engine} 'user/signup'"
|
47
|
+
end
|
48
|
+
|
49
|
+
### login user
|
50
|
+
app.post '/login' do
|
51
|
+
@errors = []
|
52
|
+
password = params[:user].delete('password')
|
53
|
+
user = settings.user_class.first params[:user]
|
54
|
+
# puts "User::Middleware post '/login' ( params[:user] = #{params[:user]} )"
|
55
|
+
# puts "User::Middleware post '/login' ( user = #{user} )"
|
56
|
+
if user.nil?
|
57
|
+
@errors << "Incorrect #{params[:user].keys.join(' or ')}"
|
58
|
+
else
|
59
|
+
if user.password == password
|
60
|
+
set_session user
|
61
|
+
redirect '/'
|
62
|
+
else
|
63
|
+
@errors << "Incorrect password"
|
64
|
+
end
|
65
|
+
end
|
66
|
+
eval "#{settings.render_engine} 'user/login'"
|
67
|
+
end
|
68
|
+
|
69
|
+
### logout user
|
70
|
+
app.get '/logout' do
|
71
|
+
set_session nil
|
72
|
+
redirect '/'
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
## database gems
|
2
|
+
require 'dm-core'
|
3
|
+
require 'dm-types'
|
4
|
+
require 'dm-validations'
|
5
|
+
|
6
|
+
## Store class (DataMapper Resource)
|
7
|
+
module Sinatra
|
8
|
+
module Backstage
|
9
|
+
module User
|
10
|
+
class User
|
11
|
+
|
12
|
+
include DataMapper::Resource
|
13
|
+
|
14
|
+
## Properties
|
15
|
+
property :id, Serial
|
16
|
+
property :username, String
|
17
|
+
property :password, BCryptHash,
|
18
|
+
:required => true
|
19
|
+
# property :salt, BCryptHash,
|
20
|
+
# :required => true,
|
21
|
+
# :default => lambda {|r, p| BCrypt::Engine.generate_salt }
|
22
|
+
|
23
|
+
# def salt
|
24
|
+
# self.salt = BCrypt::Engine.generate_salt if super.nil?
|
25
|
+
# end
|
26
|
+
|
27
|
+
# def password=(new_password)
|
28
|
+
# # self.password_hash = generate_salt_hash(new_password)
|
29
|
+
# self.password_hash = new_password
|
30
|
+
# end
|
31
|
+
|
32
|
+
def session
|
33
|
+
# generate_salt_hash(username)
|
34
|
+
BCrypt::Engine.hash_secret(username, password)
|
35
|
+
end
|
36
|
+
|
37
|
+
## Methods
|
38
|
+
# def generate_salt_hash(check_password)
|
39
|
+
# BCrypt::Engine.hash_secret(check_password, salt)
|
40
|
+
# end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
Dir.glob(File.join(__dir__, 'backstage', '*.rb')).each {|file| require file }
|
metadata
ADDED
@@ -0,0 +1,122 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: sinatra-backstage
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Alexander Popov
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-05-18 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: sinatra
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: sinatra-contrib
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: dm-core
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: dm-types
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: dm-validations
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1'
|
83
|
+
description: Sinatra-Backstage simplifies the use of the basic routes and models for
|
84
|
+
Sinatra and DataMapper. Currently it includes REST and User.
|
85
|
+
email: alex.wayfer@gmail.com
|
86
|
+
executables: []
|
87
|
+
extensions: []
|
88
|
+
extra_rdoc_files: []
|
89
|
+
files:
|
90
|
+
- lib/sinatra/backstage.rb
|
91
|
+
- lib/sinatra/backstage/rest.rb
|
92
|
+
- lib/sinatra/backstage/rest/rest_model.rb
|
93
|
+
- lib/sinatra/backstage/rest/rest_routes.rb
|
94
|
+
- lib/sinatra/backstage/user.rb
|
95
|
+
- lib/sinatra/backstage/user/user_helper.rb
|
96
|
+
- lib/sinatra/backstage/user/user_middleware.rb
|
97
|
+
- lib/sinatra/backstage/user/user_model.rb
|
98
|
+
homepage: https://bitbucket.org/AlexWayfer/sinatra-backstage
|
99
|
+
licenses:
|
100
|
+
- MIT
|
101
|
+
metadata: {}
|
102
|
+
post_install_message:
|
103
|
+
rdoc_options: []
|
104
|
+
require_paths:
|
105
|
+
- lib
|
106
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
112
|
+
requirements:
|
113
|
+
- - ">="
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
version: '0'
|
116
|
+
requirements: []
|
117
|
+
rubyforge_project:
|
118
|
+
rubygems_version: 2.4.5
|
119
|
+
signing_key:
|
120
|
+
specification_version: 4
|
121
|
+
summary: Extension for Sinatra and DataMapper
|
122
|
+
test_files: []
|