mirror of
https://github.com/wahyd4/gitlabhq.git
synced 2026-08-20 10:06:04 +10:00
Merge branch 'master' of dev.gitlab.org:gitlab/gitlabhq
Conflicts: doc/integration/README.md
This commit is contained in:
@@ -1 +1 @@
|
||||
2.5.1
|
||||
2.5.3
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
border-left: 1px solid #666;
|
||||
}
|
||||
|
||||
// highlight line via anchor
|
||||
pre.hll {
|
||||
background-color: #fff !important;
|
||||
}
|
||||
|
||||
@@ -12,6 +12,11 @@
|
||||
border-left: 1px solid #555;
|
||||
}
|
||||
|
||||
// highlight line via anchor
|
||||
pre.hll {
|
||||
background-color: #49483e !important;
|
||||
}
|
||||
|
||||
.hll { background-color: #49483e }
|
||||
.c { color: #75715e } /* Comment */
|
||||
.err { color: #960050; background-color: #1e0010 } /* Error */
|
||||
|
||||
@@ -12,6 +12,11 @@
|
||||
border-left: 1px solid #113b46;
|
||||
}
|
||||
|
||||
// highlight line via anchor
|
||||
pre.hll {
|
||||
background-color: #073642 !important;
|
||||
}
|
||||
|
||||
/* Solarized Dark
|
||||
|
||||
For use with Jekyll and Pygments
|
||||
|
||||
@@ -12,6 +12,11 @@
|
||||
border-left: 1px solid #c5d0d4;
|
||||
}
|
||||
|
||||
// highlight line via anchor
|
||||
pre.hll {
|
||||
background-color: #eee8d5 !important;
|
||||
}
|
||||
|
||||
/* Solarized Light
|
||||
|
||||
For use with Jekyll and Pygments
|
||||
|
||||
@@ -12,6 +12,11 @@
|
||||
border-left: 1px solid #bbb;
|
||||
}
|
||||
|
||||
// highlight line via anchor
|
||||
pre.hll {
|
||||
background-color: #f8eec7 !important;
|
||||
}
|
||||
|
||||
.hll { background-color: #f8f8f8 }
|
||||
.c { color: #999988; font-style: italic; }
|
||||
.err { color: #a61717; background-color: #e3d2d2; }
|
||||
|
||||
@@ -5,11 +5,8 @@ class FilesController < ApplicationController
|
||||
|
||||
if uploader.file_storage?
|
||||
if can?(current_user, :read_project, note.project)
|
||||
# Replace old notes location in /public with the new one in / and send the file
|
||||
path = uploader.file.path.gsub("#{Rails.root}/public", Rails.root.to_s)
|
||||
|
||||
disposition = uploader.image? ? 'inline' : 'attachment'
|
||||
send_file path, disposition: disposition
|
||||
send_file uploader.file.path, disposition: disposition
|
||||
else
|
||||
not_found!
|
||||
end
|
||||
|
||||
@@ -8,7 +8,7 @@ class TrendingProjectsFinder
|
||||
# for period of time - ex. month
|
||||
projects.joins(:notes).where('notes.created_at > ?', start_date).
|
||||
select("projects.*, count(notes.id) as ncount").
|
||||
group("projects.id").order("ncount DESC")
|
||||
group("projects.id").reorder("ncount DESC")
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
+1
-1
@@ -26,7 +26,7 @@ class Group < Namespace
|
||||
validate :avatar_type, if: ->(user) { user.avatar_changed? }
|
||||
validates :avatar, file_size: { maximum: 200.kilobytes.to_i }
|
||||
|
||||
mount_uploader :avatar, AvatarUploader
|
||||
mount_uploader :avatar, AttachmentUploader
|
||||
|
||||
after_create :post_create_hook
|
||||
after_destroy :post_destroy_hook
|
||||
|
||||
@@ -145,7 +145,7 @@ class Project < ActiveRecord::Base
|
||||
if: ->(project) { project.avatar && project.avatar_changed? }
|
||||
validates :avatar, file_size: { maximum: 200.kilobytes.to_i }
|
||||
|
||||
mount_uploader :avatar, AvatarUploader
|
||||
mount_uploader :avatar, AttachmentUploader
|
||||
|
||||
# Scopes
|
||||
scope :sorted_by_activity, -> { reorder(last_activity_at: :desc) }
|
||||
|
||||
+1
-1
@@ -177,7 +177,7 @@ class User < ActiveRecord::Base
|
||||
end
|
||||
end
|
||||
|
||||
mount_uploader :avatar, AvatarUploader
|
||||
mount_uploader :avatar, AttachmentUploader
|
||||
|
||||
# Scopes
|
||||
scope :admins, -> { where(admin: true) }
|
||||
|
||||
@@ -3,8 +3,10 @@
|
||||
class AttachmentUploader < CarrierWave::Uploader::Base
|
||||
storage :file
|
||||
|
||||
after :store, :reset_events_cache
|
||||
|
||||
def store_dir
|
||||
"#{Rails.root}/uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
|
||||
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
|
||||
end
|
||||
|
||||
def image?
|
||||
@@ -27,4 +29,8 @@ class AttachmentUploader < CarrierWave::Uploader::Base
|
||||
def file_storage?
|
||||
self.class.storage == CarrierWave::Storage::File
|
||||
end
|
||||
|
||||
def reset_events_cache(file)
|
||||
model.reset_events_cache if model.is_a?(User)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
# encoding: utf-8
|
||||
|
||||
class AvatarUploader < CarrierWave::Uploader::Base
|
||||
storage :file
|
||||
|
||||
after :store, :reset_events_cache
|
||||
|
||||
def store_dir
|
||||
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
|
||||
end
|
||||
|
||||
def image?
|
||||
img_ext = %w(png jpg jpeg gif bmp tiff)
|
||||
if file.respond_to?(:extension)
|
||||
img_ext.include?(file.extension.downcase)
|
||||
else
|
||||
# Not all CarrierWave storages respond to :extension
|
||||
ext = file.path.split('.').last.downcase
|
||||
img_ext.include?(ext)
|
||||
end
|
||||
rescue
|
||||
false
|
||||
end
|
||||
|
||||
def file_storage?
|
||||
self.class.storage == CarrierWave::Storage::File
|
||||
end
|
||||
|
||||
def reset_events_cache(file)
|
||||
model.reset_events_cache if model.is_a?(User)
|
||||
end
|
||||
end
|
||||
@@ -1,19 +0,0 @@
|
||||
class MoveNoteFolder < ActiveRecord::Migration
|
||||
def up
|
||||
system(
|
||||
"if [ -d '#{Rails.root}/public/uploads/note' ];
|
||||
then mv #{Rails.root}/public/uploads/note #{Rails.root}/uploads/note;
|
||||
echo 'note folder has been moved successfully';
|
||||
else
|
||||
echo 'note folder has already been moved or does not exist yet. Nothing to do here.'; fi")
|
||||
end
|
||||
|
||||
def down
|
||||
system(
|
||||
"if [ -d '#{Rails.root}/uploads/note' ];
|
||||
then mv #{Rails.root}/uploads/note #{Rails.root}/public/uploads/note;
|
||||
echo 'note folder has been moved successfully';
|
||||
else
|
||||
echo 'note folder has already been moved or does not exist yet. Nothing to do here.'; fi")
|
||||
end
|
||||
end
|
||||
@@ -10,6 +10,7 @@
|
||||
- [SSH](ssh/README.md) Setup your ssh keys and deploy keys for secure access to your projects.
|
||||
- [Web hooks](web_hooks/web_hooks.md) Let GitLab notify you when new code has been pushed to your project.
|
||||
- [Workflow](workflow/README.md) Using GitLab functionality and importing projects from GitHub and SVN.
|
||||
- [GitLab as OAuth2 authentication service provider](integration/oauth_provider.md). It allows you to login to other applications from GitLab.
|
||||
|
||||
## Administrator documentation
|
||||
|
||||
|
||||
+2
-1
@@ -22,6 +22,7 @@
|
||||
## Clients
|
||||
|
||||
Find API Clients for GitLab [on our website](https://about.gitlab.com/applications/#api-clients).
|
||||
You can use [GitLab as an OAuth2 client](oauth2.md) to make API calls.
|
||||
|
||||
## Introduction
|
||||
|
||||
@@ -67,7 +68,7 @@ curl https://localhost:3000/api/v3/user?access_token=OAUTH-TOKEN
|
||||
curl -H "Authorization: Bearer OAUTH-TOKEN" https://localhost:3000/api/v3/user
|
||||
```
|
||||
|
||||
Read more about [OAuth2 in GitLab](oauth2.md).
|
||||
Read more about [GitLab as an OAuth2 client](oauth2.md).
|
||||
|
||||
## Status codes
|
||||
|
||||
|
||||
+55
-84
@@ -15,27 +15,20 @@ Parameters:
|
||||
```json
|
||||
[
|
||||
{
|
||||
"name": "master",
|
||||
"commit": {
|
||||
"id": "7b5c3cc8be40ee161ae89a06bba6229da1032a0c",
|
||||
"parents": [
|
||||
{
|
||||
"id": "4ad91d3c1144c406e50c7b33bae684bd6837faf8"
|
||||
}
|
||||
],
|
||||
"tree": "46e82de44b1061621357f24c05515327f2795a95",
|
||||
"message": "add projects API",
|
||||
"author": {
|
||||
"name": "John Smith",
|
||||
"email": "john@example.com"
|
||||
},
|
||||
"committer": {
|
||||
"name": "John Smith",
|
||||
"email": "john@example.com"
|
||||
},
|
||||
"author_email": "john@example.com",
|
||||
"author_name": "John Smith",
|
||||
"authored_date": "2012-06-27T05:51:39-07:00",
|
||||
"committed_date": "2012-06-28T03:44:20-07:00"
|
||||
"committed_date": "2012-06-28T03:44:20-07:00",
|
||||
"committer_email": "john@example.com",
|
||||
"committer_name": "John Smith",
|
||||
"id": "7b5c3cc8be40ee161ae89a06bba6229da1032a0c",
|
||||
"message": "add projects API",
|
||||
"parent_ids": [
|
||||
"4ad91d3c1144c406e50c7b33bae684bd6837faf8"
|
||||
]
|
||||
},
|
||||
"name": "master",
|
||||
"protected": true
|
||||
}
|
||||
]
|
||||
@@ -56,27 +49,20 @@ Parameters:
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "master",
|
||||
"commit": {
|
||||
"id": "7b5c3cc8be40ee161ae89a06bba6229da1032a0c",
|
||||
"parents": [
|
||||
{
|
||||
"id": "4ad91d3c1144c406e50c7b33bae684bd6837faf8"
|
||||
}
|
||||
],
|
||||
"tree": "46e82de44b1061621357f24c05515327f2795a95",
|
||||
"message": "add projects API",
|
||||
"author": {
|
||||
"name": "John Smith",
|
||||
"email": "john@example.com"
|
||||
},
|
||||
"committer": {
|
||||
"name": "John Smith",
|
||||
"email": "john@example.com"
|
||||
},
|
||||
"author_email": "john@example.com",
|
||||
"author_name": "John Smith",
|
||||
"authored_date": "2012-06-27T05:51:39-07:00",
|
||||
"committed_date": "2012-06-28T03:44:20-07:00"
|
||||
"committed_date": "2012-06-28T03:44:20-07:00",
|
||||
"committer_email": "john@example.com",
|
||||
"committer_name": "John Smith",
|
||||
"id": "7b5c3cc8be40ee161ae89a06bba6229da1032a0c",
|
||||
"message": "add projects API",
|
||||
"parent_ids": [
|
||||
"4ad91d3c1144c406e50c7b33bae684bd6837faf8"
|
||||
]
|
||||
},
|
||||
"name": "master",
|
||||
"protected": true
|
||||
}
|
||||
```
|
||||
@@ -97,27 +83,20 @@ Parameters:
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "master",
|
||||
"commit": {
|
||||
"id": "7b5c3cc8be40ee161ae89a06bba6229da1032a0c",
|
||||
"parents": [
|
||||
{
|
||||
"id": "4ad91d3c1144c406e50c7b33bae684bd6837faf8"
|
||||
}
|
||||
],
|
||||
"tree": "46e82de44b1061621357f24c05515327f2795a95",
|
||||
"message": "add projects API",
|
||||
"author": {
|
||||
"name": "John Smith",
|
||||
"email": "john@example.com"
|
||||
},
|
||||
"committer": {
|
||||
"name": "John Smith",
|
||||
"email": "john@example.com"
|
||||
},
|
||||
"author_email": "john@example.com",
|
||||
"author_name": "John Smith",
|
||||
"authored_date": "2012-06-27T05:51:39-07:00",
|
||||
"committed_date": "2012-06-28T03:44:20-07:00"
|
||||
"committed_date": "2012-06-28T03:44:20-07:00",
|
||||
"committer_email": "john@example.com",
|
||||
"committer_name": "John Smith",
|
||||
"id": "7b5c3cc8be40ee161ae89a06bba6229da1032a0c",
|
||||
"message": "add projects API",
|
||||
"parent_ids": [
|
||||
"4ad91d3c1144c406e50c7b33bae684bd6837faf8"
|
||||
]
|
||||
},
|
||||
"name": "master",
|
||||
"protected": true
|
||||
}
|
||||
```
|
||||
@@ -138,27 +117,20 @@ Parameters:
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "master",
|
||||
"commit": {
|
||||
"id": "7b5c3cc8be40ee161ae89a06bba6229da1032a0c",
|
||||
"parents": [
|
||||
{
|
||||
"id": "4ad91d3c1144c406e50c7b33bae684bd6837faf8"
|
||||
}
|
||||
],
|
||||
"tree": "46e82de44b1061621357f24c05515327f2795a95",
|
||||
"message": "add projects API",
|
||||
"author": {
|
||||
"name": "John Smith",
|
||||
"email": "john@example.com"
|
||||
},
|
||||
"committer": {
|
||||
"name": "John Smith",
|
||||
"email": "john@example.com"
|
||||
},
|
||||
"author_email": "john@example.com",
|
||||
"author_name": "John Smith",
|
||||
"authored_date": "2012-06-27T05:51:39-07:00",
|
||||
"committed_date": "2012-06-28T03:44:20-07:00"
|
||||
"committed_date": "2012-06-28T03:44:20-07:00",
|
||||
"committer_email": "john@example.com",
|
||||
"committer_name": "John Smith",
|
||||
"id": "7b5c3cc8be40ee161ae89a06bba6229da1032a0c",
|
||||
"message": "add projects API",
|
||||
"parent_ids": [
|
||||
"4ad91d3c1144c406e50c7b33bae684bd6837faf8"
|
||||
]
|
||||
},
|
||||
"name": "master",
|
||||
"protected": false
|
||||
}
|
||||
```
|
||||
@@ -177,21 +149,20 @@ Parameters:
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "my-new-branch",
|
||||
"commit": {
|
||||
"id": "8848c0e90327a0b70f1865b843fb2fbfb9345e57",
|
||||
"message": "Merge pull request #54 from brightbox/use_fog_brightbox_module\n\nUpdate to use fog-brightbox module",
|
||||
"parent_ids": [
|
||||
"fff449e0bf453576f16c91d6544f00a2664009d8",
|
||||
"f93a93626fec20fd659f4ed3ab2e64019b6169ae"
|
||||
],
|
||||
"authored_date": "2014-02-20T19:54:55+02:00",
|
||||
"author_name": "john smith",
|
||||
"author_email": "john@example.com",
|
||||
"committed_date": "2014-02-20T19:54:55+02:00",
|
||||
"committer_name": "john smith",
|
||||
"committer_email": "john@example.com"
|
||||
"author_name": "John Smith",
|
||||
"authored_date": "2012-06-27T05:51:39-07:00",
|
||||
"committed_date": "2012-06-28T03:44:20-07:00",
|
||||
"committer_email": "john@example.com",
|
||||
"committer_name": "John Smith",
|
||||
"id": "7b5c3cc8be40ee161ae89a06bba6229da1032a0c",
|
||||
"message": "add projects API",
|
||||
"parent_ids": [
|
||||
"4ad91d3c1144c406e50c7b33bae684bd6837faf8"
|
||||
]
|
||||
},
|
||||
"name": "master",
|
||||
"protected": false
|
||||
}
|
||||
```
|
||||
|
||||
+7
-4
@@ -1,14 +1,17 @@
|
||||
# OAuth2 authentication
|
||||
# GitLab as an OAuth2 client
|
||||
|
||||
OAuth2 is a protocol that enables us to get access to private details of user's account without getting its password.
|
||||
This document is about using other OAuth authentication service providers to sign into GitLab.
|
||||
If you want GitLab to be an OAuth authentication service provider to sign into other services please see the [Oauth2 provider documentation](../integration/oauth_provider.md).
|
||||
|
||||
Before using the OAuth2 you should create an application in user's account. Each application getting unique App ID and App Secret parameters. You should not share them.
|
||||
OAuth2 is a protocol that enables us to authenticate a user without requiring them to give their password.
|
||||
|
||||
Before using the OAuth2 you should create an application in user's account. Each application gets a unique App ID and App Secret parameters. You should not share these.
|
||||
|
||||
This functionality is based on [doorkeeper gem](https://github.com/doorkeeper-gem/doorkeeper)
|
||||
|
||||
## Web Application Flow
|
||||
|
||||
This flow is using for authentication from third-party web sites and probably is most used.
|
||||
This flow is using for authentication from third-party web sites and is probably used the most.
|
||||
It basically consists of an exchange of an authorization token for an access token. For more detailed info, check out the [RFC spec here](http://tools.ietf.org/html/rfc6749#section-4.1)
|
||||
|
||||
This flow consists from 3 steps.
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
# What you should know about omnibus packages
|
||||
|
||||
Most users install GitLab using our omnibus packages. As a developer it can be
|
||||
good to know how the omnibus packages differ from what you have on your laptop
|
||||
when you are coding.
|
||||
|
||||
## Files are owned by root by default
|
||||
|
||||
All the files in the Rails tree (`app/`, `config/` etc.) are owned by 'root' in
|
||||
omnibus installations. This makes the installation simpler and it provides
|
||||
extra security. The omnibus reconfigure script contains commands that give
|
||||
write access to the 'git' user only where needed.
|
||||
|
||||
For example, the 'git' user is allowed to write in the `log/` directory, in
|
||||
`public/uploads`, and they are allowed to rewrite the `db/schema.rb` file.
|
||||
|
||||
In other cases, the reconfigure script tricks GitLab into not trying to write a
|
||||
file. For instance, GitLab will generate a `.secret` file if it cannot find one
|
||||
and write it to the Rails root. In the omnibus packages, reconfigure writes the
|
||||
`.secret` file first, so that GitLab never tries to write it.
|
||||
|
||||
## Code, data and logs are in separate directories
|
||||
|
||||
The omnibus design separates code (read-only, under `/opt/gitlab`) from data
|
||||
(read/write, under `/var/opt/gitlab`) and logs (read/write, under
|
||||
`/var/log/gitlab`). To make this happen the reconfigure script sets custom
|
||||
paths where it can in GitLab config files, and where there are no path
|
||||
settings, it uses symlinks.
|
||||
|
||||
For example, `config/gitlab.yml` is treated as data so that file is a symlink.
|
||||
The same goes for `public/uploads`. The `log/` directory is replaced by omnibus
|
||||
with a symlink to `/var/log/gitlab/gitlab-rails`.
|
||||
@@ -13,6 +13,8 @@ See the documentation below for details on how to configure these services.
|
||||
- [Kerberos](kerberos.md) Integrate with Kerberos
|
||||
- [OAuth2 provider](oauth_provider.md) OAuth2 application creation
|
||||
|
||||
GitLab Enterprise Edition contains [advanced JIRA support](http://doc.gitlab.com/ee/integration/jira.html) and [advanced Jenkins support](http://doc.gitlab.com/ee/integration/jenkins.html).
|
||||
|
||||
## Project services
|
||||
|
||||
Integration with services such as Campfire, Flowdock, Gemnasium, HipChat, Pivotal Tracker, and Slack are available in the form of a Project Service.
|
||||
|
||||
@@ -8,6 +8,8 @@ GitLab has a great issue tracker but you can also use an external issue tracker
|
||||
|
||||

|
||||
|
||||
GitLab Enterprise Edition contains [advanced JIRA support](http://doc.gitlab.com/ee/integration/jira.html).
|
||||
|
||||
## Configuration
|
||||
|
||||
### Project Service
|
||||
@@ -23,7 +25,6 @@ Fill in the required details on the page:
|
||||
* `issues_url` The URL to the issue in Redmine project that is linked to this GitLab project. Note that the `issues_url` requires `:id` in the url. This id is used by GitLab as a placeholder to replace the issue number.
|
||||
* `new_issue_url` This is the URL to create a new issue in Redmine for the project linked to this GitLab project.
|
||||
|
||||
|
||||
### Service Template
|
||||
|
||||
It is necessary to configure the external issue tracker per project, because project specific details are needed for the integration with GitLab.
|
||||
|
||||
@@ -35,7 +35,7 @@ To enable the GitHub OmniAuth provider you must register your application with G
|
||||
sudo -u git -H editor config/gitlab.yml
|
||||
```
|
||||
|
||||
1. See [Initial OmniAuth Configuration](README.md#initial-omniauth-configuration) for inital settings.
|
||||
1. See [Initial OmniAuth Configuration](omniauth.md#initial-omniauth-configuration) for inital settings.
|
||||
|
||||
1. Add the provider configuration:
|
||||
|
||||
|
||||
+16
-11
@@ -1,10 +1,13 @@
|
||||
# GitLab OAuth2 OmniAuth Provider
|
||||
# Integrate your server with GitLab.com
|
||||
|
||||
To enable the GitLab OmniAuth provider you must register your application with GitLab. GitLab will generate a client ID and secret key for you to use.
|
||||
Import projects from GitLab.com and login to your GitLab instance with your GitLab.com account.
|
||||
|
||||
1. Sign in to GitLab.
|
||||
To enable the GitLab.com OmniAuth provider you must register your application with GitLab.com.
|
||||
GitLab.com will generate a application ID and secret key for you to use.
|
||||
|
||||
1. Navigate to your settings.
|
||||
1. Sign in to GitLab.com
|
||||
|
||||
1. Navigate to your profile settings.
|
||||
|
||||
1. Select "Applications" in the left menu.
|
||||
|
||||
@@ -15,17 +18,17 @@ To enable the GitLab OmniAuth provider you must register your application with G
|
||||
- Redirect URI:
|
||||
|
||||
```
|
||||
http://gitlab.example.com/import/gitlab/callback
|
||||
http://gitlab.example.com/users/auth/gitlab/callback
|
||||
http://your-gitlab.example.com/import/gitlab/callback
|
||||
http://your-gitlab.example.com/users/auth/gitlab/callback
|
||||
```
|
||||
|
||||
The first link is required for the importer and second for the authorization.
|
||||
|
||||
1. Select "Submit".
|
||||
|
||||
1. You should now see a Application ID and Secret. Keep this page open as you continue configuration.
|
||||
|
||||
1. You should now see a Client ID and Client Secret near the top right of the page (see screenshot). Keep this page open as you continue configuration. 
|
||||
1. You should now see a Client ID and Client Secret near the top right of the page (see screenshot).
|
||||
Keep this page open as you continue configuration.
|
||||

|
||||
|
||||
1. On your GitLab server, open the configuration file.
|
||||
|
||||
@@ -43,7 +46,7 @@ To enable the GitLab OmniAuth provider you must register your application with G
|
||||
sudo -u git -H editor config/gitlab.yml
|
||||
```
|
||||
|
||||
1. See [Initial OmniAuth Configuration](README.md#initial-omniauth-configuration) for inital settings.
|
||||
1. See [Initial OmniAuth Configuration](omniauth.md#initial-omniauth-configuration) for inital settings.
|
||||
|
||||
1. Add the provider configuration:
|
||||
|
||||
@@ -76,4 +79,6 @@ To enable the GitLab OmniAuth provider you must register your application with G
|
||||
|
||||
1. Restart GitLab for the changes to take effect.
|
||||
|
||||
On the sign in page there should now be a GitLab icon below the regular sign in form. Click the icon to begin the authentication process. GitLab will ask the user to sign in and authorize the GitLab application. If everything goes well the user will be returned to your GitLab instance and will be signed in.
|
||||
On the sign in page there should now be a GitLab.com icon below the regular sign in form.
|
||||
Click the icon to begin the authentication process. GitLab.com will ask the user to sign in and authorize the GitLab application.
|
||||
If everything goes well the user will be returned to your GitLab instance and will be signed in.
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 54 KiB |
@@ -1,4 +1,8 @@
|
||||
## GitLab as OAuth2 provider
|
||||
## GitLab as OAuth2 authentication service provider
|
||||
|
||||
This document is about using GitLab as an OAuth authentication service provider to sign into other services.
|
||||
If you want to use other OAuth authentication service providers to sign into GitLab please see the [OAuth2 client documentation](../api/oauth2.md)
|
||||
|
||||
OAuth2 provides client applications a 'secure delegated access' to server resources on behalf of a resource owner. Or you can allow users to sign in to your application with their GitLab.com account.
|
||||
In fact OAuth allows to issue access token to third-party clients by an authorization server,
|
||||
with the approval of the resource owner, or end-user.
|
||||
|
||||
@@ -70,7 +70,7 @@ Now we can choose one or more of the Supported Providers below to continue confi
|
||||
## Supported Providers
|
||||
|
||||
- [GitHub](github.md)
|
||||
- [GitLab](gitlab.md)
|
||||
- [GitLab.com](gitlab.md)
|
||||
- [Google](google.md)
|
||||
- [Shibboleth](shibboleth.md)
|
||||
- [Twitter](twitter.md)
|
||||
|
||||
@@ -148,7 +148,7 @@ class Spinach::Features::Groups < Spinach::FeatureSteps
|
||||
end
|
||||
|
||||
step 'I should see new group "Owned" avatar' do
|
||||
Group.find_by(name: "Owned").avatar.should be_instance_of AvatarUploader
|
||||
Group.find_by(name: "Owned").avatar.should be_instance_of AttachmentUploader
|
||||
Group.find_by(name: "Owned").avatar.url.should == "/uploads/group/avatar/#{ Group.find_by(name:"Owned").id }/gitlab_logo.png"
|
||||
end
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ class Spinach::Features::Profile < Spinach::FeatureSteps
|
||||
end
|
||||
|
||||
step 'I should see new avatar' do
|
||||
@user.avatar.should be_instance_of AvatarUploader
|
||||
@user.avatar.should be_instance_of AttachmentUploader
|
||||
@user.avatar.url.should == "/uploads/user/avatar/#{ @user.id }/gitlab_logo.png"
|
||||
end
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@ class Spinach::Features::Project < Spinach::FeatureSteps
|
||||
end
|
||||
|
||||
step 'I should see new project avatar' do
|
||||
@project.avatar.should be_instance_of AvatarUploader
|
||||
@project.avatar.should be_instance_of AttachmentUploader
|
||||
url = @project.avatar.url
|
||||
url.should == "/uploads/project/avatar/#{ @project.id }/gitlab_logo.png"
|
||||
end
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
module Backup
|
||||
class Manager
|
||||
BACKUP_CONTENTS = %w{repositories/ db/ public/ uploads/ backup_information.yml}
|
||||
BACKUP_CONTENTS = %w{repositories/ db/ uploads/ backup_information.yml}
|
||||
|
||||
def pack
|
||||
# saving additional informations
|
||||
|
||||
+12
-28
@@ -1,45 +1,29 @@
|
||||
module Backup
|
||||
class Uploads
|
||||
attr_reader :app_public_uploads_dir, :app_private_uploads_dir, :backup_public_uploads_dir,
|
||||
:backup_private_uploads_dir, :backup_dir, :backup_public_dir
|
||||
attr_reader :app_uploads_dir, :backup_uploads_dir, :backup_dir
|
||||
|
||||
def initialize
|
||||
@app_public_uploads_dir = File.realpath(Rails.root.join('public', 'uploads'))
|
||||
@app_private_uploads_dir = File.realpath(Rails.root.join('uploads'))
|
||||
@app_uploads_dir = File.realpath(Rails.root.join('public', 'uploads'))
|
||||
@backup_dir = Gitlab.config.backup.path
|
||||
@backup_public_dir = File.join(backup_dir, 'public')
|
||||
@backup_public_uploads_dir = File.join(backup_dir, 'public', 'uploads')
|
||||
@backup_private_uploads_dir = File.join(backup_dir, 'uploads')
|
||||
@backup_uploads_dir = File.join(Gitlab.config.backup.path, 'uploads')
|
||||
end
|
||||
|
||||
# Copy uploads from public/uploads to backup/public/uploads and from /uploads to backup/uploads
|
||||
# Copy uploads from public/uploads to backup/uploads
|
||||
def dump
|
||||
FileUtils.mkdir_p(backup_public_uploads_dir)
|
||||
FileUtils.cp_r(app_public_uploads_dir, backup_public_dir)
|
||||
|
||||
FileUtils.mkdir_p(backup_private_uploads_dir)
|
||||
FileUtils.cp_r(app_private_uploads_dir, backup_dir)
|
||||
FileUtils.mkdir_p(backup_uploads_dir)
|
||||
FileUtils.cp_r(app_uploads_dir, backup_dir)
|
||||
end
|
||||
|
||||
def restore
|
||||
backup_existing_public_uploads_dir
|
||||
backup_existing_private_uploads_dir
|
||||
backup_existing_uploads_dir
|
||||
|
||||
FileUtils.cp_r(backup_public_uploads_dir, app_public_uploads_dir)
|
||||
FileUtils.cp_r(backup_private_uploads_dir, app_private_uploads_dir)
|
||||
FileUtils.cp_r(backup_uploads_dir, app_uploads_dir)
|
||||
end
|
||||
|
||||
def backup_existing_public_uploads_dir
|
||||
timestamped_public_uploads_path = File.join(app_public_uploads_dir, '..', "uploads.#{Time.now.to_i}")
|
||||
if File.exists?(app_public_uploads_dir)
|
||||
FileUtils.mv(app_public_uploads_dir, timestamped_public_uploads_path)
|
||||
end
|
||||
end
|
||||
|
||||
def backup_existing_private_uploads_dir
|
||||
timestamped_private_uploads_path = File.join(app_private_uploads_dir, '..', "uploads.#{Time.now.to_i}")
|
||||
if File.exists?(app_private_uploads_dir)
|
||||
FileUtils.mv(app_private_uploads_dir, timestamped_private_uploads_path)
|
||||
def backup_existing_uploads_dir
|
||||
timestamped_uploads_path = File.join(app_uploads_dir, '..', "uploads.#{Time.now.to_i}")
|
||||
if File.exists?(app_uploads_dir)
|
||||
FileUtils.mv(app_uploads_dir, timestamped_uploads_path)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user