api.user do
  api.id         @user.id
  api.login      @user.login
  api.admin      @user.admin? if User.current.admin? || (User.current == @user)
  api.firstname  @user.firstname
  api.lastname   @user.lastname
  api.mail       @user.mail if User.current.admin? || !@user.pref.hide_mail
  api.created_on @user.created_on
  api.updated_on @user.updated_on
  api.last_login_on     @user.last_login_on
  api.passwd_changed_on @user.passwd_changed_on
  api.avatar_url gravatar_url(@user.mail, {rating: nil, size: nil, default: Setting.gravatar_default}) if @user.mail && Setting.gravatar_enabled?
  api.twofa_scheme      @user.twofa_scheme if User.current.admin? || (User.current == @user)
  api.api_key    @user.api_key if (User.current.admin? || (User.current == @user && !User.current.authorized_by_oauth?))
  api.status     @user.status if User.current.admin?

  render_api_custom_values @user.visible_custom_field_values, api

  api.auth_source do
    api.id @user.auth_source.id
    api.name @user.auth_source.name
  end if User.current.admin? && include_in_api_response?('auth_source') && @user.auth_source.present?

  api.array :groups do |groups|
    @user.groups.each do |group|
      api.group :id => group.id, :name => group.name
    end
  end if User.current.admin? && include_in_api_response?('groups')

  api.array :memberships do
    @memberships.each do |membership|
      api.membership do
        api.id membership.id
        api.project :id => membership.project.id, :name => membership.project.name
        api.array :roles do
          membership.member_roles.each do |member_role|
            if member_role.role
              attrs = {:id => member_role.role.id, :name => member_role.role.name}
              attrs.merge!(:inherited => true) if member_role.inherited_from.present?
              api.role attrs
            end
          end
        end
      end if membership.project
    end
  end if include_in_api_response?('memberships') && @memberships
end
