X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/f70feedc6517b824c4201584d6298fd5790d85ba..8ae5d94b2f16d6f2cf1739e19ebc3793a18a0a4a:/app/models/client_application.rb diff --git a/app/models/client_application.rb b/app/models/client_application.rb index 9474a0137..04f1c0c99 100644 --- a/app/models/client_application.rb +++ b/app/models/client_application.rb @@ -1,14 +1,17 @@ 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][a-z0-9.+-]*:\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/i, :allow_blank=>true + + before_validation :generate_keys, :on => :create attr_accessor :token_callback_url @@ -53,6 +56,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.valid.where(:user_id => user).first + 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] }