Class: OAuthProvider::Backends::Sqlite3

Inherits:
Abstract
  • Object
show all
Defined in:
lib/oauth_provider/backends/sqlite3.rb

Instance Method Summary collapse

Methods inherited from Abstract

#add_consumer, #add_user_access, #add_user_request, #destroy_user_access, #provider, #save_consumer

Constructor Details

#initialize(path) ⇒ Sqlite3

Returns a new instance of Sqlite3.



6
7
8
9
10
11
# File 'lib/oauth_provider/backends/sqlite3.rb', line 6

def initialize(path)
  @db = SQLite3::Database.new(path)
  @db.execute("CREATE TABLE IF NOT EXISTS consumers (name CHAR(50), shared_key CHAR(43) PRIMARY KEY, secret_key CHAR(43), callback CHAR(255))")
  @db.execute("CREATE TABLE IF NOT EXISTS request_tokens (shared_key CHAR(22) PRIMARY KEY, secret_key CHAR(43), authorized INT, consumer_shared_key CHAR(43))")
  @db.execute("CREATE TABLE IF NOT EXISTS access_tokens (shared_key CHAR(22) PRIMARY KEY, secret_key CHAR(43), request_shared_key CHAR(43), consumer_shared_key CHAR(43))")
end

Instance Method Details

#consumersObject



30
31
32
33
34
35
36
# File 'lib/oauth_provider/backends/sqlite3.rb', line 30

def consumers
  rtrn = []
  @db.execute("SELECT name, callback, shared_key, secret_key FROM consumers") do |row|
    rtrn << OAuthProvider::Consumer.new(self, @provider, row[1], OAuthProvider::Token.new(row[2], row[3]))
  end
  rtrn
end

#create_consumer(consumer) ⇒ Object



13
14
15
16
17
18
19
20
21
# File 'lib/oauth_provider/backends/sqlite3.rb', line 13

def create_consumer(consumer)
  # XXX: Should come up with a better way to store names than forcing the gem user to hack it in manually.
  # Also, OAuthProvider::DuplicateCallback is a bit silly... multiple consumers with the same callback may be useful (especially since callbacks are optional.
  @db.execute("SELECT callback FROM consumers WHERE callback='#{consumer.callback}'") do
    raise OAuthProvider::DuplicateCallback.new(consumer)
  end
  @db.execute("INSERT INTO consumers (name, shared_key, secret_key, callback) " \
                              "VALUES ('', '#{consumer.shared_key}', '#{consumer.secret_key}', '#{consumer.callback}')")
end

#create_user_access(token) ⇒ Object



62
63
64
65
# File 'lib/oauth_provider/backends/sqlite3.rb', line 62

def create_user_access(token)
  @db.execute("INSERT INTO access_tokens (shared_key, secret_key, consumer_shared_key, request_shared_key) " \
              "VALUES ('#{token.shared_key}','#{token.secret_key}','#{token.consumer.shared_key}', '#{token.request_shared_key}')")
end

#create_user_request(token) ⇒ Object



42
43
44
45
# File 'lib/oauth_provider/backends/sqlite3.rb', line 42

def create_user_request(token)
  @db.execute("INSERT INTO request_tokens (shared_key, secret_key, authorized, consumer_shared_key) " \
              "VALUES ('#{token.shared_key}','#{token.secret_key}',#{token.authorized? ? 1 : 0},'#{token.consumer.shared_key}')")
end

#destroy_consumer(consumer) ⇒ Object



38
39
40
# File 'lib/oauth_provider/backends/sqlite3.rb', line 38

def destroy_consumer(consumer)
  @db.execute("DELETE FROM consumers WHERE shared_key='#{consumer.shared_key}' AND secret_key='#{consumer.secret_key}'")
end

#destroy_user_request(user_request) ⇒ Object



58
59
60
# File 'lib/oauth_provider/backends/sqlite3.rb', line 58

def destroy_user_request(user_request)
  @db.execute("DELETE FROM request_tokens WHERE shared_key='#{user_request.shared_key}' AND secret_key='#{user_request.secret_key}'")
end

#find_consumer(shared_key) ⇒ Object



23
24
25
26
27
28
# File 'lib/oauth_provider/backends/sqlite3.rb', line 23

def find_consumer(shared_key)
  @db.execute("SELECT name, callback, shared_key, secret_key FROM consumers WHERE shared_key='#{shared_key}' LIMIT 1") do |row|
    return OAuthProvider::Consumer.new(self, @provider, row[1], OAuthProvider::Token.new(row[2], row[3]))
  end
  nil
end

#find_user_access(shared_key) ⇒ Object



67
68
69
70
71
72
# File 'lib/oauth_provider/backends/sqlite3.rb', line 67

def find_user_access(shared_key)
  @db.execute("SELECT shared_key, secret_key, request_shared_key, consumer_shared_key FROM access_tokens WHERE shared_key = '#{shared_key}' LIMIT 1") do |row|
    return OAuthProvider::UserAccess.new(self, find_consumer(row[3]), row[2], OAuthProvider::Token.new(row[0], row[1]))
  end
  nil
end

#find_user_request(shared_key) ⇒ Object



47
48
49
50
51
52
# File 'lib/oauth_provider/backends/sqlite3.rb', line 47

def find_user_request(shared_key)
  @db.execute("SELECT shared_key, secret_key, authorized, consumer_shared_key FROM request_tokens WHERE shared_key = '#{shared_key}' LIMIT 1") do |row|
    return OAuthProvider::UserRequest.new(self, self.find_consumer(row[3]), row[2].to_i!=0, OAuthProvider::Token.new(row[0], row[1]))
  end
  nil
end

#save_user_request(user_request) ⇒ Object



54
55
56
# File 'lib/oauth_provider/backends/sqlite3.rb', line 54

def save_user_request(user_request)
  @db.execute("UPDATE request_tokens SET authorized=#{user_request.authorized? ? '1' : '0'} WHERE shared_key='#{user_request.shared_key}' AND secret_key='#{user_request.secret_key}'")
end