openskip-skip_embedded 0.9.2 → 0.9.3

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.
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
- }