-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathauth.rb
81 lines (75 loc) · 1.72 KB
/
auth.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
require 'sinatra'
require './main'
require './app/models/user'
require './app/models/token'
require './errors'
require 'sinatra/cross_origin'
require 'digest'
configure do
enable :cross_origin
end
after do
ActiveRecord::Base.connection.close
end
get '/api/v1/user_info' do
token = params['token']
begin
if token && (t = Token.find_by_token_string(token))
if t.valid_until > Time.now
{
status: :ok,
user_id: t.user.id,
username: t.user.name,
user_type:t.user.user_type
}.to_json
else
er 'token expired'
end
else
er 'no token'
end
rescue ActiveRecord::ConnectionTimeoutError
er 'database connection error'
end
end
post '/api/v1/register' do
username = params['username']
password = params['password']
if username && password
user = User.find_by_name(username)
er 'user already exist' if user
user = User.create(name: username, user_type: 'user', password_md5: Digest::MD5.hexdigest(password))
if user
{
status: :ok,
user_id: user.id,
token: user.create_token.token_string
}.to_json
else
er 'failed to create user'
end
else
er 'parameters error'
end
end
post '/api/v1/login' do
username = params['username']
password = params['password']
if username && password
if (user = User.find_by_name(username))
if user.password_md5 == Digest::MD5.hexdigest(password)
{
status: :ok,
user_id: user.id,
token: user.create_token.token_string
}.to_json
else
er 'wrong password'
end
else
er 'user not found'
end
else
er 'parameters error'
end
end