social_stream-oauth2_server 2.0.3 → 2.1.0
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 +4 -4
- data/app/assets/stylesheets/social_stream-oauth2_server.css.sass +1 -1
- data/app/assets/stylesheets/social_stream/oauth2_server/applications/_applications-oauth2server.css.sass +1 -1
- data/app/assets/stylesheets/social_stream/oauth2_server/applications/layout/_applications-oauth2server.css.sass +4 -0
- data/app/assets/stylesheets/social_stream/oauth2_server/create/_create-oauth2server.css.sass +3 -7
- data/app/assets/stylesheets/social_stream/oauth2_server/mixins/_mixin.css.sass +10 -0
- data/app/assets/stylesheets/social_stream/oauth2_server/show/layout/_show-oauth2server.css.sass +15 -6
- data/app/controllers/site/clients_controller.rb +14 -11
- data/app/models/relation/manager.rb +19 -0
- data/app/models/site/client.rb +10 -6
- data/app/views/site/clients/_avatar.html.erb +15 -0
- data/app/views/site/clients/_edit.html.erb +6 -0
- data/app/views/site/clients/_edit_step_2.html.erb +11 -0
- data/app/views/site/clients/_edit_step_3.html.erb +10 -0
- data/app/views/site/clients/_list.html.erb +20 -17
- data/app/views/site/clients/edit.html.erb +5 -6
- data/app/views/site/clients/index.html.erb +1 -1
- data/app/views/site/clients/new.html.erb +4 -2
- data/app/views/site/clients/show.html.erb +49 -42
- data/config/locales/en.yml +21 -3
- data/config/locales/es.yml +26 -11
- data/config/locales/zh.yml +25 -0
- data/db/migrate/20130619134332_site_client_admin_to_manager.rb +24 -0
- data/lib/social_stream-oauth2_server.rb +1 -19
- data/lib/social_stream/oauth2_server.rb +33 -5
- data/lib/social_stream/oauth2_server/ability.rb +23 -0
- data/lib/social_stream/oauth2_server/engine.rb +6 -0
- data/lib/social_stream/oauth2_server/models/actor.rb +2 -2
- data/lib/social_stream/oauth2_server/version.rb +1 -1
- data/social_stream-oauth2_server.gemspec +1 -1
- data/spec/controllers/site_clients_controller_authorization_spec.rb +112 -0
- data/spec/factories/site_client.rb +2 -2
- data/spec/models/site/client_authorization_spec.rb +20 -0
- metadata +14 -8
- data/app/assets/stylesheets/social_stream/oauth2_server/mixins/_mixins.css.sass +0 -5
- data/app/models/relation/admin.rb +0 -9
- data/app/views/site/clients/_form_step1.html.erb +0 -7
- data/app/views/site/clients/_form_step2.html.erb +0 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1a60e2888e5625188bfc0189ef45f33a371219f7
|
4
|
+
data.tar.gz: 618771f1116c05f0658c38f082f101801b31ad9b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 02c4fcb5e161d6dd4cd900b8819b58b5de16870d9d11197dfe6c74267699f6526e479fb8c2b79f229506caac19a6fc21c8e52c267dea23b491aa17cf6bce453a
|
7
|
+
data.tar.gz: 3f6933a27f7fdaccb410f999e70b0a69d5e23c6cb3fe37e6f989834a5321d1cbc4e1acbab88a4f8e519ba68800a859458506eaa3757c3ff36bcb5ed99f864cc1
|
@@ -1,4 +1,4 @@
|
|
1
|
-
@import "social_stream/oauth2_server/mixins/
|
1
|
+
@import "social_stream/oauth2_server/mixins/mixin"
|
2
2
|
|
3
3
|
@import "social_stream/oauth2_server/applications/applications-oauth2server"
|
4
4
|
@import "social_stream/oauth2_server/applications/layout/applications-oauth2server"
|
@@ -0,0 +1,10 @@
|
|
1
|
+
// menu horizontal
|
2
|
+
// ----------------------------------
|
3
|
+
|
4
|
+
@mixin principal-box
|
5
|
+
@include border-radius(5px)
|
6
|
+
@include box-shadow (1px 1px 15px 0px rgba(50, 50, 50, 0.1))
|
7
|
+
border: 1px solid
|
8
|
+
border-color: rgba(0,0,0, 0.1)
|
9
|
+
background-color: $auxiliarColor
|
10
|
+
border-color: rgba(0,0,0, 0.1)
|
data/app/assets/stylesheets/social_stream/oauth2_server/show/layout/_show-oauth2server.css.sass
CHANGED
@@ -34,8 +34,8 @@
|
|
34
34
|
margin-left: 2.85%
|
35
35
|
.site_client
|
36
36
|
width: 95%
|
37
|
-
padding
|
38
|
-
|
37
|
+
padding: 0 2.5%
|
38
|
+
margin-bottom: 30px
|
39
39
|
display: inline-block
|
40
40
|
h1
|
41
41
|
@include clearfix
|
@@ -56,6 +56,9 @@
|
|
56
56
|
margin-top: -50px
|
57
57
|
h4
|
58
58
|
margin-bottom: 0px
|
59
|
+
font-size: 18px
|
60
|
+
color: $principalColor
|
61
|
+
font-family: $serifFontFamily
|
59
62
|
.name,
|
60
63
|
.url,
|
61
64
|
.users
|
@@ -69,21 +72,27 @@
|
|
69
72
|
margin-left: 20px
|
70
73
|
padding-top: 5px
|
71
74
|
border-top: 1px solid #C1C1C1
|
75
|
+
color: #929292
|
76
|
+
font-size: 17px
|
72
77
|
.btn-group
|
73
78
|
@include btn-primary
|
74
79
|
@include border-radius(5px)
|
75
80
|
@include btn-add
|
81
|
+
float: right
|
76
82
|
.dropdown-menu
|
77
83
|
width: 300px
|
78
84
|
margin-left: -196px
|
85
|
+
padding: 10px 14px
|
86
|
+
color: $gray
|
79
87
|
li
|
80
|
-
word-break: break-all
|
81
|
-
overflow-y: hidden
|
82
|
-
overflow-x: scroll
|
83
88
|
h6
|
84
89
|
border-bottom: 1px solid #CCC
|
85
90
|
a
|
86
|
-
color: principalColor
|
91
|
+
color: $principalColor !important
|
92
|
+
li.client-secret
|
93
|
+
p
|
94
|
+
word-break: break-all
|
95
|
+
overflow-x: scroll
|
87
96
|
|
88
97
|
|
89
98
|
|
@@ -1,18 +1,12 @@
|
|
1
1
|
class Site::ClientsController < ApplicationController
|
2
2
|
before_filter :authenticate_user!
|
3
3
|
|
4
|
-
before_filter :set_author_ids, only: [ :create, :update ]
|
4
|
+
before_filter :set_author_ids, only: [ :new, :create, :update ]
|
5
5
|
|
6
|
-
|
7
|
-
@developer_clients = current_subject.developer_site_clients
|
8
|
-
end
|
9
|
-
|
10
|
-
def show
|
11
|
-
@client = Site::Client.find params[:id]
|
12
|
-
end
|
6
|
+
load_and_authorize_resource
|
13
7
|
|
14
|
-
def
|
15
|
-
@
|
8
|
+
def index
|
9
|
+
@clients = current_subject.managed_site_clients
|
16
10
|
end
|
17
11
|
|
18
12
|
def create
|
@@ -20,7 +14,9 @@ class Site::ClientsController < ApplicationController
|
|
20
14
|
|
21
15
|
if @client.save
|
22
16
|
respond_to do |format|
|
23
|
-
format.html {
|
17
|
+
format.html {
|
18
|
+
redirect_to edit_site_client_path(@client, step: 2)
|
19
|
+
}
|
24
20
|
end
|
25
21
|
else
|
26
22
|
respond_to do |format|
|
@@ -47,9 +43,16 @@ class Site::ClientsController < ApplicationController
|
|
47
43
|
end
|
48
44
|
end
|
49
45
|
|
46
|
+
def destroy
|
47
|
+
@client.destroy
|
48
|
+
|
49
|
+
redirect_to home_path
|
50
|
+
end
|
51
|
+
|
50
52
|
private
|
51
53
|
|
52
54
|
def set_author_ids
|
55
|
+
params[:site_client] ||= HashWithIndifferentAccess.new
|
53
56
|
params[:site_client][:author_id] = current_subject.actor_id
|
54
57
|
params[:site_client][:user_author_id] = current_user.actor_id
|
55
58
|
params[:site_client][:owner_id] = current_subject.actor_id
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# Owner of client sites
|
2
|
+
class Relation::Manager < Relation::Single
|
3
|
+
PERMISSIONS =
|
4
|
+
[
|
5
|
+
[ 'manage', nil ],
|
6
|
+
[ 'manage', 'relation/custom' ],
|
7
|
+
[ 'manage', 'contact' ]
|
8
|
+
]
|
9
|
+
|
10
|
+
class << self
|
11
|
+
def create_activity?
|
12
|
+
false
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def available_permissions
|
17
|
+
Permission.instances PERMISSIONS
|
18
|
+
end
|
19
|
+
end
|
data/app/models/site/client.rb
CHANGED
@@ -4,12 +4,13 @@ class Site::Client < Site
|
|
4
4
|
before_validation :set_secret,
|
5
5
|
on: :create
|
6
6
|
|
7
|
-
after_create :
|
7
|
+
after_create :set_manager
|
8
8
|
|
9
|
-
scope :
|
10
|
-
|
9
|
+
scope :managed_by, lambda { |actor|
|
10
|
+
select("DISTINCT sites.*").
|
11
|
+
joins(actor: :sent_permissions).
|
11
12
|
merge(Contact.received_by(actor)).
|
12
|
-
merge(
|
13
|
+
merge(Permission.where(action: 'manage', object: nil))
|
13
14
|
}
|
14
15
|
|
15
16
|
%w{ url callback_url secret }.each do |m|
|
@@ -32,7 +33,10 @@ class Site::Client < Site
|
|
32
33
|
self.secret = SecureRandom.hex(64)
|
33
34
|
end
|
34
35
|
|
35
|
-
def
|
36
|
-
|
36
|
+
def set_manager
|
37
|
+
c = sent_contacts.create! receiver_id: author.id,
|
38
|
+
user_author: author
|
39
|
+
|
40
|
+
c.relation_ids = [ ::Relation::Manager.instance.id ]
|
37
41
|
end
|
38
42
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<section class="avatar">
|
2
|
+
<% if can? :update, @profile %>
|
3
|
+
<header>
|
4
|
+
<%= render partial: 'edit_icon' %>
|
5
|
+
<h4>
|
6
|
+
<%= t('avatar.profile_change') %>
|
7
|
+
</h4>
|
8
|
+
</header>
|
9
|
+
<div class="update">
|
10
|
+
<%= render partial: 'avatars/form',
|
11
|
+
object: @profile.actor,
|
12
|
+
as: :avatarable %>
|
13
|
+
</div>
|
14
|
+
<% end %>
|
15
|
+
</section>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<%= image_tag 'step_2.png' %>
|
2
|
+
|
3
|
+
<section class="new_app">
|
4
|
+
<h1>Set the application's logo</h1>
|
5
|
+
|
6
|
+
<%= render partial: 'avatars/form',
|
7
|
+
object: @client,
|
8
|
+
as: :avatarable %>
|
9
|
+
|
10
|
+
<%= link_to "Next", edit_site_client_path(@client, step: 3) %>
|
11
|
+
</section>
|
@@ -1,24 +1,27 @@
|
|
1
1
|
<section class="site_clients_list">
|
2
|
-
|
2
|
+
<ul>
|
3
|
+
<% list.each do |client| %>
|
4
|
+
<li>
|
5
|
+
<%= image_tag client.logo.url(:small), style: "width: 40px; height: 40px;" %>
|
3
6
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
<% end %>
|
7
|
+
<div class="name">
|
8
|
+
<%= link_to client.name, client %>
|
9
|
+
</div>
|
10
|
+
<div class="url">
|
11
|
+
<%= link_to client.url, client.url, target: '_blank' %>
|
12
|
+
</div>
|
13
|
+
<div class="users">
|
14
|
+
<span>
|
15
|
+
5
|
16
|
+
</span>
|
17
|
+
users
|
18
|
+
</div>
|
19
|
+
<hr class="soften">
|
20
|
+
</li>
|
21
|
+
<% end %>
|
20
22
|
|
21
23
|
<%= javascript_tag do %>
|
22
24
|
SocialStream.SiteClient.index();
|
23
25
|
<% end %>
|
26
|
+
</ul>
|
24
27
|
</section>
|
@@ -3,12 +3,11 @@
|
|
3
3
|
<%= render partial: 'toolbar/home' %>
|
4
4
|
|
5
5
|
<section class="edit_site_client" id="edit_<%= dom_id @client %>">
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
<%= render partial: '
|
10
|
-
|
11
|
-
</section>
|
6
|
+
<% if params[:step].present? %>
|
7
|
+
<%= render partial: "edit_step_#{ params[:step] }" %>
|
8
|
+
<% else %>
|
9
|
+
<%= render partial: 'edit' %>
|
10
|
+
<% end %>
|
12
11
|
</section>
|
13
12
|
</section>
|
14
13
|
|
@@ -20,7 +20,7 @@
|
|
20
20
|
<%= Site::Client.human_attribute_name :description %>
|
21
21
|
</h4>
|
22
22
|
<div class="result">
|
23
|
-
<%=
|
23
|
+
<%= @client.description%>
|
24
24
|
</div>
|
25
25
|
|
26
26
|
<h4>
|
@@ -30,45 +30,52 @@
|
|
30
30
|
<%= link_to @client.url, @client.url%>
|
31
31
|
</div>
|
32
32
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
33
|
+
<% if can? :update, @client %>
|
34
|
+
<h4>
|
35
|
+
<%= Site::Client.human_attribute_name :callback_url %>
|
36
|
+
</h4>
|
37
|
+
<div class="result">
|
38
|
+
<%= @client.callback_url %>
|
39
|
+
</div>
|
40
|
+
<% end %>
|
39
41
|
</div>
|
40
42
|
|
41
|
-
|
42
|
-
<
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
<
|
48
|
-
<
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
<
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
43
|
+
<% if can? :update, @client %>
|
44
|
+
<div class="btn-group">
|
45
|
+
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
46
|
+
Credentials
|
47
|
+
<span class="caret"></span>
|
48
|
+
</a>
|
49
|
+
<ul class="dropdown-menu">
|
50
|
+
<li>
|
51
|
+
<h6>
|
52
|
+
<%= Site::Client.human_attribute_name :id %>
|
53
|
+
</h6>
|
54
|
+
<p>
|
55
|
+
<%= @client.id %>
|
56
|
+
</p>
|
57
|
+
</li>
|
58
|
+
|
59
|
+
<li class="client-secret">
|
60
|
+
<h6>
|
61
|
+
<%= Site::Client.human_attribute_name :secret %>
|
62
|
+
<a href="#" class="pull-right">refresh</a>
|
63
|
+
</h6>
|
64
|
+
<p>
|
65
|
+
<%= @client.secret %>
|
66
|
+
</p>
|
67
|
+
</li>
|
68
|
+
</ul>
|
69
|
+
</div>
|
70
|
+
<% end %>
|
64
71
|
</div>
|
65
72
|
</section>
|
66
73
|
|
67
74
|
<div class="tabbable"> <!-- Only required for left/right tabs -->
|
68
75
|
<ul class="nav nav-tabs">
|
69
|
-
<li class="active"><a href="#
|
70
|
-
<li><a href="#
|
71
|
-
<li><a href="#
|
76
|
+
<li class="active"><a href="#authorized" data-toggle="tab">Authorized</a></li>
|
77
|
+
<li><a href="#registered" data-toggle="tab">Registered</a></li>
|
78
|
+
<li><a href="#stats" data-toggle="tab">Stats</a></li>
|
72
79
|
</ul>
|
73
80
|
<div class="search-nav hidden-phone">
|
74
81
|
<%= form_tag search_path, method: 'get', class: "navbar-search pull-left" do %>
|
@@ -79,6 +86,7 @@
|
|
79
86
|
SocialStream.SearchHeader.show();
|
80
87
|
});
|
81
88
|
<% end %>
|
89
|
+
|
82
90
|
<div class="mat">
|
83
91
|
<%= render partial: 'layouts/loading' %>
|
84
92
|
|
@@ -97,18 +105,17 @@
|
|
97
105
|
|
98
106
|
|
99
107
|
<div class="tab-content">
|
100
|
-
<div class="tab-pane active" id="
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
</ul>
|
108
|
+
<div class="tab-pane active" id="authorized">
|
109
|
+
<%= render partial: 'contacts/contact',
|
110
|
+
collection: @client.sent_contacts.first(12) %>
|
111
|
+
</div>
|
112
|
+
|
113
|
+
<div class="tab-pane" id="registered">
|
107
114
|
</div>
|
108
115
|
|
109
|
-
<div class="tab-pane" id="
|
116
|
+
<div class="tab-pane" id="stats">
|
110
117
|
</div>
|
111
118
|
</div>
|
112
119
|
</div>
|
113
120
|
|
114
|
-
</section>
|
121
|
+
</section>
|
data/config/locales/en.yml
CHANGED
@@ -21,12 +21,30 @@ en:
|
|
21
21
|
helpers:
|
22
22
|
submit:
|
23
23
|
site_client:
|
24
|
-
create:
|
25
|
-
update:
|
24
|
+
create: Next
|
25
|
+
update: Save
|
26
26
|
permission:
|
27
|
+
description:
|
28
|
+
default:
|
29
|
+
brief:
|
30
|
+
manage:
|
31
|
+
contact: Manage authorizations
|
32
|
+
nil: Manage the site
|
33
|
+
relation/custom: Manage roles
|
34
|
+
detailed:
|
35
|
+
manage:
|
36
|
+
nil:
|
37
|
+
positive: They WILL BE ABLE to update the details of the client site
|
38
|
+
negative: They WILL NOT BE ABLE to update the details of the client
|
39
|
+
site
|
40
|
+
relation/custom:
|
41
|
+
positive: They WILL BE ABLE to create, update and delete the roles of
|
42
|
+
the client site
|
43
|
+
negative: They WILL NOT BE ABLE to create, update and delete the roles
|
44
|
+
of the client site
|
27
45
|
public_info: Read your public information
|
28
46
|
relation_admin:
|
29
|
-
name:
|
47
|
+
name: Site Client Admin
|
30
48
|
site:
|
31
49
|
client:
|
32
50
|
added: Added sites
|
data/config/locales/es.yml
CHANGED
@@ -10,15 +10,38 @@ es:
|
|
10
10
|
name: Nombre
|
11
11
|
secret: Client Secret
|
12
12
|
url: URL
|
13
|
+
authorization:
|
14
|
+
form:
|
15
|
+
accept: Accept
|
16
|
+
cancel: Cancel
|
17
|
+
new:
|
18
|
+
title: Authorize %{client}?
|
19
|
+
permission:
|
20
|
+
title: 'The site %{client} will be able to:'
|
13
21
|
helpers:
|
14
22
|
submit:
|
15
23
|
site_client:
|
16
|
-
create:
|
17
|
-
update:
|
24
|
+
create: Siguiente
|
25
|
+
update: Guardar
|
18
26
|
permission:
|
27
|
+
description:
|
28
|
+
default:
|
29
|
+
brief:
|
30
|
+
manage:
|
31
|
+
nil: Gestionar el sitio
|
32
|
+
relation/custom: Gestionar los roles
|
33
|
+
contact: Manage authorizations
|
34
|
+
detailed:
|
35
|
+
manage:
|
36
|
+
nil:
|
37
|
+
positive: PODRÁN actualizar los detalles del sitio
|
38
|
+
negative: NO PODRÁN actualizar los detalles del sitio
|
39
|
+
relation/custom:
|
40
|
+
positive: PODRÁN crear, actualizar y borrar los roles del sitio
|
41
|
+
negative: NO PODRÁN crear, actualizar y borrar los roles del sitio
|
19
42
|
public_info: Acceder a tu información pública
|
20
43
|
relation_admin:
|
21
|
-
name:
|
44
|
+
name: Administrador de Sitio
|
22
45
|
site:
|
23
46
|
client:
|
24
47
|
added: Sitios añadidos
|
@@ -27,11 +50,3 @@ es:
|
|
27
50
|
new:
|
28
51
|
link: Añadir sitio
|
29
52
|
title: Registrar nuevo sitio
|
30
|
-
authorization:
|
31
|
-
form:
|
32
|
-
accept: Accept
|
33
|
-
cancel: Cancel
|
34
|
-
new:
|
35
|
-
title: Authorize %{client}?
|
36
|
-
permission:
|
37
|
-
title: 'The site %{client} will be able to:'
|
data/config/locales/zh.yml
CHANGED
@@ -20,6 +20,24 @@ zh:
|
|
20
20
|
title: 'The site %{client} will be able to:'
|
21
21
|
permission:
|
22
22
|
public_info: Read your public information
|
23
|
+
description:
|
24
|
+
default:
|
25
|
+
brief:
|
26
|
+
manage:
|
27
|
+
nil: Manage the site
|
28
|
+
relation/custom: Manage roles
|
29
|
+
contact: Manage authorizations
|
30
|
+
detailed:
|
31
|
+
manage:
|
32
|
+
nil:
|
33
|
+
positive: They WILL BE ABLE to update the details of the client site
|
34
|
+
negative: They WILL NOT BE ABLE to update the details of the client
|
35
|
+
site
|
36
|
+
relation/custom:
|
37
|
+
positive: They WILL BE ABLE to create, update and delete the roles of
|
38
|
+
the client site
|
39
|
+
negative: They WILL NOT BE ABLE to create, update and delete the roles
|
40
|
+
of the client site
|
23
41
|
site:
|
24
42
|
client:
|
25
43
|
added: Added sites
|
@@ -28,3 +46,10 @@ zh:
|
|
28
46
|
new:
|
29
47
|
link: Add site
|
30
48
|
title: Register new client site
|
49
|
+
helpers:
|
50
|
+
submit:
|
51
|
+
site_client:
|
52
|
+
create: Next
|
53
|
+
update: Save
|
54
|
+
relation_admin:
|
55
|
+
name: Site Client Admin
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class SiteClientAdminToManager < ActiveRecord::Migration
|
2
|
+
|
3
|
+
class Relation::Admin < Relation; end
|
4
|
+
|
5
|
+
def up
|
6
|
+
admin = Relation::Admin.first
|
7
|
+
|
8
|
+
if admin.present?
|
9
|
+
rt = Tie.record_timestamps
|
10
|
+
Tie.record_timestamps = false
|
11
|
+
|
12
|
+
admin.ties.each do |t|
|
13
|
+
t.relation = Relation::Manager.instance
|
14
|
+
t.save!
|
15
|
+
end
|
16
|
+
|
17
|
+
Tie.record_timestamps = rt
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def down
|
22
|
+
raise ActiveRecord::IrreversibleMigration
|
23
|
+
end
|
24
|
+
end
|
@@ -1,19 +1 @@
|
|
1
|
-
require 'social_stream
|
2
|
-
|
3
|
-
require 'rack/oauth2'
|
4
|
-
|
5
|
-
module SocialStream
|
6
|
-
module Oauth2Server
|
7
|
-
module Controllers
|
8
|
-
autoload :Helpers, 'social_stream/oauth2_server/controllers/helpers'
|
9
|
-
end
|
10
|
-
|
11
|
-
module Models
|
12
|
-
autoload :Actor, 'social_stream/oauth2_server/models/actor'
|
13
|
-
autoload :User, 'social_stream/oauth2_server/models/user'
|
14
|
-
end
|
15
|
-
autoload :TokenEndpoint, 'social_stream/oauth2_server/token_endpoint'
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
require 'social_stream/oauth2_server/engine'
|
1
|
+
require 'social_stream/oauth2_server'
|
@@ -1,5 +1,33 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
require 'social_stream-base'
|
2
|
+
|
3
|
+
require 'rack/oauth2'
|
4
|
+
|
5
|
+
module SocialStream
|
6
|
+
module Oauth2Server
|
7
|
+
module Controllers
|
8
|
+
autoload :Helpers, 'social_stream/oauth2_server/controllers/helpers'
|
9
|
+
end
|
10
|
+
|
11
|
+
module Models
|
12
|
+
autoload :Actor, 'social_stream/oauth2_server/models/actor'
|
13
|
+
autoload :User, 'social_stream/oauth2_server/models/user'
|
14
|
+
end
|
15
|
+
|
16
|
+
autoload :Ability, 'social_stream/oauth2_server/ability'
|
17
|
+
autoload :TokenEndpoint, 'social_stream/oauth2_server/token_endpoint'
|
18
|
+
end
|
19
|
+
|
20
|
+
# Define default custom relations for Site::Client
|
21
|
+
SocialStream.custom_relations['site/client'] = {}
|
22
|
+
|
23
|
+
# Relations that appear in the Site::Client list
|
24
|
+
SocialStream.list_relations['site/client'] = [ :manager ]
|
25
|
+
|
26
|
+
SocialStream.available_permissions['site/client'] = [
|
27
|
+
[ 'manage', nil ],
|
28
|
+
[ 'manage', 'relation/custom' ],
|
29
|
+
[ 'manage', 'contact' ]
|
30
|
+
]
|
31
|
+
end
|
32
|
+
|
33
|
+
require 'social_stream/oauth2_server/engine'
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module SocialStream
|
2
|
+
module Oauth2Server
|
3
|
+
module Ability
|
4
|
+
def initialize(subject)
|
5
|
+
super
|
6
|
+
|
7
|
+
can :read, Site::Client
|
8
|
+
|
9
|
+
can :create, Site::Client do |c|
|
10
|
+
subject.present? &&
|
11
|
+
c.author_id == subject.actor_id
|
12
|
+
end
|
13
|
+
|
14
|
+
can [:update, :destroy], Site::Client do |c|
|
15
|
+
c.allow? subject, 'manage'
|
16
|
+
end
|
17
|
+
|
18
|
+
can :read, Relation::Manager
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
@@ -5,6 +5,12 @@ module SocialStream
|
|
5
5
|
Oauth2Token::AccessToken.valid.find_by_token(req.access_token) || req.invalid_token!
|
6
6
|
end
|
7
7
|
|
8
|
+
initializer "social_stream-oauth2_server.ability" do
|
9
|
+
SocialStream::Ability.module_eval do
|
10
|
+
include SocialStream::Oauth2Server::Ability
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
8
14
|
initializer "social_stream-oauth2_server.controller.helpers",
|
9
15
|
after: "social_stream-base.controller.helpers" do
|
10
16
|
ActiveSupport.on_load(:action_controller) do
|
@@ -12,7 +12,7 @@ Gem::Specification.new do |s|
|
|
12
12
|
s.files = `git ls-files`.split("\n")
|
13
13
|
|
14
14
|
# Gem dependencies
|
15
|
-
s.add_runtime_dependency('social_stream-base', '~> 2.0
|
15
|
+
s.add_runtime_dependency('social_stream-base', '~> 2.1.0')
|
16
16
|
s.add_runtime_dependency('rack-oauth2', '~> 1.0.0')
|
17
17
|
|
18
18
|
s.add_development_dependency('rspec-rails', '~> 2.8.0')
|
@@ -0,0 +1,112 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Site::ClientsController do
|
4
|
+
include SocialStream::TestHelpers
|
5
|
+
include SocialStream::TestHelpers::Controllers
|
6
|
+
|
7
|
+
render_views
|
8
|
+
|
9
|
+
describe "when Anonymous" do
|
10
|
+
it "should not render new" do
|
11
|
+
get :new
|
12
|
+
|
13
|
+
response.should redirect_to(new_user_session_path)
|
14
|
+
end
|
15
|
+
|
16
|
+
context "faking a new client" do
|
17
|
+
it "should deny creating" do
|
18
|
+
post :create, :client => { :name => "Test" }
|
19
|
+
|
20
|
+
response.should redirect_to(new_user_session_path)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context "an existing client" do
|
25
|
+
before do
|
26
|
+
@current_model = Factory(:"site/client")
|
27
|
+
end
|
28
|
+
|
29
|
+
it_should_behave_like "Deny Updating"
|
30
|
+
it_should_behave_like "Deny Destroying"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe "when authenticated" do
|
35
|
+
before do
|
36
|
+
@user = Factory(:user)
|
37
|
+
|
38
|
+
sign_in @user
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should render client" do
|
42
|
+
@client = Factory(:"site/client", author: @user.actor )
|
43
|
+
get :show, :id => @client.to_param
|
44
|
+
|
45
|
+
response.should be_success
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should render other group" do
|
49
|
+
get :show, :id => Factory(:"site/client").to_param
|
50
|
+
|
51
|
+
response.should be_success
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should render new" do
|
55
|
+
get :new
|
56
|
+
|
57
|
+
response.should be_success
|
58
|
+
end
|
59
|
+
|
60
|
+
context "a new own client" do
|
61
|
+
it "should allow creating" do
|
62
|
+
count = Site::Client.count
|
63
|
+
post :create, site_client: { name: "Test",
|
64
|
+
url: "http://test.com/",
|
65
|
+
callback_url: "http://test.com/callback"
|
66
|
+
}
|
67
|
+
|
68
|
+
client = assigns(:client)
|
69
|
+
|
70
|
+
client.should be_valid
|
71
|
+
Site::Client.count.should eq(count + 1)
|
72
|
+
client.receivers.should include(@user.actor)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
context "a new fake client" do
|
77
|
+
before do
|
78
|
+
user = Factory(:user)
|
79
|
+
|
80
|
+
model_attributes[:author_id] = user.actor_id
|
81
|
+
model_attributes[:user_author_id] = user.actor_id
|
82
|
+
end
|
83
|
+
|
84
|
+
it_should_behave_like "Deny Creating"
|
85
|
+
end
|
86
|
+
|
87
|
+
context "a external client" do
|
88
|
+
before do
|
89
|
+
@current_model = Factory(:"site/client")
|
90
|
+
end
|
91
|
+
|
92
|
+
it_should_behave_like "Deny Updating"
|
93
|
+
it_should_behave_like "Deny Destroying"
|
94
|
+
end
|
95
|
+
|
96
|
+
context "a existing own client" do
|
97
|
+
before do
|
98
|
+
@current_model = Factory(:"site/client", author: @user.actor)
|
99
|
+
end
|
100
|
+
|
101
|
+
it "should update client" do
|
102
|
+
put :update, :id => @current_model.to_param,
|
103
|
+
"client" => { name: "Update name" }
|
104
|
+
|
105
|
+
response.should redirect_to(@current_model)
|
106
|
+
end
|
107
|
+
|
108
|
+
it_should_behave_like "Allow Destroying"
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
@@ -1,6 +1,6 @@
|
|
1
|
-
Factory.define(:
|
1
|
+
Factory.define(:"site/client", :class => Site::Client) do |c|
|
2
2
|
c.sequence(:name) { |n| "Site client #{ n }" }
|
3
3
|
c.url { 'https://test.com' }
|
4
4
|
c.callback_url { 'https://test.com/callback' }
|
5
|
-
c.
|
5
|
+
c.author { Factory(:user).actor }
|
6
6
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Site::Client do
|
4
|
+
before do
|
5
|
+
@user = Factory(:user)
|
6
|
+
|
7
|
+
@client = Site::Client.create name: "Test",
|
8
|
+
url: "http://test.com",
|
9
|
+
callback_url: "http://test.com/callback",
|
10
|
+
author: @user
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should allow update to author" do
|
14
|
+
Ability.new(@user).should be_able_to(:update, @client)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should not allow update to other" do
|
18
|
+
Ability.new(Factory(:user)).should_not be_able_to(:update, @client)
|
19
|
+
end
|
20
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: social_stream-oauth2_server
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Antonio Tapiador
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-07-04 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: social_stream-base
|
@@ -17,14 +17,14 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - ~>
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: 2.0
|
20
|
+
version: 2.1.0
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
25
|
- - ~>
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version: 2.0
|
27
|
+
version: 2.1.0
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: rack-oauth2
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
@@ -84,7 +84,7 @@ files:
|
|
84
84
|
- app/assets/stylesheets/social_stream/oauth2_server/create/responsive/_responsive-1200px-min.css.sass
|
85
85
|
- app/assets/stylesheets/social_stream/oauth2_server/create/responsive/_responsive-767px-max.css.sass
|
86
86
|
- app/assets/stylesheets/social_stream/oauth2_server/create/responsive/_responsive-768px-979px.css.sass
|
87
|
-
- app/assets/stylesheets/social_stream/oauth2_server/mixins/
|
87
|
+
- app/assets/stylesheets/social_stream/oauth2_server/mixins/_mixin.css.sass
|
88
88
|
- app/assets/stylesheets/social_stream/oauth2_server/show/_show-oauth2server.css.sass
|
89
89
|
- app/assets/stylesheets/social_stream/oauth2_server/show/layout/_show-oauth2server.css.sass
|
90
90
|
- app/assets/stylesheets/social_stream/oauth2_server/show/responsive/_responsive-1200px-min.css.sass
|
@@ -100,16 +100,18 @@ files:
|
|
100
100
|
- app/models/oauth2_token/access_token.rb
|
101
101
|
- app/models/oauth2_token/authorization_code.rb
|
102
102
|
- app/models/oauth2_token/refresh_token.rb
|
103
|
-
- app/models/relation/admin.rb
|
104
103
|
- app/models/relation/auth.rb
|
104
|
+
- app/models/relation/manager.rb
|
105
105
|
- app/models/site/client.rb
|
106
106
|
- app/overrides/frontpage/_presentation/client_site_presentation.html.erb.deface
|
107
107
|
- app/overrides/layouts/_header_dropdown_menu/applications_entry.html.erb.deface
|
108
108
|
- app/views/authorizations/error.html.erb
|
109
109
|
- app/views/authorizations/new.html.erb
|
110
|
+
- app/views/site/clients/_avatar.html.erb
|
111
|
+
- app/views/site/clients/_edit.html.erb
|
112
|
+
- app/views/site/clients/_edit_step_2.html.erb
|
113
|
+
- app/views/site/clients/_edit_step_3.html.erb
|
110
114
|
- app/views/site/clients/_form.html.erb
|
111
|
-
- app/views/site/clients/_form_step1.html.erb
|
112
|
-
- app/views/site/clients/_form_step2.html.erb
|
113
115
|
- app/views/site/clients/_list.html.erb
|
114
116
|
- app/views/site/clients/_new.modal.html.erb
|
115
117
|
- app/views/site/clients/_presentation.html.erb
|
@@ -122,10 +124,12 @@ files:
|
|
122
124
|
- config/locales/zh.yml
|
123
125
|
- config/routes.rb
|
124
126
|
- db/migrate/20130115102300_create_social_stream_oauth2_server.rb
|
127
|
+
- db/migrate/20130619134332_site_client_admin_to_manager.rb
|
125
128
|
- lib/generators/social_stream/oauth2_server/install_generator.rb
|
126
129
|
- lib/social_stream-oauth2_server.rb
|
127
130
|
- lib/social_stream/migrations/oauth2_server.rb
|
128
131
|
- lib/social_stream/oauth2_server.rb
|
132
|
+
- lib/social_stream/oauth2_server/ability.rb
|
129
133
|
- lib/social_stream/oauth2_server/controllers/helpers.rb
|
130
134
|
- lib/social_stream/oauth2_server/engine.rb
|
131
135
|
- lib/social_stream/oauth2_server/models/actor.rb
|
@@ -136,8 +140,10 @@ files:
|
|
136
140
|
- social_stream-oauth2_server.gemspec
|
137
141
|
- spec/controllers/authorizations_controller_spec.rb
|
138
142
|
- spec/controllers/dummy_controller_spec.rb
|
143
|
+
- spec/controllers/site_clients_controller_authorization_spec.rb
|
139
144
|
- spec/factories/site_client.rb
|
140
145
|
- spec/models/relation/auth_spec.rb
|
146
|
+
- spec/models/site/client_authorization_spec.rb
|
141
147
|
- spec/models/site/client_spec.rb
|
142
148
|
homepage: http://github.com/ging/social_stream-oauth2_server
|
143
149
|
licenses: []
|
@@ -1,20 +0,0 @@
|
|
1
|
-
<img src="/assets/step_2.png">
|
2
|
-
<article class="permissions">
|
3
|
-
<h4>
|
4
|
-
<%= raw t('permission.of_relation.choose', :name => h(@relation.name)) %>
|
5
|
-
</h4>
|
6
|
-
|
7
|
-
<%= form_for @relation, url: polymorphic_path(@relation, section: 'permissions'), remote: true do |f| %>
|
8
|
-
<%= hidden_field_tag 'relation_custom[permission_ids][]', "" %>
|
9
|
-
|
10
|
-
<ul>
|
11
|
-
<% default_permissions.each do |p| %>
|
12
|
-
<li>
|
13
|
-
<%= check_box_tag 'relation_custom[permission_ids][]', p.id, @relation.permission_ids.include?(p.id), id: "checkbox_relation_#{ @relation.id }_permission_#{ p.id }" %>
|
14
|
-
<%= label_tag "checkbox_relation_#{ @relation.id }_permission_#{ p.id }", p.description(:brief, subject: current_subject), title: p.description(:detailed, subject: current_subject, state: (@relation.permission_ids.include?(p.id) ? 'positive' : 'negative'), relation: @relation.name) %>
|
15
|
-
</li>
|
16
|
-
<% end %>
|
17
|
-
</ul>
|
18
|
-
<% end %>
|
19
|
-
<%= f.submit :next %>
|
20
|
-
</article>
|