Class: Spacialdb::Auth

Inherits:
Object
  • Object
show all
Extended by:
Helpers
Defined in:
lib/spacialdb/auth.rb

Defined Under Namespace

Classes: PasswordMismatch

Class Attribute Summary collapse

Class Method Summary collapse

Methods included from Helpers

ask, confirm_command, display, echo_off, echo_on, error, home_directory, json_decode, json_encode, longest, redisplay

Class Attribute Details

.credentialsObject

Returns the value of attribute credentials.



8
9
10
# File 'lib/spacialdb/auth.rb', line 8

def credentials
  @credentials
end

Class Method Details

.ask_for_and_save_credentialsObject



150
151
152
153
154
155
156
157
158
159
160
161
162
163
# File 'lib/spacialdb/auth.rb', line 150

def ask_for_and_save_credentials
  begin
    @credentials = ask_for_credentials
    write_credentials
  rescue ::RestClient::Unauthorized, ::RestClient::ResourceNotFound => e
    delete_credentials
    clear
    display "Authentication failed."
    exit 1
  rescue Exception => e
    delete_credentials
    raise e
  end
end

.ask_for_credentialsObject



103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/spacialdb/auth.rb', line 103

def ask_for_credentials
  puts "Enter your Spacialdb credentials."

  print "Email or Username: "
   = ask

  print "Password: "
  password = ask_for_password

  auth = Spacialdb::Client.auth(, password, host)
  private_api_key = auth['private_api_key']
  email = auth['email']

  [email, private_api_key]
end

.ask_for_passwordObject



119
120
121
122
123
124
125
# File 'lib/spacialdb/auth.rb', line 119

def ask_for_password
  echo_off
  password = ask
  puts
  echo_on
  return password
end

.clearObject



42
43
44
45
# File 'lib/spacialdb/auth.rb', line 42

def clear
  @credentials = nil
  @client = nil
end

.clientObject



18
19
20
21
22
23
# File 'lib/spacialdb/auth.rb', line 18

def client
  @client ||= begin
    client = Spacialdb::Client.new(email, private_api_key, host)
    client
  end
end

.credentials_fileObject



71
72
73
74
75
76
77
# File 'lib/spacialdb/auth.rb', line 71

def credentials_file
  if host == default_host
    "#{home_directory}/.spacialdb/credentials"
  else
    "#{home_directory}/.spacialdb/credentials.#{host}"
  end
end

.default_hostObject



10
11
12
# File 'lib/spacialdb/auth.rb', line 10

def default_host
  "beta.spacialdb.com"
end

.delete_credentialsObject



178
179
180
181
# File 'lib/spacialdb/auth.rb', line 178

def delete_credentials
  FileUtils.rm_f(credentials_file)
  clear
end

.emailObject



47
48
49
50
# File 'lib/spacialdb/auth.rb', line 47

def email
  get_credentials
  @credentials[0]
end

.get_credentialsObject



57
58
59
60
61
62
63
# File 'lib/spacialdb/auth.rb', line 57

def get_credentials
  return if @credentials
  unless @credentials = read_credentials
    ask_for_and_save_credentials
  end
  @credentials
end

.hostObject



14
15
16
# File 'lib/spacialdb/auth.rb', line 14

def host
  ENV['SPACIALDB_HOST'] || default_host
end

.loginObject



31
32
33
34
35
# File 'lib/spacialdb/auth.rb', line 31

def 
  delete_credentials
  get_credentials
  display "Logged in successfully."
end

.logoutObject



37
38
39
40
# File 'lib/spacialdb/auth.rb', line 37

def logout
  delete_credentials
  display "Logged out successfully."
end

.private_api_keyObject



52
53
54
55
# File 'lib/spacialdb/auth.rb', line 52

def private_api_key
  get_credentials
  @credentials[1]
end

.read_credentialsObject



65
66
67
# File 'lib/spacialdb/auth.rb', line 65

def read_credentials
  File.exists?(credentials_file) and File.read(credentials_file).split("\n")
end

.set_credentials_permissionsObject



173
174
175
176
# File 'lib/spacialdb/auth.rb', line 173

def set_credentials_permissions
  FileUtils.chmod 0700, File.dirname(credentials_file)
  FileUtils.chmod 0600, credentials_file
end

.signupObject



25
26
27
28
29
# File 'lib/spacialdb/auth.rb', line 25

def 
  delete_credentials
  
  display "Signed up successfully."
end

.signup_and_save_credentialsObject



127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
# File 'lib/spacialdb/auth.rb', line 127

def 
  begin
    @credentials = 
    write_credentials
  rescue ::RestClient::Unauthorized, ::RestClient::Forbidden => e
    clear
    display "Sign up failed:"
    display e.response
    exit 1
  rescue PasswordMismatch => e
    clear
    display "Sign up failed:"
    display e.message
    exit 1
  rescue Exception => e
    delete_credentials
    clear
    display "Sign up failed:"
    display e.message
    raise e
  end
end

.signup_for_credientialsObject

Raises:



79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/spacialdb/auth.rb', line 79

def 
  puts "Sign up to Spacialdb."

  print "Email: "
  email = ask

  print "Username: "
  username = ask

  print "Password: "
  password = ask_for_password

  print "Password confirmation: "
  password_confirmation = ask_for_password

  raise PasswordMismatch, "Password doesn't match confirmation." if password != password_confirmation

   = Spacialdb::Client.(username, email, password, password_confirmation, host)
  private_api_key = ['private_api_key']
  email = ['email']

  [email, private_api_key]
end

.write_credentialsObject



165
166
167
168
169
170
171
# File 'lib/spacialdb/auth.rb', line 165

def write_credentials
  FileUtils.mkdir_p(File.dirname(credentials_file))
  f = File.open(credentials_file, 'w')
  f.puts self.credentials
  f.close
  set_credentials_permissions
end