mozzn 0.2.0 → 0.3.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.
@@ -0,0 +1,102 @@
1
+ module Mozzn
2
+ module Commands
3
+ class Auth < Thor
4
+ desc 'register', 'Create an account on mozzn'
5
+
6
+ method_option :name, :aliases => "-n", :desc => "Username."
7
+ method_option :email, :aliases => "-u", :desc => "User email used to login."
8
+ method_option :password, :aliases => "-p", :desc => "User password."
9
+ method_option :password_confirmation, :aliases => "-c", :desc => "Password_confirmation."
10
+ def register
11
+ mozzn = Mozzn::Api.new
12
+ if options.present?
13
+ name = options[:name]
14
+ email = options[:email]
15
+ password = options[:password]
16
+ password_confirmation = options[:password_confirmation]
17
+ else
18
+ h = HighLine.new
19
+ name = h.ask("Username: ")
20
+ email = h.ask("Email: ")
21
+ password = h.ask("Password: ")
22
+ password_confirmation = h.ask("password_confirmation: ")
23
+ end
24
+ params = {
25
+ user: {
26
+ name: name,
27
+ email: email,
28
+ password: password,
29
+ password_confirmation: password_confirmation
30
+ }
31
+ }
32
+ response = mozzn.post(:registrations, params)
33
+ errors = response['data']['errors']
34
+ if errors.present?
35
+ errors = JSON.parse(errors)
36
+ say "#{response['info']}, the following errors were found:\n * #{errors.map {|e| e.join(' ')}.join("\n * ")}\nPlease try again.", :red
37
+ # TODO: re-run registration
38
+ else
39
+ say response['info'], :green
40
+ end
41
+ end
42
+
43
+ desc 'login', 'Login with your mozzn credentials, an interactive shell will ask you about your email and password'
44
+ # mozzn login
45
+ method_option :email, :aliases => "-u", :desc => "Mozzn email"
46
+ method_option :password, :aliases => "-p", :desc => "Mozzn password"
47
+ def login
48
+ mozzn = Mozzn::Api.new
49
+ if options[:email].nil? && options[:password].nil?
50
+ hl = HighLine.new
51
+ email = hl.ask 'Mozzn email: '
52
+ password = hl.ask('Mozzn password (we will not store this): ') { |q| q.echo = "*" }
53
+ elsif options[:email].nil? || options[:password].nil?
54
+ raise Thor::Error, "Email and password must be provided!"
55
+ else
56
+ email = options[:email]
57
+ password = options[:password]
58
+ end
59
+ params = {
60
+ user: {
61
+ email: email,
62
+ password: password
63
+ }
64
+ }
65
+ response = mozzn.post(:sessions, params)
66
+ auth_token = response['data']['auth_token']
67
+ if auth_token == nil
68
+ raise Thor::Error, response['info']
69
+ else
70
+ Mozzn::Config.new.add('token', auth_token)
71
+ say response['info'], :green
72
+ git_check
73
+ ssh_key_check
74
+ end
75
+ rescue Mozzn::Disconnected
76
+ say 'Unable to connect to Mozzn. Please check your internet connection.', :red
77
+ rescue Mozzn::UnexpectedOutput
78
+ say 'UnexpectedOutput', :red
79
+ end
80
+
81
+ no_commands do
82
+ desc 'git_check', 'checks if user has git installed in $PATH or not'
83
+ def git_check
84
+ line = Cocaine::CommandLine.new("which git")
85
+ begin
86
+ output = line.run
87
+ rescue Cocaine::ExitStatusError => e
88
+ raise Thor::Error, 'Unable to find git it is either not installed or not in your $PATH. You may need to install it or add it to $PATH.'
89
+ end
90
+ end
91
+
92
+ desc 'ssh_key_check', 'checks if user has ssh key in ~/.ssh path'
93
+ def ssh_key_check
94
+ ssh = ['~/.ssh/id_rsa.pub','~/.ssh/id_dsa.pub']
95
+ unless ssh.map { |ssh| File.exist?(File.expand_path(ssh))}
96
+ raise Thor::Error, "Unable to find an SSH key in #{File.expand_path('~/.ssh/')}. "
97
+ end
98
+ end
99
+ end
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,56 @@
1
+ module Mozzn
2
+ module Commands
3
+ class Key < Thor
4
+ desc 'add', 'Add your SSH Public Key directily or add its path'
5
+ method_option :public_key, :aliases => "-k", :desc => "RSA/DSA public key"
6
+ method_option :key_path, :aliases => "-p", :desc => "Path to RSA/DSA public key"
7
+ def add
8
+ token = Mozzn::Config.new.read['token']
9
+ if token.nil?
10
+ raise Thor::Error,"You need to login in order to continue."
11
+ end
12
+ mozzn = Mozzn::Api.new(Mozzn::Config.new.read['token'])
13
+ if options[:key_path].present?
14
+ key_path = File.expand_path(options[:key_path])
15
+ elsif options[:public_key].present?
16
+ public_key = options[:public_key]
17
+ else
18
+ raise Thor::Error, "Neither a key path or an SSH key were provided. You must use -p or -k options."
19
+ end
20
+
21
+ if public_key.nil?
22
+ if File.exist?(key_path)
23
+ File.open(key_path, "rb") do |f|
24
+ public_key = f.read
25
+ end
26
+ else
27
+ raise Thor::Error, "Unable to read #{key_path}. File does not exist or not accessible."
28
+ end
29
+ end
30
+
31
+ path = 'keys'
32
+ params = {
33
+ key: {
34
+ public: public_key
35
+ }
36
+ }
37
+ response = mozzn.post(path, params)
38
+ say response['info'], :green
39
+ rescue Mozzn::Disconnected
40
+ say 'Unable to connect to Mozzn check the internet connection!', :red
41
+ rescue Mozzn::UnexpectedOutput
42
+ say 'UnexpectedOutput', :red
43
+ end
44
+
45
+ desc 'destroy', 'Delete specific SSH public Key.'
46
+ def destroy
47
+ # TODO
48
+ end
49
+
50
+ desc 'list', 'List all your SSH public keys.'
51
+ def list
52
+ # TODO
53
+ end
54
+ end
55
+ end
56
+ end
data/lib/mozzn/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Mozzn
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
data/spec/app_spec.rb ADDED
@@ -0,0 +1,61 @@
1
+ require 'spec_helper'
2
+
3
+ describe Mozzn::Commands::App do
4
+ before :each do
5
+ @app = Mozzn::Commands::App.new
6
+ end
7
+ describe "mozzn create_app" do
8
+ describe "with valid params" do
9
+ it "returns Application created successfuly" do
10
+ capture(:stdout) { valid_user }
11
+ output = capture(:stdout) { @app.create "#{unique_name}" }
12
+ one,two = output.split("\n")
13
+ expect(one).to match('Application created successfuly')
14
+ end
15
+ end
16
+ describe "with invalid params" do
17
+ it "returns creating faild " do
18
+ capture(:stdout) { valid_user }
19
+ expect { @app.create "App name" }.to raise_error(Thor::Error, "creating faild")
20
+ end
21
+ end
22
+
23
+ describe "without params " do
24
+ it "returns You must enter Application Name! " do
25
+ expect { @app.create }.to raise_error(Thor::Error, "You must enter application name.")
26
+ end
27
+ end
28
+ end
29
+ describe "mozzn resources" do
30
+ describe "With valid params" do
31
+ describe "With an existing App" do
32
+ it "returns No assigned resources for this application." do
33
+ pending
34
+ end
35
+ end
36
+
37
+ describe "With an existing App having no datastores or components" do
38
+ it "returns No assigned resources for this application." do
39
+ pending
40
+ end
41
+ end
42
+ end
43
+ describe "With invalid parameters" do
44
+ describe "with unauthorized user" do
45
+ it "returns HTTP code 422" do
46
+ pending
47
+ end
48
+ end
49
+
50
+ describe "With not existing App" do
51
+ it "returns Application not found" do
52
+ name = 'not_existing_app'
53
+ @app.options = {
54
+ appname: name
55
+ }
56
+ expect { @app.resources }.to raise_error(Thor::Error, "Application was not found")
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
data/spec/auth_spec.rb ADDED
@@ -0,0 +1,184 @@
1
+ require 'spec_helper'
2
+
3
+ describe Mozzn::Commands::Auth do
4
+ before :each do
5
+ @auth = Mozzn::Commands::Auth.new
6
+ end
7
+ describe "mozzn login" do
8
+ describe "with valid params " do
9
+ it "returns Successfully logged in." do
10
+ @auth.options = {
11
+ email:'test@mozzn.com',
12
+ password: '12345678'
13
+ }
14
+ output = capture(:stdout) { @auth.login }
15
+ one,two = output.split("\n")
16
+ expect(one).to match('Signed in successfully.')
17
+ end
18
+ end
19
+
20
+ describe "with long_string email and password " do
21
+ it "returns Long email or password." do
22
+ @auth.options = {
23
+ email: long_string,
24
+ password: long_string
25
+ }
26
+ expect { @auth.login }.to raise_error(Thor::Error, "Invalid email or password.")
27
+ end
28
+ end
29
+
30
+ describe "with invalid params " do
31
+ it "returns Invalid email or password." do
32
+ @auth.options = {
33
+ email: 'invalid@example.com',
34
+ password: '12345678'
35
+ }
36
+ expect { @auth.login }.to raise_error(Thor::Error, "Invalid email or password.")
37
+ end
38
+ end
39
+
40
+ describe "with nil params " do
41
+ it "returns Invalid email or password." do
42
+ @auth.options = {
43
+ email: '',
44
+ password: ''
45
+ }
46
+ expect { @auth.login }.to raise_error(Thor::Error, "Invalid email or password.")
47
+ end
48
+ end
49
+
50
+ describe "without email " do
51
+ it "returns Email and password must be provided! " do
52
+ @auth.options = {
53
+ password: '12345678'
54
+ }
55
+ expect { @auth.login }.to raise_error(Thor::Error, "Email and password must be provided!")
56
+ end
57
+ end
58
+
59
+ describe "without password " do
60
+ it "returns Email and password must be provided! " do
61
+ @auth.options = {
62
+ email: 'rania@overcstudios.com'
63
+ }
64
+ expect { @auth.login }.to raise_error(Thor::Error, "Email and password must be provided!")
65
+ end
66
+ end
67
+
68
+ describe "with no params " do
69
+ it "returns an interactive shell asking for email and password" do
70
+ pending
71
+ end
72
+ end
73
+ end
74
+ describe "mozzn registration" do
75
+ describe "with valid params" do
76
+ it "returns Succesfully registered" do
77
+ @auth.options = {
78
+ name: 'rania',
79
+ email: unique_email ,
80
+ password: '12345678',
81
+ password_confirmation: '12345678'
82
+ }
83
+ output = capture(:stdout) { @auth.register }
84
+ output.chomp!
85
+ expect(output).to match("Successfully registered")
86
+ end
87
+ end
88
+
89
+ describe "with missing email" do
90
+ it "should return email missing" do
91
+ @auth.options = {
92
+ name: 'rania',
93
+ password: '12345678',
94
+ password_confirmation: '12345678'
95
+ }
96
+ output = capture(:stdout) { @auth.register }
97
+ output.chomp!
98
+ expect(output).to be =~ /email/
99
+ end
100
+ end
101
+
102
+ describe "with missing password" do
103
+ it "should return password missing" do
104
+ @auth.options = {
105
+ name: 'rania',
106
+ email: unique_name,
107
+ password_confirmation: '12345678'
108
+ }
109
+ output = capture(:stdout) { @auth.register }
110
+ output.chomp!
111
+ expect(output).to be =~ /password/
112
+ end
113
+ end
114
+
115
+ describe "with missing confirmation Password" do
116
+ it "should return password confirmation Missing" do
117
+ @auth.options = {
118
+ name: 'rania',
119
+ email: unique_email,
120
+ password: '12345678'
121
+ }
122
+ output = capture(:stdout) { @auth.register }
123
+ output.chomp!
124
+ expect(output).to be =~ /password_confirmation/
125
+ end
126
+ end
127
+
128
+ describe "with invalid email" do
129
+ it "should return invalid email" do
130
+ @auth.options = {
131
+ name: 'rania',
132
+ email: 'qqqqqqq',
133
+ password: '12345678',
134
+ password_confirmation: '12345678'
135
+ }
136
+ output = capture(:stdout) { @auth.register }
137
+ output.chomp!
138
+ expect(output).to be =~ /email/
139
+ end
140
+ end
141
+
142
+ describe "with short password" do
143
+ it "should short password" do
144
+ @auth.options = {
145
+ name: 'rania',
146
+ email: unique_email,
147
+ password: '123',
148
+ password_confirmation: '123'
149
+ }
150
+ output = capture(:stdout) { @auth.register }
151
+ output.chomp!
152
+ expect(output).to be =~ /password/
153
+ end
154
+ end
155
+
156
+ describe "with unmatched password and confirmation password" do
157
+ it "should return password and confirmation password are not matched" do
158
+ @auth.options = {
159
+ name: 'rania',
160
+ email: unique_email,
161
+ password: '12345678',
162
+ password_confirmation: '87654321'
163
+ }
164
+ output = capture(:stdout) { @auth.register }
165
+ output.chomp!
166
+ expect(output).to be =~ /password_confirmation/
167
+ end
168
+ end
169
+
170
+ describe "with nil parammeters" do
171
+ it "should return Parameter Missing" do
172
+ @auth.options = {
173
+ name: nil,
174
+ email: nil,
175
+ password: nil,
176
+ password_confirmation: nil
177
+ }
178
+ output = capture(:stdout) { @auth.register }
179
+ output.chomp!
180
+ expect(output).to be =~ /email/
181
+ end
182
+ end
183
+ end
184
+ end