summaryrefslogtreecommitdiffstats
path: root/src/main/java/com/gitblit/manager/IFederationManager.java
blob: df271749e4ed6217bc0a366a5bf74d3d43f44abc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
/*
 * Copyright 2013 gitblit.com.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.gitblit.manager;

import java.io.File;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import com.gitblit.Constants.FederationRequest;
import com.gitblit.Constants.FederationToken;
import com.gitblit.models.FederationModel;
import com.gitblit.models.FederationProposal;
import com.gitblit.models.FederationSet;
import com.gitblit.models.RepositoryModel;
import com.gitblit.models.UserModel;

public interface IFederationManager extends IManager {

	/**
	 * Returns the path of the proposals folder. This method checks to see if
	 * Gitblit is running on a cloud service and may return an adjusted path.
	 *
	 * @return the proposals folder path
	 * @since 1.4.0
	 */
	File getProposalsFolder();

	boolean canFederate();

	/**
	 * Returns the federation user account.
	 *
	 * @return the federation user account
	 * @since 1.4.0
	 */
	UserModel getFederationUser();

	/**
	 * Try to authenticate request as the Federation user.
	 *
	 * @param httpRequest
	 * @return the federation user, if authenticated
	 * @since 1.4.0
	 */
	UserModel authenticate(HttpServletRequest httpRequest);

	/**
	 * Returns the list of federated gitblit instances that this instance will
	 * try to pull.
	 *
	 * @return list of registered gitblit instances
	 * @since 1.4.0
	 */
	List<FederationModel> getFederationRegistrations();

	/**
	 * Retrieve the specified federation registration.
	 *
	 * @param name
	 *            the name of the registration
	 * @return a federation registration
	 * @since 1.4.0
	 */
	FederationModel getFederationRegistration(String url, String name);

	/**
	 * Returns the list of federation sets.
	 *
	 * @return list of federation sets
	 * @since 1.4.0
	 */
	List<FederationSet> getFederationSets(String gitblitUrl);

	/**
	 * Returns the list of possible federation tokens for this Gitblit instance.
	 *
	 * @return list of federation tokens
	 * @since 1.4.0
	 */
	List<String> getFederationTokens();

	/**
	 * Returns the specified federation token for this Gitblit instance.
	 *
	 * @param type
	 * @return a federation token
	 * @since 1.4.0
	 */
	String getFederationToken(FederationToken type);

	/**
	 * Returns the specified federation token for this Gitblit instance.
	 *
	 * @param value
	 * @return a federation token
	 * @since 1.4.0
	 */
	String getFederationToken(String value);

	/**
	 * Compares the provided token with this Gitblit instance's tokens and
	 * determines if the requested permission may be granted to the token.
	 *
	 * @param req
	 * @param token
	 * @return true if the request can be executed
	 * @since 1.4.0
	 */
	boolean validateFederationRequest(FederationRequest req, String token);

	/**
	 * Acknowledge and cache the status of a remote Gitblit instance.
	 *
	 * @param identification
	 *            the identification of the pulling Gitblit instance
	 * @param registration
	 *            the registration from the pulling Gitblit instance
	 * @return true if acknowledged
	 * @since 1.4.0
	 */
	boolean acknowledgeFederationStatus(String identification, FederationModel registration);

	/**
	 * Returns the list of registration results.
	 *
	 * @return the list of registration results
	 * @since 1.4.0
	 */
	List<FederationModel> getFederationResultRegistrations();

	/**
	 * Submit a federation proposal. The proposal is cached locally and the
	 * Gitblit administrator(s) are notified via email.
	 *
	 * @param proposal
	 *            the proposal
	 * @param gitblitUrl
	 *            the url of your gitblit instance to send an email to
	 *            administrators
	 * @return true if the proposal was submitted
	 * @since 1.4.0
	 */
	boolean submitFederationProposal(FederationProposal proposal, String gitblitUrl);

	/**
	 * Returns the list of pending federation proposals
	 *
	 * @return list of federation proposals
	 * @since 1.4.0
	 */
	List<FederationProposal> getPendingFederationProposals();

	/**
	 * Get repositories for the specified token.
	 *
	 * @param gitblitUrl
	 *            the base url of this gitblit instance
	 * @param token
	 *            the federation token
	 * @return a map of <cloneurl, RepositoryModel>
	 * @since 1.4.0
	 */
	Map<String, RepositoryModel> getRepositories(String gitblitUrl, String token);

	/**
	 * Creates a proposal from the token.
	 *
	 * @param gitblitUrl
	 *            the url of this Gitblit instance
	 * @param token
	 * @return a potential proposal
	 * @since 1.4.0
	 */
	FederationProposal createFederationProposal(String gitblitUrl, String token);

	/**
	 * Returns the proposal identified by the supplied token.
	 *
	 * @param token
	 * @return the specified proposal or null
	 * @since 1.4.0
	 */
	FederationProposal getPendingFederationProposal(String token);

	/**
	 * Deletes a pending federation proposal.
	 *
	 * @param a
	 *            proposal
	 * @return true if the proposal was deleted
	 * @since 1.4.0
	 */
	boolean deletePendingFederationProposal(FederationProposal proposal);

}