summaryrefslogtreecommitdiff
path: root/lib/api/users.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/api/users.rb')
-rw-r--r--lib/api/users.rb264
1 files changed, 0 insertions, 264 deletions
diff --git a/lib/api/users.rb b/lib/api/users.rb
deleted file mode 100644
index 032a5d76e43..00000000000
--- a/lib/api/users.rb
+++ /dev/null
@@ -1,264 +0,0 @@
-module API
- # Users API
- class Users < Grape::API
- before { authenticate! }
-
- resource :users do
- # Get a users list
- #
- # Example Request:
- # GET /users
- get do
- @users = User.all
- @users = @users.active if params[:active].present?
- @users = @users.search(params[:search]) if params[:search].present?
- @users = paginate @users
-
- if current_user.is_admin?
- present @users, with: Entities::UserFull
- else
- present @users, with: Entities::UserBasic
- end
- end
-
- # Get a single user
- #
- # Parameters:
- # id (required) - The ID of a user
- # Example Request:
- # GET /users/:id
- get ":id" do
- @user = User.find(params[:id])
-
- if current_user.is_admin?
- present @user, with: Entities::UserFull
- else
- present @user, with: Entities::UserBasic
- end
- end
-
- # Create user. Available only for admin
- #
- # Parameters:
- # email (required) - Email
- # password (required) - Password
- # name (required) - Name
- # username (required) - Name
- # skype - Skype ID
- # linkedin - Linkedin
- # twitter - Twitter account
- # website_url - Website url
- # projects_limit - Number of projects user can create
- # extern_uid - External authentication provider UID
- # provider - External provider
- # bio - Bio
- # admin - User is admin - true or false (default)
- # can_create_group - User can create groups - true or false
- # confirm - Require user confirmation - true (default) or false
- # Example Request:
- # POST /users
- post do
- authenticated_as_admin!
- required_attributes! [:email, :password, :name, :username]
- attrs = attributes_for_keys [:email, :name, :password, :skype, :linkedin, :twitter, :projects_limit, :username, :bio, :can_create_group, :admin, :confirm]
- admin = attrs.delete(:admin)
- confirm = !(attrs.delete(:confirm) =~ (/(false|f|no|0)$/i))
- user = User.build_user(attrs)
- user.admin = admin unless admin.nil?
- user.skip_confirmation! unless confirm
-
- identity_attrs = attributes_for_keys [:provider, :extern_uid]
- if identity_attrs.any?
- user.identities.build(identity_attrs)
- end
-
- if user.save
- present user, with: Entities::UserFull
- else
- 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
-
- # Update user. Available only for admin
- #
- # Parameters:
- # email - Email
- # name - Name
- # password - Password
- # skype - Skype ID
- # linkedin - Linkedin
- # twitter - Twitter account
- # website_url - Website url
- # projects_limit - Limit projects each user can create
- # bio - Bio
- # admin - User is admin - true or false (default)
- # can_create_group - User can create groups - true or false
- # Example Request:
- # PUT /users/:id
- put ":id" do
- authenticated_as_admin!
-
- attrs = attributes_for_keys [:email, :name, :password, :skype, :linkedin, :twitter, :website_url, :projects_limit, :username, :bio, :can_create_group, :admin]
- user = User.find(params[:id])
- 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
- render_validation_error!(user)
- end
- end
-
- # Add ssh key to a specified user. Only available to admin users.
- #
- # Parameters:
- # id (required) - The ID of a user
- # key (required) - New SSH Key
- # title (required) - New SSH Key's title
- # Example Request:
- # 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
- render_validation_error!(key)
- end
- end
-
- # Get ssh keys of a specified user. Only available to admin users.
- #
- # Parameters:
- # uid (required) - The ID of a user
- # Example Request:
- # GET /users/:uid/keys
- get ':uid/keys' do
- authenticated_as_admin!
- user = User.find_by(id: params[:uid])
- not_found!('User') unless user
-
- present user.keys, with: Entities::SSHKey
- end
-
- # Delete existing ssh key of a specified user. Only available to admin
- # users.
- #
- # Parameters:
- # uid (required) - The ID of a user
- # id (required) - SSH Key ID
- # Example Request:
- # DELETE /users/:uid/keys/:id
- delete ':uid/keys/:id' do
- authenticated_as_admin!
- user = User.find_by(id: params[:uid])
- not_found!('User') unless user
-
- begin
- key = user.keys.find params[:id]
- key.destroy
- rescue ActiveRecord::RecordNotFound
- not_found!('Key')
- end
- end
-
- # Delete user. Available only for admin
- #
- # Example Request:
- # DELETE /users/:id
- delete ":id" do
- authenticated_as_admin!
- user = User.find_by(id: params[:id])
-
- if user
- user.destroy
- else
- not_found!('User')
- end
- end
- end
-
- resource :user do
- # Get currently authenticated user
- #
- # Example Request:
- # GET /user
- get do
- present @current_user, with: Entities::UserLogin
- end
-
- # Get currently authenticated user's keys
- #
- # Example Request:
- # GET /user/keys
- get "keys" do
- present current_user.keys, with: Entities::SSHKey
- end
-
- # Get single key owned by currently authenticated user
- #
- # Example Request:
- # GET /user/keys/:id
- get "keys/:id" do
- key = current_user.keys.find params[:id]
- present key, with: Entities::SSHKey
- end
-
- # Add new ssh key to currently authenticated user
- #
- # Parameters:
- # key (required) - New SSH Key
- # title (required) - New SSH Key's title
- # Example Request:
- # POST /user/keys
- post "keys" do
- required_attributes! [:title, :key]
-
- attrs = attributes_for_keys [:title, :key]
- key = current_user.keys.new attrs
- if key.save
- present key, with: Entities::SSHKey
- else
- render_validation_error!(key)
- end
- end
-
- # Delete existing ssh key of currently authenticated user
- #
- # Parameters:
- # id (required) - SSH Key ID
- # Example Request:
- # DELETE /user/keys/:id
- delete "keys/:id" do
- begin
- key = current_user.keys.find params[:id]
- key.destroy
- rescue
- end
- end
- end
- end
-end