X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/d6cc9d6e055974384be446f6da8218ff7da048ae..df1ebc0e3184afd3fb66414651fc1aec713928bf:/services/api/app/models/authorized_key.rb diff --git a/services/api/app/models/authorized_key.rb b/services/api/app/models/authorized_key.rb index afb33e60f8..ce348e0f8a 100644 --- a/services/api/app/models/authorized_key.rb +++ b/services/api/app/models/authorized_key.rb @@ -1,5 +1,9 @@ +# Copyright (C) The Arvados Authors. All rights reserved. +# +# SPDX-License-Identifier: AGPL-3.0 + class AuthorizedKey < ArvadosModel - include AssignUuid + include HasUuid include KindAndEtag include CommonApiTemplate before_create :permission_to_set_authorized_user_uuid @@ -7,6 +11,8 @@ class AuthorizedKey < ArvadosModel belongs_to :authorized_user, :foreign_key => :authorized_user_uuid, :class_name => 'User', :primary_key => :uuid + validate :public_key_must_be_unique + api_accessible :user, extend: :common do |t| t.add :name t.add :key_type @@ -28,4 +34,16 @@ class AuthorizedKey < ArvadosModel # Default = deny. false end + + def public_key_must_be_unique + if self.public_key + # Valid if no other rows have this public key + if self.class.where('uuid != ? and public_key like ?', + uuid || '', "%#{self.public_key}%").any? + errors.add(:public_key, "already exists in the database, use a different key.") + return false + end + end + return true + end end