| | |
| | | import com.gitblit.models.FederationProposal;
|
| | | import com.gitblit.models.FederationSet;
|
| | | import com.gitblit.models.Metric;
|
| | | import com.gitblit.models.ObjectCache;
|
| | | import com.gitblit.models.RepositoryModel;
|
| | | import com.gitblit.models.ServerSettings;
|
| | | import com.gitblit.models.ServerStatus;
|
| | |
| | | import com.gitblit.utils.JGitUtils;
|
| | | import com.gitblit.utils.JsonUtils;
|
| | | import com.gitblit.utils.MetricUtils;
|
| | | import com.gitblit.utils.ObjectCache;
|
| | | import com.gitblit.utils.StringUtils;
|
| | |
|
| | | /**
|
| | |
| | | */
|
| | | public static boolean isDebugMode() {
|
| | | return self().settings.getBoolean(Keys.web.debugMode, false);
|
| | | }
|
| | |
|
| | | /**
|
| | | * Returns the file object for the specified configuration key.
|
| | | * |
| | | * @return the file
|
| | | */
|
| | | public static File getFileOrFolder(String key, String defaultFileOrFolder) {
|
| | | String fileOrFolder = GitBlit.getString(key, defaultFileOrFolder);
|
| | | return getFileOrFolder(fileOrFolder);
|
| | | }
|
| | |
|
| | | /**
|
| | | * Returns the file object which may have it's base-path determined by
|
| | | * environment variables for running on a cloud hosting service. All Gitblit
|
| | | * file or folder retrievals are (at least initially) funneled through this
|
| | | * method so it is the correct point to globally override/alter filesystem
|
| | | * access based on environment or some other indicator.
|
| | | * |
| | | * @return the file
|
| | | */
|
| | | public static File getFileOrFolder(String fileOrFolder) {
|
| | | String openShift = System.getenv("OPENSHIFT_DATA_DIR");
|
| | | if (!StringUtils.isEmpty(openShift)) {
|
| | | // running on RedHat OpenShift
|
| | | return new File(openShift, fileOrFolder);
|
| | | }
|
| | | return new File(fileOrFolder);
|
| | | }
|
| | |
|
| | | /**
|
| | | * Returns the path of the repositories folder. This method checks to see if
|
| | | * Gitblit is running on a cloud service and may return an adjusted path.
|
| | | * |
| | | * @return the repositories folder path
|
| | | */
|
| | | public static File getRepositoriesFolder() {
|
| | | return getFileOrFolder(Keys.git.repositoriesFolder, "git");
|
| | | }
|
| | |
|
| | | /**
|
| | | * 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
|
| | | */
|
| | | public static File getProposalsFolder() {
|
| | | return getFileOrFolder(Keys.federation.proposalsFolder, "proposals");
|
| | | }
|
| | |
|
| | | /**
|
| | |
| | | return null;
|
| | | }
|
| | | if (model.accessRestriction.atLeast(AccessRestrictionType.VIEW)) {
|
| | | if (user != null && user.canAccessRepository(model.name)) {
|
| | | if (user != null && user.canAccessRepository(model)) {
|
| | | return model;
|
| | | }
|
| | | return null;
|
| | |
| | |
|
| | | try {
|
| | | // make the proposals folder
|
| | | File proposalsFolder = new File(getString(Keys.federation.proposalsFolder, "proposals")
|
| | | .trim());
|
| | | File proposalsFolder = getProposalsFolder();
|
| | | proposalsFolder.mkdirs();
|
| | |
|
| | | // cache json to a file
|
| | |
| | | */
|
| | | public List<FederationProposal> getPendingFederationProposals() {
|
| | | List<FederationProposal> list = new ArrayList<FederationProposal>();
|
| | | File folder = new File(getString(Keys.federation.proposalsFolder, "proposals").trim());
|
| | | File folder = getProposalsFolder();
|
| | | if (folder.exists()) {
|
| | | File[] files = folder.listFiles(new FileFilter() {
|
| | | @Override
|
| | |
| | | * @return true if the proposal was deleted
|
| | | */
|
| | | public boolean deletePendingFederationProposal(FederationProposal proposal) {
|
| | | File folder = new File(getString(Keys.federation.proposalsFolder, "proposals").trim());
|
| | | File folder = getProposalsFolder();
|
| | | File file = new File(folder, proposal.token + Constants.PROPOSAL_EXT);
|
| | | return file.delete();
|
| | | }
|
| | |
| | | */
|
| | | public ServerSettings getSettingsModel() {
|
| | | // ensure that the current values are updated in the setting models
|
| | | settingsModel.updateCurrentValues(settings);
|
| | | for (String key : settings.getAllKeys(null)) {
|
| | | SettingModel setting = settingsModel.get(key);
|
| | | if (setting != null) {
|
| | | setting.currentValue = settings.getString(key, "");
|
| | | }
|
| | | }
|
| | | return settingsModel;
|
| | | }
|
| | |
|
| | |
| | | *
|
| | | * @param settings
|
| | | */
|
| | | @SuppressWarnings("deprecation")
|
| | | public void configureContext(IStoredSettings settings, boolean startFederation) {
|
| | | logger.info("Reading configuration from " + settings.toString());
|
| | | this.settings = settings;
|
| | | repositoriesFolder = new File(settings.getString(Keys.git.repositoriesFolder, "git"));
|
| | | repositoriesFolder = getRepositoriesFolder();
|
| | | logger.info("Git repositories folder " + repositoriesFolder.getAbsolutePath());
|
| | | repositoryResolver = new FileResolver<Void>(repositoriesFolder, exportAll);
|
| | | serverStatus = new ServerStatus(isGO());
|
| | |
| | | } catch (Throwable t) {
|
| | | // not a login service class or class could not be instantiated.
|
| | | // try to use default file login service
|
| | | File realmFile = new File(realm);
|
| | | if (!realmFile.exists()) {
|
| | | File realmFile = getFileOrFolder(Keys.realm.userService, "users.conf");
|
| | | if (realmFile.exists()) {
|
| | | // load the existing realm file
|
| | | if (realmFile.getName().toLowerCase().endsWith(".properties")) {
|
| | | // load the v0.5.0 - v0.7.0 properties-based realm file
|
| | | loginService = new FileUserService(realmFile);
|
| | |
|
| | | // automatically create a users.conf realm file from the
|
| | | // original users.properties file
|
| | | File usersConfig = new File(realmFile.getParentFile(), "users.conf");
|
| | | if (!usersConfig.exists()) {
|
| | | logger.info(MessageFormat.format("Automatically creating {0} based on {1}",
|
| | | usersConfig.getAbsolutePath(), realmFile.getAbsolutePath()));
|
| | | ConfigUserService configService = new ConfigUserService(usersConfig);
|
| | | for (String username : loginService.getAllUsernames()) {
|
| | | UserModel userModel = loginService.getUserModel(username);
|
| | | configService.updateUserModel(userModel);
|
| | | }
|
| | | }
|
| | | |
| | | // issue suggestion about switching to users.conf
|
| | | logger.warn("Please consider using \"users.conf\" instead of the deprecated \"users.properties\" file");
|
| | | } else if (realmFile.getName().toLowerCase().endsWith(".conf")) {
|
| | | // load the config-based realm file
|
| | | loginService = new ConfigUserService(realmFile);
|
| | | }
|
| | | } else {
|
| | | // Create a new realm file and add the default admin
|
| | | // account. This is necessary for bootstrapping a dynamic
|
| | | // environment like running on a cloud service.
|
| | | // As of v0.8.0 the default realm file is ConfigUserService.
|
| | | try {
|
| | | realmFile = getFileOrFolder(Keys.realm.userService, "users.conf");
|
| | | realmFile.createNewFile();
|
| | | loginService = new ConfigUserService(realmFile);
|
| | | UserModel admin = new UserModel("admin");
|
| | | admin.password = "admin";
|
| | | admin.canAdmin = true;
|
| | | admin.excludeFromFederation = true;
|
| | | loginService.updateUserModel(admin);
|
| | | } catch (IOException x) {
|
| | | logger.error(
|
| | | MessageFormat.format("COULD NOT CREATE REALM FILE {0}!", realmFile), x);
|
| | | }
|
| | | }
|
| | | loginService = new FileUserService(realmFile);
|
| | | }
|
| | | setUserService(loginService);
|
| | | mailExecutor = new MailExecutor(settings);
|
| | |
| | | @Override
|
| | | public void contextInitialized(ServletContextEvent contextEvent) {
|
| | | servletContext = contextEvent.getServletContext();
|
| | | settingsModel = loadSettingModels(); |
| | | settingsModel = loadSettingModels();
|
| | | if (settings == null) {
|
| | | // Gitblit WAR is running in a servlet container
|
| | | WebXmlSettings webxmlSettings = new WebXmlSettings(contextEvent.getServletContext());
|
| | | ServletContext context = contextEvent.getServletContext();
|
| | | WebXmlSettings webxmlSettings = new WebXmlSettings(context);
|
| | |
|
| | | // 0.7.0 web.properties in the deployed war folder
|
| | | File overrideFile = new File(context.getRealPath("/WEB-INF/web.properties"));
|
| | | if (overrideFile.exists()) {
|
| | | webxmlSettings.applyOverrides(overrideFile);
|
| | | }
|
| | |
|
| | | // 0.8.0 gitblit.properties file located outside the deployed war
|
| | | // folder lie, for example, on RedHat OpenShift.
|
| | | overrideFile = getFileOrFolder("gitblit.properties");
|
| | | if (!overrideFile.getPath().equals("gitblit.properties")) {
|
| | | webxmlSettings.applyOverrides(overrideFile);
|
| | | }
|
| | | configureContext(webxmlSettings, true);
|
| | | }
|
| | | |
| | |
|
| | | serverStatus.servletContainer = servletContext.getServerInfo();
|
| | | }
|
| | |
|