diff options
Diffstat (limited to 'lib/api/users.rb')
| -rw-r--r-- | lib/api/users.rb | 58 | 
1 files changed, 37 insertions, 21 deletions
| diff --git a/lib/api/users.rb b/lib/api/users.rb index 69553f16397..d07815a8a97 100644 --- a/lib/api/users.rb +++ b/lib/api/users.rb @@ -42,7 +42,8 @@ module API        # Parameters:        #   email (required)                  - Email        #   password (required)               - Password -      #   name                              - Name +      #   name (required)                   - Name +      #   username (required)               - Name        #   skype                             - Skype ID        #   linkedin                          - Linkedin        #   twitter                           - Twitter account @@ -65,7 +66,15 @@ module API          if user.save            present user, with: Entities::UserFull          else -          not_found! +          conflict!('Email has already been taken') if User. +              where(email: user.email). +              count > 0 + +          conflict!('Username has already been taken') if User. +              where(username: user.username). +              count > 0 + +          render_validation_error!(user)          end        end @@ -92,14 +101,23 @@ module API          attrs = attributes_for_keys [:email, :name, :password, :skype, :linkedin, :twitter, :website_url, :projects_limit, :username, :extern_uid, :provider, :bio, :can_create_group, :admin]          user = User.find(params[:id]) -        not_found!("User not found") unless user +        not_found!('User') unless user          admin = attrs.delete(:admin)          user.admin = admin unless admin.nil? + +        conflict!('Email has already been taken') if attrs[:email] && +            User.where(email: attrs[:email]). +                where.not(id: user.id).count > 0 + +        conflict!('Username has already been taken') if attrs[:username] && +            User.where(username: attrs[:username]). +                where.not(id: user.id).count > 0 +          if user.update_attributes(attrs)            present user, with: Entities::UserFull          else -          not_found! +          render_validation_error!(user)          end        end @@ -113,13 +131,15 @@ module API        # POST /users/:id/keys        post ":id/keys" do          authenticated_as_admin! +        required_attributes! [:title, :key] +          user = User.find(params[:id])          attrs = attributes_for_keys [:title, :key]          key = user.keys.new attrs          if key.save            present key, with: Entities::SSHKey          else -          not_found! +          render_validation_error!(key)          end        end @@ -132,11 +152,9 @@ module API        get ':uid/keys' do          authenticated_as_admin!          user = User.find_by(id: params[:uid]) -        if user -          present user.keys, with: Entities::SSHKey -        else -          not_found! -        end +        not_found!('User') unless user + +        present user.keys, with: Entities::SSHKey        end        # Delete existing ssh key of a specified user. Only available to admin @@ -150,15 +168,13 @@ module API        delete ':uid/keys/:id' do          authenticated_as_admin!          user = User.find_by(id: params[:uid]) -        if user -          begin -            key = user.keys.find params[:id] -            key.destroy -          rescue ActiveRecord::RecordNotFound -            not_found! -          end -        else -          not_found! +        not_found!('User') unless user + +        begin +          key = user.keys.find params[:id] +          key.destroy +        rescue ActiveRecord::RecordNotFound +          not_found!('Key')          end        end @@ -173,7 +189,7 @@ module API          if user            user.destroy          else -          not_found! +          not_found!('User')          end        end      end @@ -219,7 +235,7 @@ module API          if key.save            present key, with: Entities::SSHKey          else -          not_found! +          render_validation_error!(key)          end        end | 
