magellan-cli 0.2.7 → 0.2.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/magellan/cli/command.rb +2 -3
- data/lib/magellan/cli/http.rb +34 -24
- data/lib/magellan/cli/login.rb +16 -30
- data/lib/magellan/cli/resources/base.rb +2 -1
- data/lib/magellan/cli/resources/worker.rb +8 -0
- data/lib/magellan/cli/version.rb +1 -1
- data/spec/magellan/cli/login_spec.rb +3 -3
- data/spec/magellan/cli/resources/project_spec.rb +3 -5
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f84015af091e8e39e5a63466e4518e74ad3d9b65
|
4
|
+
data.tar.gz: ceae355f009d372955e052d0035a6ebbccc90a6b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3fef2a90a5b822b287ef8a8341b27ccd833602ca15105a656e747e09eafa83b2a21dddb5f3f316488e164cf6e404bc6f8030aac26cf2ab29af28a0cf502813ea
|
7
|
+
data.tar.gz: 094d538e70201384bd2af1c20c4f5895431631e001484c11d82de88936dc28c2380c9c6db9cbfd1e055db191042f579ef9c938a1ddcc4ef4b792925bd49cd650
|
data/Gemfile.lock
CHANGED
data/lib/magellan/cli/command.rb
CHANGED
@@ -6,7 +6,6 @@ require 'active_support/core_ext/string/inflections'
|
|
6
6
|
module Magellan
|
7
7
|
module Cli
|
8
8
|
class Command < Base
|
9
|
-
include Magellan::Cli::FileAccess
|
10
9
|
|
11
10
|
{
|
12
11
|
"organization" => "Organization",
|
@@ -34,8 +33,8 @@ module Magellan
|
|
34
33
|
print "password: "
|
35
34
|
password = STDIN.noecho(&:gets).chomp
|
36
35
|
puts ""
|
37
|
-
|
38
|
-
Magellan::Cli::Http.new.login
|
36
|
+
|
37
|
+
Magellan::Cli::Http.new.login!(email, password)
|
39
38
|
end
|
40
39
|
end
|
41
40
|
end
|
data/lib/magellan/cli/http.rb
CHANGED
@@ -7,9 +7,18 @@ module Magellan
|
|
7
7
|
|
8
8
|
no_commands do
|
9
9
|
|
10
|
-
def login
|
10
|
+
def login!(email, password)
|
11
|
+
cli = Cli::Login.new
|
12
|
+
logined = cli.api_login!(email, password)
|
13
|
+
if logined
|
14
|
+
success("OK")
|
15
|
+
else
|
16
|
+
error("Login Failure.")
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def access_api
|
11
21
|
cli = Cli::Login.new
|
12
|
-
cli.login!
|
13
22
|
return block_given? ? yield(cli) : success("OK")
|
14
23
|
end
|
15
24
|
|
@@ -33,9 +42,10 @@ module Magellan
|
|
33
42
|
# @param [String] rel_path cli.base_url からの相対パス
|
34
43
|
# @param [Hash] params クエリ文字列
|
35
44
|
# @return [Object] レスポンスのBODYをJSONとしてパースした結果オブジェクト
|
36
|
-
def get_json(rel_path, params =
|
37
|
-
|
38
|
-
url = "#{
|
45
|
+
def get_json(rel_path, params = {})
|
46
|
+
access_api do |api|
|
47
|
+
url = "#{api.base_url}#{rel_path}"
|
48
|
+
params = api.login_auth.merge(params)
|
39
49
|
if params && !params.empty?
|
40
50
|
url << '?' << params.map{|k,v| "%s=%s" % [CGI.escape(k.to_s), CGI.escape(v.to_s)] }.join("&")
|
41
51
|
end
|
@@ -43,7 +53,7 @@ module Magellan
|
|
43
53
|
# "Unknown key: max-age = 0" というメッセージを表示させないために$stderrを一時的に上書き
|
44
54
|
$stderr, bak = StringIO.new, $stderr
|
45
55
|
begin
|
46
|
-
res =
|
56
|
+
res = api.httpclient.get(url)
|
47
57
|
check_response(res)
|
48
58
|
ensure
|
49
59
|
$stderr = bak
|
@@ -56,9 +66,9 @@ module Magellan
|
|
56
66
|
# @param [Hash] params POSTで渡されるパラメータ
|
57
67
|
# @return nil
|
58
68
|
def post(rel_path, params)
|
59
|
-
|
60
|
-
params =
|
61
|
-
process_res(
|
69
|
+
access_api do |api|
|
70
|
+
params = api.login_auth.update(params || {})
|
71
|
+
process_res(api, :post, rel_path, params)
|
62
72
|
end
|
63
73
|
end
|
64
74
|
|
@@ -67,9 +77,9 @@ module Magellan
|
|
67
77
|
# @param [Hash] params POSTで渡されるパラメータ
|
68
78
|
# @return nil
|
69
79
|
def post_json(rel_path, params)
|
70
|
-
|
71
|
-
params =
|
72
|
-
process_res(
|
80
|
+
access_api do |api|
|
81
|
+
params = api.login_auth.update(params || {})
|
82
|
+
process_res(api, :post, rel_path, params.to_json, JSON_HEADER)
|
73
83
|
end
|
74
84
|
end
|
75
85
|
|
@@ -78,9 +88,9 @@ module Magellan
|
|
78
88
|
# @param [Hash] params PUTで渡されるパラメータ
|
79
89
|
# @return nil
|
80
90
|
def put(rel_path, params)
|
81
|
-
|
82
|
-
params =
|
83
|
-
process_res(
|
91
|
+
access_api do |api|
|
92
|
+
params = cli.login_auth.update(params || {})
|
93
|
+
process_res(api, :put, rel_path, params)
|
84
94
|
end
|
85
95
|
end
|
86
96
|
|
@@ -89,9 +99,9 @@ module Magellan
|
|
89
99
|
# @param [Hash] params PUTで渡されるパラメータ
|
90
100
|
# @return nil
|
91
101
|
def put_json(rel_path, params)
|
92
|
-
|
93
|
-
params =
|
94
|
-
process_res(
|
102
|
+
access_api do |api|
|
103
|
+
params = api.login_auth.update(params || {})
|
104
|
+
process_res(api, :put, rel_path, params.to_json, JSON_HEADER)
|
95
105
|
end
|
96
106
|
end
|
97
107
|
|
@@ -99,16 +109,16 @@ module Magellan
|
|
99
109
|
# @param [String] rel_path cli.base_url からの相対パス
|
100
110
|
# @return nil
|
101
111
|
def delete(rel_path)
|
102
|
-
|
103
|
-
params =
|
104
|
-
process_res(
|
112
|
+
access_api do |api|
|
113
|
+
params = api.login_auth
|
114
|
+
process_res(api, :delete, rel_path, params)
|
105
115
|
end
|
106
116
|
end
|
107
117
|
|
108
|
-
def process_res(
|
109
|
-
url = "#{
|
118
|
+
def process_res(api, http_method, rel_path, *args)
|
119
|
+
url = "#{api.base_url}#{rel_path}"
|
110
120
|
verbose("%s %s\n%s" % [http_method, url, args])
|
111
|
-
res =
|
121
|
+
res = api.httpclient.send(http_method, url, *args)
|
112
122
|
check_response(res)
|
113
123
|
end
|
114
124
|
|
data/lib/magellan/cli/login.rb
CHANGED
@@ -23,6 +23,7 @@ module Magellan
|
|
23
23
|
attr_reader :base_url
|
24
24
|
|
25
25
|
attr_reader :auth_token
|
26
|
+
attr_reader :login_auth
|
26
27
|
|
27
28
|
# Magellan::Cli::Loginのコンストラクタです。
|
28
29
|
#
|
@@ -45,6 +46,7 @@ module Magellan
|
|
45
46
|
|
46
47
|
@httpclient = HTTPClient.new
|
47
48
|
@httpclient.ssl_config.verify_mode = nil # 自己署名の証明書をOKにする
|
49
|
+
@login_auth = load_selection("login")
|
48
50
|
end
|
49
51
|
|
50
52
|
def login_form_url
|
@@ -54,46 +56,30 @@ module Magellan
|
|
54
56
|
@login_url ||= base_url + "/api/sign_in.json"
|
55
57
|
end
|
56
58
|
|
57
|
-
# magellan-api
|
59
|
+
# magellan-apiサーバに接続してログインの検証とアクセストークンの保存を行います。
|
58
60
|
#
|
59
|
-
# @
|
60
|
-
|
61
|
-
# @return [String] サーバが返したレスポンスのbodyを返します
|
62
|
-
def login_and_status
|
61
|
+
# @return [boolean] login成功/失敗
|
62
|
+
def api_login!(email, password)
|
63
63
|
@auth_token ||= get_auth_token
|
64
64
|
params = {
|
65
|
-
"user" =>
|
65
|
+
"user" => {
|
66
|
+
"email" => email,
|
67
|
+
"password" => password
|
68
|
+
},
|
66
69
|
"authenticity_token" => @auth_token
|
67
70
|
}.to_json
|
68
71
|
res2 = Ssl.retry_on_ssl_error("login"){ @httpclient.post(login_url, params, JSON_HEADER) }
|
69
|
-
return res2.status, res2.body
|
70
|
-
end
|
71
72
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
# @option extra [Integer] :device_type デバイス種別
|
76
|
-
# @option extra [Integer] :device_id デバイス識別子
|
77
|
-
# @return [Boolean] ログインに成功した場合はtrue、失敗した場合はfalse
|
78
|
-
def login
|
79
|
-
status, _ = login_and_status
|
80
|
-
case status
|
81
|
-
when 200...300 then true
|
82
|
-
else false
|
73
|
+
case res2.status
|
74
|
+
when 200...300 then logined = true
|
75
|
+
else logined = false
|
83
76
|
end
|
84
|
-
end
|
85
77
|
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
# @see #login
|
90
|
-
# @return ログインに成功した場合は自身のオブジェクト返します。失敗した場合はLibgss::Network::Errorがraiseされます。
|
91
|
-
def login!
|
92
|
-
status, body = login_and_status
|
93
|
-
case status
|
94
|
-
when 200...300 then return self
|
95
|
-
else raise LoginError, "status: #{status} #{body}"
|
78
|
+
if logined
|
79
|
+
body = JSON.parse res2.body
|
80
|
+
update_selections("login" => {"email" => email, "token" => body["token"] })
|
96
81
|
end
|
82
|
+
logined
|
97
83
|
end
|
98
84
|
|
99
85
|
def get_auth_token
|
@@ -42,6 +42,7 @@ module Magellan
|
|
42
42
|
q[f] = r["id"]
|
43
43
|
end
|
44
44
|
return build_query(q)
|
45
|
+
|
45
46
|
end
|
46
47
|
|
47
48
|
DEFAULT_SELECTION_FIELDS = %w[id name].freeze
|
@@ -64,7 +65,7 @@ module Magellan
|
|
64
65
|
next unless i
|
65
66
|
fields[i] = obj[:name]
|
66
67
|
res = obj[:resource] || ((k = Resources.const_get(obj[:class])) ? k.resource_name : nil)
|
67
|
-
res2 = get_json("/admin/#{res}.json
|
68
|
+
res2 = get_json("/admin/#{res}.json", {"compact" => true})
|
68
69
|
associations[f] = res2.each_with_object({}){|r,d| d[ r["id"].to_i ] = r["label"] }
|
69
70
|
end
|
70
71
|
return associations
|
@@ -49,6 +49,14 @@ module Magellan
|
|
49
49
|
put_json("/admin/#{resource_name}/#{w["id"]}/edit.js", params)
|
50
50
|
end
|
51
51
|
|
52
|
+
desc "prepare_images", "prepare worker images"
|
53
|
+
def prepare_images
|
54
|
+
s = load_selection("functions_worker")
|
55
|
+
id = s["id"]
|
56
|
+
r = post_json("/admin/functions~worker/#{id}/simple_method_call.json", {method_name: "prepare_images"})
|
57
|
+
Image.new.show_list(r["result"])
|
58
|
+
end
|
59
|
+
|
52
60
|
end
|
53
61
|
|
54
62
|
end
|
data/lib/magellan/cli/version.rb
CHANGED
@@ -36,7 +36,7 @@ describe Magellan::Cli::Login do
|
|
36
36
|
allow(res).to receive(:status).and_return(200)
|
37
37
|
allow(res).to receive(:body).and_return({"success" => true}.to_json)
|
38
38
|
allow(res).to receive(:body_encoding).and_return(Encoding.find("UTF-8"))
|
39
|
-
expect(cli.
|
39
|
+
expect(cli.api_login!(email, password)).to eq true
|
40
40
|
end
|
41
41
|
|
42
42
|
it :login_failure do
|
@@ -45,7 +45,7 @@ describe Magellan::Cli::Login do
|
|
45
45
|
allow(res).to receive(:status).and_return(401) # Unauthorized
|
46
46
|
allow(res).to receive(:body).and_return({"success" => false, "message" => "Error with your login or password"}.to_json)
|
47
47
|
allow(res).to receive(:body_encoding).and_return(Encoding.find("UTF-8"))
|
48
|
-
expect
|
48
|
+
expect(cli.api_login!(email, password)).to eq false
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
@@ -72,7 +72,7 @@ describe Magellan::Cli::Login do
|
|
72
72
|
allow(res).to receive(:status).and_return(200)
|
73
73
|
allow(res).to receive(:body).and_return({"success" => true}.to_json)
|
74
74
|
allow(res).to receive(:body_encoding).and_return(Encoding.find("UTF-8"))
|
75
|
-
expect(cli.
|
75
|
+
expect(cli.api_login!(email, password)).to eq true
|
76
76
|
end
|
77
77
|
end
|
78
78
|
end
|
@@ -6,22 +6,20 @@ describe Magellan::Cli::Resources::Project do
|
|
6
6
|
let(:base_url){ "https://localhost:3000" }
|
7
7
|
let(:httpclient){ double(:httpclient) }
|
8
8
|
let(:cli) do
|
9
|
-
cli = double(:
|
9
|
+
cli = double(:access_api, base_url: base_url, auth_token: {}, login_auth: {})
|
10
10
|
allow(cli).to receive(:httpclient).and_return(httpclient)
|
11
11
|
cli
|
12
12
|
end
|
13
|
-
let(:res){ double(:res) }
|
13
|
+
let(:res){ double(:res, status: 200, body: {}.to_json) }
|
14
14
|
|
15
15
|
let(:cmd){ Magellan::Cli::Resources::Project.new }
|
16
16
|
|
17
17
|
before do
|
18
|
-
allow(cmd).to receive(:
|
18
|
+
allow(cmd).to receive(:access_api).and_yield(cli)
|
19
19
|
end
|
20
20
|
|
21
21
|
describe :list do
|
22
22
|
it do
|
23
|
-
allow(res).to receive(:body).and_return("[]")
|
24
|
-
allow(res).to receive(:status).and_return(200)
|
25
23
|
expect(httpclient).to receive(:get).with("#{base_url}/admin/project.json").and_return(res)
|
26
24
|
expect($stdout).to receive(:puts)
|
27
25
|
cmd.list
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: magellan-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- akm2000
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-12-
|
11
|
+
date: 2014-12-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httpclient
|