openskip-skip_embedded 0.9.2 → 0.9.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (22) hide show
  1. data/ChangeLog +4 -0
  2. data/Rakefile +4 -2
  3. data/bin/skip-gen +2 -2
  4. data/generators/skip_embedded/skip_embedded_generator.rb +2 -3
  5. data/generators/skip_embedded_stylesheets/skip_embedded_stylesheets_generator.rb +21 -0
  6. data/generators/skip_embedded_stylesheets/templates/public/stylesheets/sass/skip_base.sass +86 -0
  7. data/generators/skip_embedded_stylesheets/templates/public/stylesheets/sass/skip_embedded.sass +65 -0
  8. data/generators/skip_embedded_stylesheets/templates/public/stylesheets/sass/skip_footer.sass +19 -0
  9. data/generators/skip_embedded_stylesheets/templates/public/stylesheets/sass/skip_header.sass +47 -0
  10. data/generators/skip_embedded_stylesheets/templates/public/stylesheets/skip_base.css +55 -0
  11. data/generators/skip_embedded_stylesheets/templates/public/stylesheets/skip_embedded.css +156 -0
  12. data/generators/skip_embedded_stylesheets/templates/public/stylesheets/skip_footer.css +19 -0
  13. data/generators/skip_embedded_stylesheets/templates/public/stylesheets/skip_header.css +45 -0
  14. data/generators/{skip_embedded → skip_embedded_stylesheets}/templates/public/stylesheets/sprites/sprites.css +0 -0
  15. data/generators/{skip_embedded → skip_embedded_stylesheets}/templates/public/stylesheets/sprites/sprites.png +0 -0
  16. data/lib/skip_embedded/rp_service/client.rb +117 -0
  17. data/lib/skip_embedded/rp_service/http_connection.rb +85 -0
  18. data/lib/skip_embedded/rp_service/oauth_proxy.rb +45 -0
  19. data/lib/skip_embedded/rp_service/util.rb +17 -0
  20. data/lib/skip_embedded.rb +1 -1
  21. metadata +45 -7
  22. data/generators/skip_embedded/templates/public/stylesheets/skip_embedded.css +0 -159
data/ChangeLog CHANGED
@@ -1,3 +1,7 @@
1
+ == 0.9.3 / 2009-05-22
2
+ * [new] 'skip_embedded_stylesheets' generator. extracted from main generator.
3
+ * [new] client library for SKIP RP services(wiki, etc..).
4
+
1
5
  == 0.9.0 / 2009-04-02
2
6
  * 0.9 release, used by SKIP Wiki-0.9
3
7
  * fixup generator and Tutorial
data/Rakefile CHANGED
@@ -26,7 +26,7 @@ Rake::RDocTask.new(:rdoc) do |rdoc|
26
26
  end
27
27
 
28
28
  NAME = ENV["GEMNAME"] || "skip_embedded"
29
- AUTHOR = "MOROHASHI Kyosuke"
29
+ AUTHORS = ["MAEDA Naoki", "MOROHASHI Kyosuke"]
30
30
  EMAIL = "k-morohashi@esm.co.jp"
31
31
  DESCRIPTION = "Utilities to collabolate SKIP, opensource buisiness SNS."
32
32
  HOMEPATH = "http://github.com/openskip/skip_embedded/tree/master"
@@ -52,7 +52,7 @@ spec = Gem::Specification.new do |s|
52
52
  s.rdoc_options += RDOC_OPTS + ['--exclude', '^(examples|extras)/']
53
53
  s.summary = DESCRIPTION
54
54
  s.description = DESCRIPTION
55
- s.author = AUTHOR
55
+ s.authors = AUTHORS
56
56
  s.email = EMAIL
57
57
  s.homepage = HOMEPATH
58
58
  s.executables = BIN_FILES
@@ -61,6 +61,8 @@ spec = Gem::Specification.new do |s|
61
61
  s.test_files = Dir["spec/**/*_spec.rb"]
62
62
 
63
63
  s.add_dependency "moro-repim", ">=0.1.4"
64
+ s.add_dependency "json"
65
+ s.add_dependency "oauth"
64
66
 
65
67
  s.files = %w(README.rdoc ChangeLog Rakefile) +
66
68
  Dir.glob("{bin,doc,test,lib,templates,generators,extras,website,script}/**/*") +
data/bin/skip-gen CHANGED
@@ -6,8 +6,8 @@ require 'rubygems'
6
6
  def check_dependency
7
7
  missing = [
8
8
  ['rails', '2.1.2'],
9
- ['rspec', '1.2.2'],
10
- ['rspec-rails', '1.2.2'],
9
+ ['rspec', '1.2.6'],
10
+ ['rspec-rails', '1.2.6'],
11
11
  ['moro-repim', '>=0.1.5'],
12
12
  ['moro-open_id_authentication', '>=1.0.0'],
13
13
  ].inject([]) do |miss, (name, version)|
@@ -11,14 +11,13 @@ class SkipEmbeddedGenerator < Rails::Generator::Base
11
11
  public/javascripts/dropdown_navigation.js
12
12
  public/javascripts/labeled_text_field.js
13
13
  public/javascripts/skip_fckeditor_config.js
14
- public/stylesheets/skip_embedded.css
15
- public/stylesheets/sprites/sprites.css
16
- public/stylesheets/sprites/sprites.png
17
14
  ]
18
15
 
19
16
  assets.map{|asset| File.dirname(asset) }.uniq.each{|asset| m.directory(asset) }
20
17
  assets.each{|asset| m.file asset, asset }
21
18
 
19
+ m.dependency('skip_embedded_stylesheets', [])
20
+
22
21
  insert_application_helper(m)
23
22
  insert_application_controller(m)
24
23
  insert_sessions_controller(m)
@@ -0,0 +1,21 @@
1
+ class SkipEmbeddedStylesheetsGenerator < Rails::Generator::Base
2
+ def manifest
3
+ record do |m|
4
+ assets = %w[
5
+ public/stylesheets/skip_base.css
6
+ public/stylesheets/skip_embedded.css
7
+ public/stylesheets/skip_footer.css
8
+ public/stylesheets/skip_header.css
9
+ public/stylesheets/sass/skip_base.sass
10
+ public/stylesheets/sass/skip_embedded.sass
11
+ public/stylesheets/sass/skip_footer.sass
12
+ public/stylesheets/sass/skip_header.sass
13
+ public/stylesheets/sprites/sprites.css
14
+ public/stylesheets/sprites/sprites.png
15
+ ]
16
+
17
+ assets.map{|asset| File.dirname(asset) }.uniq.each{|asset| m.directory(asset) }
18
+ assets.each{|asset| m.file asset, asset }
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,86 @@
1
+ // グローバル変数定義
2
+ // ------------------------------------------------------------
3
+ !base_color ||= #555
4
+ !base_background_color ||= #fff
5
+ !base_font_size ||= 12px
6
+ !small_font_size ||= 10px
7
+ !base_border ||= 1px solid #ccc
8
+ !base_dashed_border ||= 1px dashed #ccc
9
+ !base_dotted_border ||= 1px dotted #ccc
10
+
11
+ // Mix-in
12
+ // ------------------------------------------------------------
13
+ =base_text
14
+ :font
15
+ :size = !base_font_size
16
+ :family Verdana, Arial, sans-serif
17
+ :weight normal
18
+ :color = !base_color
19
+ =form_text
20
+ :font
21
+ :size = !base_font_size
22
+ :family Verdana, Arial, sans-serif
23
+ :color = #000
24
+ =link_text
25
+ :text-decoration none
26
+ :color #0080dd
27
+ =link_hover_text
28
+ :color blue
29
+ :text-decoration underline
30
+ =clearfix
31
+ display: inline-block
32
+ &:after
33
+ content: "."
34
+ display: block
35
+ height: 0
36
+ clear: both
37
+ visibility: hidden
38
+ * html &
39
+ height: 1px
40
+
41
+ // 基本スタイル
42
+ // ------------------------------------------------------------
43
+ *
44
+ :margin 0
45
+ :padding 0
46
+
47
+ body
48
+ +base_text
49
+ :position absolute
50
+ :left 0
51
+ :margin 0
52
+ :text-align left
53
+ :background-color = !base_background_color
54
+ :width 100%
55
+
56
+ img
57
+ :vertical-align middle
58
+ :border 0
59
+
60
+ a
61
+ +link_text
62
+ &:hover
63
+ +link_hover_text
64
+
65
+ form
66
+ :padding 0px
67
+ :margin 0px
68
+ input
69
+ +form_text
70
+ :margin 0px
71
+ :padding 2px
72
+ select
73
+ +form_text
74
+ :margin 0 2px 0 0
75
+ :padding 0
76
+ :letter-spacing 2px
77
+ :z-index 0
78
+ textarea
79
+ +form_text
80
+ :margin 0px
81
+ :padding 2px
82
+
83
+ table
84
+ :font-size = !base_font_size
85
+ :table-layout fixed
86
+ :border-collapse collapse
@@ -0,0 +1,65 @@
1
+ // ============================================================
2
+ // 1. 共通
3
+ // ============================================================
4
+ // 基本部分
5
+ // ------------------------------------------------------------
6
+ @import skip_base.sass
7
+ // ヘッダ
8
+ // ------------------------------------------------------------
9
+ @import skip_header.sass
10
+ // フッタ
11
+ // ------------------------------------------------------------
12
+ @import skip_footer.sass
13
+
14
+ #flash_message
15
+ :position absolute
16
+ :top 3px
17
+ :left 15%
18
+ :right 15%
19
+ :width 70%
20
+ :z-index 2
21
+ div
22
+ :width 100%
23
+ :margin 0
24
+ :text-align center
25
+ :font-size 12px
26
+ :border-width 2px
27
+ :border-style solid
28
+ h3
29
+ :margin 10px
30
+ :width 100%
31
+
32
+ span
33
+ :position static
34
+ :font-size 10px
35
+ :margin-left 20px
36
+ :right 15px
37
+ :top 15px
38
+ &.warn
39
+ :border-color orange
40
+ :background-color yellow
41
+ &.notice
42
+ :border-color limegreen
43
+ :background-color palegreen
44
+ &.error
45
+ :border-color red
46
+ :background-color pink
47
+
48
+ input
49
+ &.input_submit
50
+ :padding 0
51
+ :font-size 11px
52
+ &.input_text
53
+ :padding 0
54
+
55
+ .labeled-field
56
+ :border 1px solid silver
57
+ :color rgb(153, 153, 153)
58
+ :font-size 13px
59
+
60
+ &.focus
61
+ :color #000000
62
+
63
+ iframe#ie-select-fix
64
+ :border 0
65
+ :position absolute
@@ -0,0 +1,19 @@
1
+ div#footer
2
+ :color #A9A9A9
3
+ :overflow hidden
4
+ :text-align center
5
+ :position relative
6
+ :height 50px
7
+ .info
8
+ :width 800px
9
+ :margin auto
10
+ :padding 5px 200px 0 0
11
+ .first
12
+ :border-bottom 1px dashed #ccc
13
+ :padding-bottom 4px
14
+ .second
15
+ :padding-top 5px
16
+ .powered_by
17
+ :position absolute
18
+ :top 0px
19
+ :right 0px
@@ -0,0 +1,47 @@
1
+ div#header
2
+ :position relative
3
+ :height 70px
4
+ // IEでpositionがstatic以外の場合にz-indexが正しく適用されないバグ対応
5
+ :z-index 1
6
+ div#global_top
7
+ :border-bottom 1px dashed #ccc
8
+ :height 20px
9
+ :margin 4px 5px
10
+ div#application_link
11
+ :float left
12
+ :position relative
13
+ div#other_links
14
+ :border 1px solid #ccc
15
+ :position absolute
16
+ :left 64px
17
+ :top 16px
18
+ :width 160px
19
+ :z-index 1001
20
+ :background-color #fff
21
+ a
22
+ :display block
23
+ &:hover
24
+ :color #fff
25
+ :background-color #0080dd
26
+ div#menu
27
+ :position absolute
28
+ :top 0
29
+ :right 0
30
+ :border none
31
+ :font-size 12px
32
+ :text-align right
33
+ div#logo
34
+ :float left
35
+ :vertical-align top
36
+ :margin 1px 0 0 10px
37
+ img
38
+ :height 45px
39
+ div.banner
40
+ :height 40px
41
+ :width 450px
42
+ :margin 5px 0 0 160px
43
+ div#search
44
+ :position absolute
45
+ :bottom 10px
46
+ :right 0px
47
+
@@ -0,0 +1,55 @@
1
+ * {
2
+ margin: 0;
3
+ padding: 0; }
4
+
5
+ body {
6
+ font-size: 12px;
7
+ font-family: Verdana, Arial, sans-serif;
8
+ font-weight: normal;
9
+ color: #555555;
10
+ position: absolute;
11
+ left: 0;
12
+ margin: 0;
13
+ text-align: left;
14
+ background-color: #ffffff;
15
+ width: 100%; }
16
+
17
+ img {
18
+ vertical-align: middle;
19
+ border: 0; }
20
+
21
+ a {
22
+ text-decoration: none;
23
+ color: #0080dd; }
24
+ a:hover {
25
+ color: blue;
26
+ text-decoration: underline; }
27
+
28
+ form {
29
+ padding: 0px;
30
+ margin: 0px; }
31
+ form input {
32
+ font-size: 12px;
33
+ font-family: Verdana, Arial, sans-serif;
34
+ color: #000000;
35
+ margin: 0px;
36
+ padding: 2px; }
37
+ form select {
38
+ font-size: 12px;
39
+ font-family: Verdana, Arial, sans-serif;
40
+ color: #000000;
41
+ margin: 0 2px 0 0;
42
+ padding: 0;
43
+ letter-spacing: 2px;
44
+ z-index: 0; }
45
+ form textarea {
46
+ font-size: 12px;
47
+ font-family: Verdana, Arial, sans-serif;
48
+ color: #000000;
49
+ margin: 0px;
50
+ padding: 2px; }
51
+
52
+ table {
53
+ font-size: 12px;
54
+ table-layout: fixed;
55
+ border-collapse: collapse; }
@@ -0,0 +1,156 @@
1
+ * {
2
+ margin: 0;
3
+ padding: 0; }
4
+
5
+ body {
6
+ font-size: 12px;
7
+ font-family: Verdana, Arial, sans-serif;
8
+ font-weight: normal;
9
+ color: #555555;
10
+ position: absolute;
11
+ left: 0;
12
+ margin: 0;
13
+ text-align: left;
14
+ background-color: #ffffff;
15
+ width: 100%; }
16
+
17
+ img {
18
+ vertical-align: middle;
19
+ border: 0; }
20
+
21
+ a {
22
+ text-decoration: none;
23
+ color: #0080dd; }
24
+ a:hover {
25
+ color: blue;
26
+ text-decoration: underline; }
27
+
28
+ form {
29
+ padding: 0px;
30
+ margin: 0px; }
31
+ form input {
32
+ font-size: 12px;
33
+ font-family: Verdana, Arial, sans-serif;
34
+ color: #000000;
35
+ margin: 0px;
36
+ padding: 2px; }
37
+ form select {
38
+ font-size: 12px;
39
+ font-family: Verdana, Arial, sans-serif;
40
+ color: #000000;
41
+ margin: 0 2px 0 0;
42
+ padding: 0;
43
+ letter-spacing: 2px;
44
+ z-index: 0; }
45
+ form textarea {
46
+ font-size: 12px;
47
+ font-family: Verdana, Arial, sans-serif;
48
+ color: #000000;
49
+ margin: 0px;
50
+ padding: 2px; }
51
+
52
+ table {
53
+ font-size: 12px;
54
+ table-layout: fixed;
55
+ border-collapse: collapse; }
56
+
57
+ div#header {
58
+ position: relative;
59
+ height: 70px; }
60
+ div#header div#global_top {
61
+ border-bottom: 1px dashed #ccc;
62
+ height: 20px;
63
+ margin: 4px 5px; }
64
+ div#header div#global_top div#application_link {
65
+ float: left; }
66
+ div#header div#global_top div#menu {
67
+ position: absolute;
68
+ top: 0;
69
+ right: 0;
70
+ border: none;
71
+ font-size: 12px;
72
+ text-align: right; }
73
+ div#header div#logo {
74
+ float: left;
75
+ vertical-align: top;
76
+ margin: 1px 0 0 10px; }
77
+ div#header div#logo img {
78
+ height: 45px; }
79
+ div#header div.banner {
80
+ height: 45px;
81
+ width: 450px;
82
+ margin: 1px 0 0 160px; }
83
+ div#header div#search {
84
+ position: absolute;
85
+ bottom: 0px;
86
+ right: 0px; }
87
+
88
+ div#footer {
89
+ color: #A9A9A9;
90
+ overflow: hidden;
91
+ text-align: center;
92
+ position: relative;
93
+ height: 50px; }
94
+ div#footer .info {
95
+ width: 800px;
96
+ margin: auto;
97
+ padding: 5px 200px 0 0; }
98
+ div#footer .info .first {
99
+ border-bottom: 1px dashed #ccc;
100
+ padding-bottom: 4px; }
101
+ div#footer .info .second {
102
+ padding-top: 5px; }
103
+ div#footer .powered_by {
104
+ position: absolute;
105
+ top: 0px;
106
+ right: 0px; }
107
+
108
+ #flash_message {
109
+ position: absolute;
110
+ top: 3px;
111
+ left: 15%;
112
+ right: 15%;
113
+ width: 70%;
114
+ z-index: 2; }
115
+ #flash_message div {
116
+ width: 100%;
117
+ margin: 0;
118
+ text-align: center;
119
+ font-size: 12px;
120
+ border-width: 2px;
121
+ border-style: solid; }
122
+ #flash_message div h3 {
123
+ margin: 10px;
124
+ width: 100%; }
125
+ #flash_message div h3 span {
126
+ position: static;
127
+ font-size: 10px;
128
+ margin-left: 20px;
129
+ right: 15px;
130
+ top: 15px; }
131
+ #flash_message div.warn {
132
+ border-color: orange;
133
+ background-color: yellow; }
134
+ #flash_message div.notice {
135
+ border-color: limegreen;
136
+ background-color: palegreen; }
137
+ #flash_message div.error {
138
+ border-color: red;
139
+ background-color: pink; }
140
+
141
+ input.input_submit {
142
+ padding: 0;
143
+ font-size: 11px; }
144
+ input.input_text {
145
+ padding: 0; }
146
+
147
+ .labeled-field {
148
+ border: 1px solid silver;
149
+ color: rgb(153, 153, 153);
150
+ font-size: 13px; }
151
+ .labeled-field.focus {
152
+ color: #000000; }
153
+
154
+ iframe#ie-select-fix {
155
+ border: 0;
156
+ position: absolute; }
@@ -0,0 +1,19 @@
1
+ div#footer {
2
+ color: #A9A9A9;
3
+ overflow: hidden;
4
+ text-align: center;
5
+ position: relative;
6
+ height: 50px; }
7
+ div#footer .info {
8
+ width: 800px;
9
+ margin: auto;
10
+ padding: 5px 200px 0 0; }
11
+ div#footer .info .first {
12
+ border-bottom: 1px dashed #ccc;
13
+ padding-bottom: 4px; }
14
+ div#footer .info .second {
15
+ padding-top: 5px; }
16
+ div#footer .powered_by {
17
+ position: absolute;
18
+ top: 0px;
19
+ right: 0px; }
@@ -0,0 +1,45 @@
1
+ div#header {
2
+ position: relative;
3
+ height: 70px;
4
+ z-index: 1; }
5
+ div#header div#global_top {
6
+ border-bottom: 1px dashed #ccc;
7
+ height: 20px;
8
+ margin: 4px 5px; }
9
+ div#header div#global_top div#application_link {
10
+ float: left;
11
+ position: relative; }
12
+ div#header div#global_top div#other_links {
13
+ border: 1px solid #ccc;
14
+ position: absolute;
15
+ left: 64px;
16
+ top: 16px;
17
+ width: 160px;
18
+ z-index: 1001;
19
+ background-color: #fff; }
20
+ div#header div#global_top div#other_links a {
21
+ display: block; }
22
+ div#header div#global_top div#other_links a:hover {
23
+ color: #fff;
24
+ background-color: #0080dd; }
25
+ div#header div#global_top div#menu {
26
+ position: absolute;
27
+ top: 0;
28
+ right: 0;
29
+ border: none;
30
+ font-size: 12px;
31
+ text-align: right; }
32
+ div#header div#logo {
33
+ float: left;
34
+ vertical-align: top;
35
+ margin: 1px 0 0 10px; }
36
+ div#header div#logo img {
37
+ height: 45px; }
38
+ div#header div.banner {
39
+ height: 40px;
40
+ width: 450px;
41
+ margin: 5px 0 0 160px; }
42
+ div#header div#search {
43
+ position: absolute;
44
+ bottom: 10px;
45
+ right: 0px; }
@@ -0,0 +1,117 @@
1
+ require 'json'
2
+ require 'skip_embedded/rp_service/oauth_proxy'
3
+ require 'skip_embedded/rp_service/http_connection'
4
+ require 'skip_embedded/rp_service/util'
5
+
6
+ module SkipEmbedded
7
+ module RpService
8
+ class Client
9
+ attr_accessor :connection
10
+ attr_accessor :backend
11
+
12
+ @@connection_class = SkipEmbedded::RpService::HttpConnection
13
+
14
+ def self.connection_class=(klass)
15
+ @@connection_class = klass
16
+ end
17
+ def self.connection_class
18
+ @@connection_class
19
+ end
20
+
21
+ class Mapper
22
+ def initialize(site)
23
+ @site = site.is_a?(URI) ? site : URI(site)
24
+ end
25
+
26
+ def register_endpoint
27
+ @site + "skip"
28
+ end
29
+
30
+ def users_endpoint
31
+ @site + "skip/user"
32
+ end
33
+
34
+ def users_sync_endpoint
35
+ @site + "skip/user/sync"
36
+ end
37
+
38
+ def groups_endpoint
39
+ @site + "skip/groups"
40
+ end
41
+
42
+ def groups_sync_endpoint
43
+ @site + "skip/groups/sync"
44
+ end
45
+ end
46
+
47
+ attr_reader :name, :url, :mapper, :key, :secret
48
+ def self.register!(name, service, params, conn = nil)
49
+ mapper = Mapper.new(service)
50
+ conn ||= connection_class.new
51
+ response = conn.post_via_webservice_util(mapper.register_endpoint.to_s, "skip"=>params)["skip"]
52
+
53
+ returning(new(name, service, response)){|c| c.connection = conn }
54
+ end
55
+
56
+ def initialize(name, url, params)
57
+ params = params.with_indifferent_access
58
+ @key = params[:consumer_key] || params[:key]
59
+ @secret = params[:consumer_secret] || params[:secret]
60
+ raise ArgumentError.new("key and secret required in #{params.inspect}") unless @key && @secret
61
+
62
+ @name = name
63
+ @url = url
64
+ @mapper = Mapper.new(url)
65
+ end
66
+
67
+ def groups_url
68
+ @mapper.groups_endpoint.to_s
69
+ end
70
+
71
+ def group_url(gid)
72
+ "#{@mapper.groups_endpoint}/#{gid}"
73
+ end
74
+
75
+ def user_url
76
+ @mapper.users_endpoint.to_s
77
+ end
78
+
79
+ def user_sync_url
80
+ @mapper.users_sync_endpoint.to_s
81
+ end
82
+
83
+ def group_sync_url
84
+ @mapper.groups_sync_endpoint.to_s
85
+ end
86
+
87
+ def oauth(token, secret)
88
+ OauthProxy.new(self, token, secret)
89
+ end
90
+
91
+ def add_user(*values)
92
+ data = Util.user_data(*values)
93
+
94
+ response = connection.post_via_webservice_util(user_url, "user" => data)["user"]
95
+ backend.add_access_token(values.first, response["access_token"], response["access_secret"])
96
+ end
97
+
98
+ def sync_users(users)
99
+ data = users.map{|values| Util.user_data(*values) }
100
+
101
+ response = connection.post_via_webservice_util(user_sync_url, "users"=> data)["users"]
102
+ response.each do |created|
103
+ backend.add_access_token(created["identity_url"], created["access_token"], created["access_secret"])
104
+ end
105
+ end
106
+
107
+ def sync_groups(groups)
108
+ data = groups.map{|args| Util.group_data(*args) }
109
+
110
+ response = connection.post_via_webservice_util(group_sync_url, "groups" => data)
111
+ response["groups"].each do |created|
112
+ backend.update_group(created["gid"], created)
113
+ end
114
+ end
115
+ end
116
+ end
117
+ end
@@ -0,0 +1,85 @@
1
+ require 'skip_embedded/initial_settings'
2
+ require 'skip_embedded/web_service_util'
3
+ require 'json'
4
+ require 'net/http'
5
+ require 'net/https'
6
+
7
+ module SkipEmbedded
8
+ module RpService
9
+ class HttpConnection
10
+ class Error < RuntimeError
11
+ attr_reader :response
12
+ def initialize(message, response)
13
+ super(message)
14
+ @response = response
15
+ end
16
+ end
17
+
18
+ def initialize(ca_file = nil)
19
+ @ca_file = ca_file
20
+ end
21
+
22
+ def post_via_webservice_util(url, data, parse_json = true)
23
+ url = url.is_a?(URI) ? url : URI(url)
24
+ req = Net::HTTP::Post.new(url.path)
25
+ req["X-SECRET-KEY"] = ::SkipEmbedded::InitialSettings['skip_collaboration']['secret_key']
26
+ req["Content-Type"] = "application/json"
27
+ req.body = data.to_json
28
+ request_http(url, req, parse_json)
29
+ end
30
+
31
+ def get_resource_via_oauth(url, token, headers = {})
32
+ request_api_via_oauth(:get, url, nil, token, headers, false)
33
+ end
34
+ def post_via_oauth(url, data, token)
35
+ request_api_via_oauth(:post, url, data, token)
36
+ end
37
+ def put_via_oauth(url, data, token)
38
+ request_api_via_oauth(:put, url, data, token)
39
+ end
40
+ def delete_via_oauth(url, token)
41
+ request_api_via_oauth(:delete, url, nil, token)
42
+ end
43
+
44
+ private
45
+ def request_api_via_oauth(method, url, data, token, headers = {}, parse_json=true)
46
+ url = url.is_a?(URI) ? url : URI(url)
47
+ req = (case method
48
+ when :post then Net::HTTP::Post
49
+ when :put then Net::HTTP::Put
50
+ when :delete then Net::HTTP::Delete
51
+ else Net::HTTP::Get
52
+ end).new(url.path)
53
+ req["Content-Type"] = "application/json"
54
+ headers.each{|k,v| req[k] = v }
55
+
56
+ req.body = data.to_json if data && !req.is_a?(Net::HTTP::Get)
57
+ token.sign!(req)
58
+
59
+ request_http(url, req, parse_json)
60
+ end
61
+
62
+ def request_http(url, req, parse_json)
63
+ setup_https(url).start do |conn|
64
+ res = conn.request(req)
65
+ raise Error.new("request failed", res) if !res.is_a?(Net::HTTPOK)
66
+ parse_json ? JSON.parse(res.body) : res.body
67
+ end
68
+ end
69
+
70
+ def setup_https(uri)
71
+ returning Net::HTTP.new(uri.host, uri.port) do |http|
72
+ if uri.scheme == "https"
73
+ if @ca_file
74
+ http.ca_file = @ca_file
75
+ http.verify_mode = OpenSSL::SSL::VERIFY_PEER
76
+ http.verify_depth = 5
77
+ else
78
+ http.verify_mode = OpenSSL::SSL::NONE
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,45 @@
1
+ require 'oauth'
2
+ require 'skip_embedded/rp_service/util'
3
+
4
+ module SkipEmbedded
5
+ module RpService
6
+ class OauthProxy
7
+ def initialize(service, token, secret)
8
+ @service = service
9
+ consumer = OAuth::Consumer.new(@service.key, @service.secret, :site => @service.url)
10
+ @access_token = OAuth::AccessToken.new(consumer , token, secret)
11
+ end
12
+
13
+ def get_resource(path, headers = {})
14
+ url = URI.join(@service.url, path)
15
+ @service.connection.get_resource_via_oauth(url, @access_token, headers)
16
+ end
17
+
18
+ def update_user(params)
19
+ res = @service.connection.put_via_oauth(@service.user_url, {"user" => params}, @access_token)["user"]
20
+ @service.backend.update_user(res["identity_url"], res)
21
+ end
22
+
23
+ def destroy_user
24
+ @service.connection.delete_via_oauth(@service.user_url, @access_token)
25
+ end
26
+
27
+ def add_group(*args)
28
+ req = {"group" => Util.group_data(*args)}
29
+ res = @service.connection.post_via_oauth(@service.groups_url, req, @access_token)["group"]
30
+ @service.backend.update_group(res["gid"], res)
31
+ end
32
+
33
+ def update_group(gid, params)
34
+ req = {"group" => params.except(:gid)}
35
+ res = @service.connection.put_via_oauth(@service.group_url(gid), req, @access_token)["group"]
36
+ @service.backend.update_group(res["gid"], res)
37
+ end
38
+
39
+ def destroy_group(gid)
40
+ @service.connection.delete_via_oauth(@service.group_url(gid), @access_token)
41
+ end
42
+ end
43
+ end
44
+ end
45
+
@@ -0,0 +1,17 @@
1
+ module SkipEmbedded
2
+ module RpService
3
+ module Util
4
+ def user_data(identity_url, name, display_name, admin = false)
5
+ {:identity_url => identity_url, :name => name,
6
+ :display_name => display_name, :admin => admin}.reject{|k,v| v.nil? }
7
+ end
8
+
9
+ def group_data(gid, name, display_name, members)
10
+ {:gid => gid, :name => name, :display_name => display_name,
11
+ :members => members}.reject{|k,v| v.nil? }
12
+ end
13
+ module_function :user_data, :group_data
14
+ end
15
+ end
16
+ end
17
+
data/lib/skip_embedded.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # SkipEmbedded
2
2
  module SkipEmbedded
3
- Version = "0.9.2"
3
+ Version = "0.9.3"
4
4
 
5
5
  Dependencies = {:jquery => "jquery-1.3.2.min.js"}
6
6
  end
metadata CHANGED
@@ -1,15 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openskip-skip_embedded
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.2
4
+ version: 0.9.3
5
5
  platform: ruby
6
6
  authors:
7
+ - MAEDA Naoki
7
8
  - MOROHASHI Kyosuke
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
12
 
12
- date: 2009-04-23 00:00:00 -07:00
13
+ date: 2009-05-22 00:00:00 -07:00
13
14
  default_executable: skip-gen
14
15
  dependencies:
15
16
  - !ruby/object:Gem::Dependency
@@ -22,6 +23,26 @@ dependencies:
22
23
  - !ruby/object:Gem::Version
23
24
  version: 0.1.4
24
25
  version:
26
+ - !ruby/object:Gem::Dependency
27
+ name: json
28
+ type: :runtime
29
+ version_requirement:
30
+ version_requirements: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: "0"
35
+ version:
36
+ - !ruby/object:Gem::Dependency
37
+ name: oauth
38
+ type: :runtime
39
+ version_requirement:
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ version: "0"
45
+ version:
25
46
  description: Utilities to collabolate SKIP, opensource buisiness SNS.
26
47
  email: k-morohashi@esm.co.jp
27
48
  executables:
@@ -51,6 +72,11 @@ files:
51
72
  - lib/skip_embedded/open_id_sso
52
73
  - lib/skip_embedded/open_id_sso/authentication.rb
53
74
  - lib/skip_embedded/open_id_sso/session_management.rb
75
+ - lib/skip_embedded/rp_service
76
+ - lib/skip_embedded/rp_service/client.rb
77
+ - lib/skip_embedded/rp_service/http_connection.rb
78
+ - lib/skip_embedded/rp_service/oauth_proxy.rb
79
+ - lib/skip_embedded/rp_service/util.rb
54
80
  - lib/skip_embedded/web_service_util
55
81
  - lib/skip_embedded/web_service_util/client.rb
56
82
  - lib/skip_embedded/web_service_util/server.rb
@@ -77,11 +103,23 @@ files:
77
103
  - generators/skip_embedded/templates/public/javascripts/dropdown_navigation.js
78
104
  - generators/skip_embedded/templates/public/javascripts/labeled_text_field.js
79
105
  - generators/skip_embedded/templates/public/javascripts/skip_fckeditor_config.js
80
- - generators/skip_embedded/templates/public/stylesheets
81
- - generators/skip_embedded/templates/public/stylesheets/skip_embedded.css
82
- - generators/skip_embedded/templates/public/stylesheets/sprites
83
- - generators/skip_embedded/templates/public/stylesheets/sprites/sprites.css
84
- - generators/skip_embedded/templates/public/stylesheets/sprites/sprites.png
106
+ - generators/skip_embedded_stylesheets
107
+ - generators/skip_embedded_stylesheets/skip_embedded_stylesheets_generator.rb
108
+ - generators/skip_embedded_stylesheets/templates
109
+ - generators/skip_embedded_stylesheets/templates/public
110
+ - generators/skip_embedded_stylesheets/templates/public/stylesheets
111
+ - generators/skip_embedded_stylesheets/templates/public/stylesheets/sass
112
+ - generators/skip_embedded_stylesheets/templates/public/stylesheets/sass/skip_base.sass
113
+ - generators/skip_embedded_stylesheets/templates/public/stylesheets/sass/skip_embedded.sass
114
+ - generators/skip_embedded_stylesheets/templates/public/stylesheets/sass/skip_footer.sass
115
+ - generators/skip_embedded_stylesheets/templates/public/stylesheets/sass/skip_header.sass
116
+ - generators/skip_embedded_stylesheets/templates/public/stylesheets/skip_base.css
117
+ - generators/skip_embedded_stylesheets/templates/public/stylesheets/skip_embedded.css
118
+ - generators/skip_embedded_stylesheets/templates/public/stylesheets/skip_footer.css
119
+ - generators/skip_embedded_stylesheets/templates/public/stylesheets/skip_header.css
120
+ - generators/skip_embedded_stylesheets/templates/public/stylesheets/sprites
121
+ - generators/skip_embedded_stylesheets/templates/public/stylesheets/sprites/sprites.css
122
+ - generators/skip_embedded_stylesheets/templates/public/stylesheets/sprites/sprites.png
85
123
  - script/skip-gen.sh
86
124
  - spec/skip_embedded/fulltext_search_cache/builder_base_spec.rb
87
125
  - spec/skip_embedded/fulltext_search_cache/mediator_spec.rb
@@ -1,159 +0,0 @@
1
- #flash_message {
2
- position: absolute;
3
- top: 3px;
4
- left: 15%;
5
- right: 15%;
6
- width: 70%;
7
- z-index: 2; }
8
- #flash_message div {
9
- width: 100%;
10
- margin: 0;
11
- text-align: center;
12
- font-size: 12px;
13
- border-width: 2px;
14
- border-style: solid; }
15
- #flash_message div h3 {
16
- margin: 10px;
17
- width: 100%; }
18
- #flash_message div h3 span {
19
- position: static;
20
- font-size: 10px;
21
- margin-left: 20px;
22
- right: 15px;
23
- top: 15px; }
24
- #flash_message div.warn {
25
- border-color: orange;
26
- background-color: yellow; }
27
- #flash_message div.notice {
28
- border-color: limegreen;
29
- background-color: palegreen; }
30
- #flash_message div.error {
31
- border-color: red;
32
- background-color: pink; }
33
-
34
- div#header {
35
- height: 55px;
36
- }
37
-
38
- div#header div#search {
39
- position: absolute;
40
- top: 25px;
41
- right: 5px;
42
- }
43
-
44
- div#header div#search form {
45
- margin:0;
46
- padding:0;
47
- }
48
-
49
- div#header div#serach input {
50
- font-family:Verdana,Arial,Sans-serif;
51
- font-size:12px;
52
- margin:0;
53
- padding:2px;
54
- }
55
-
56
- input.input_submit{
57
- padding: 0;
58
- font-size:11px;
59
- }
60
-
61
- input.input_text{
62
- padding: 0;
63
- }
64
-
65
- div#header div#menu {
66
- background-color:#D0E0F0;
67
- border:medium none;
68
- font-size:12px;
69
- padding:1px 5px;
70
- position:absolute;
71
- right:0;
72
- text-align:right;
73
- top:0;
74
- }
75
-
76
- div#header div#menu .item {
77
- float:left;
78
- font-weight:bold;
79
- padding:3px 10px 1px;
80
- }
81
-
82
- div#header div#menu .item a {
83
- color:blue;
84
- text-decoration:none;
85
- }
86
-
87
- .labeled-field {
88
- border: 1px solid silver;
89
- color: rgb(153, 153, 153);
90
- font-size: 13px; }
91
-
92
- .labeled-field.focus {
93
- color: #000000; }
94
-
95
- iframe#ie-select-fix {
96
- border : 0;
97
- position : absolute;
98
- }
99
-
100
- body {
101
- font-size: 12px;
102
- font-family: Verdana, Arial, sans-serif;
103
- color: #555555;
104
- position: absolute;
105
- left: 0;
106
- margin: 0;
107
- text-align: left;
108
- background-color: #ffffff;
109
- width: 100%; }
110
-
111
- div#main div#tab_body{
112
- background-color:#FFFFFF;
113
- margin-right:10px;
114
- padding:10px;
115
- position:relative;
116
- border : 1px dashed silver;
117
- }
118
-
119
- img {
120
- vertical-align: middle;
121
- border: 0; }
122
-
123
- a {
124
- text-decoration: none;
125
- color: #0080dd; }
126
- a:hover {
127
- color: blue;
128
- text-decoration: underline; }
129
-
130
-
131
- div#footer {
132
- color: #A9A9A9;
133
- overflow: hidden;
134
- text-align: center;
135
- position: relative;
136
- height: 50px;
137
- }
138
- div#footer .info {
139
- width: 50em;
140
- margin: auto;
141
- padding: 5px 200px 0 0;
142
- }
143
- div#footer .info .first {
144
- border-bottom:1px dashed silver;
145
- padding-bottom:4px;
146
- }
147
- div#footer .info .second {
148
- padding-top: 5px;
149
- }
150
- div#footer .powered_by {
151
- position: absolute; top: 0px; right: 0px;
152
- }
153
-
154
- div#main {
155
- position: relative;
156
- padding: 10px 10px 10px 15px;
157
- _width: 100%;
158
- background : url("http://user.openskip.org/stylesheets/skins/silver/back.png");
159
- }