X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/1c3a9ee62b7d1a0dc97d52b1a498be1339d49ebf..9375b397fa1ab6f4c5ded24c84c774e3d67a60e5:/app/models/client_application.rb diff --git a/app/models/client_application.rb b/app/models/client_application.rb index 9474a0137..63c46a46f 100644 --- a/app/models/client_application.rb +++ b/app/models/client_application.rb @@ -2,13 +2,14 @@ require 'oauth' class ClientApplication < ActiveRecord::Base belongs_to :user has_many :tokens, :class_name => "OauthToken" + has_many :access_tokens validates_presence_of :name, :url, :key, :secret validates_uniqueness_of :key before_validation_on_create :generate_keys validates_format_of :url, :with => /\Ahttp(s?):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/i validates_format_of :support_url, :with => /\Ahttp(s?):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/i, :allow_blank=>true - validates_format_of :callback_url, :with => /\Ahttp(s?):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/i, :allow_blank=>true + validates_format_of :callback_url, :with => /\A([a-z]){1}([\w0-9\.\+\-])*:\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/i, :allow_blank=>true attr_accessor :token_callback_url @@ -53,6 +54,20 @@ class ClientApplication < ActiveRecord::Base RequestToken.create :client_application => self, :callback_url => self.token_callback_url end + def access_token_for_user(user) + unless token = access_tokens.find(:first, :conditions => { :user_id => user.id, :invalidated_at => nil }) + params = { :user => user } + + permissions.each do |p| + params[p] = true + end + + token = access_tokens.create(params) + end + + token + end + # the permissions that this client would like from the user def permissions ClientApplication.all_permissions.select { |p| self[p] }