Search in sources :

Example 56 with TeamModel

use of com.gitblit.models.TeamModel in project gitblit by gitblit.

the class EditUserPage method setupPage.

protected void setupPage(final UserModel userModel) {
    if (isCreate) {
        super.setupPage(getString("gb.newUser"), "");
    } else {
        super.setupPage(getString("gb.edit"), userModel.username);
    }
    final Model<String> confirmPassword = new Model<String>(StringUtils.isEmpty(userModel.password) ? "" : userModel.password);
    CompoundPropertyModel<UserModel> model = new CompoundPropertyModel<UserModel>(userModel);
    // build list of projects including all repositories wildcards
    List<String> repos = getAccessRestrictedRepositoryList(true, userModel);
    List<String> userTeams = new ArrayList<String>();
    for (TeamModel team : userModel.teams) {
        userTeams.add(team.name);
    }
    Collections.sort(userTeams);
    final String oldName = userModel.username;
    final List<RegistrantAccessPermission> permissions = app().repositories().getUserAccessPermissions(userModel);
    final Palette<String> teams = new Palette<String>("teams", new ListModel<String>(new ArrayList<String>(userTeams)), new CollectionModel<String>(app().users().getAllTeamNames()), new StringChoiceRenderer(), 10, false);
    Locale locale = userModel.getPreferences().getLocale();
    if (locale == null) {
        locale = Locale.ENGLISH;
    }
    List<Language> languages = UserPage.getLanguages();
    Language preferredLanguage = null;
    if (locale != null) {
        String localeCode = locale.getLanguage();
        if (!StringUtils.isEmpty(locale.getCountry())) {
            localeCode += "_" + locale.getCountry();
        }
        for (Language lang : languages) {
            if (lang.code.equals(localeCode)) {
                // language_COUNTRY match
                preferredLanguage = lang;
            } else if (preferredLanguage != null && lang.code.startsWith(locale.getLanguage())) {
                // language match
                preferredLanguage = lang;
            }
        }
    }
    final IModel<Language> language = Model.of(preferredLanguage);
    Form<UserModel> form = new Form<UserModel>("editForm", model) {

        private static final long serialVersionUID = 1L;

        /*
			 * (non-Javadoc)
			 *
			 * @see org.apache.wicket.markup.html.form.Form#onSubmit()
			 */
        @Override
        protected void onSubmit() {
            if (StringUtils.isEmpty(userModel.username)) {
                error(getString("gb.pleaseSetUsername"));
                return;
            }
            Language lang = language.getObject();
            if (lang != null) {
                userModel.getPreferences().setLocale(lang.code);
            }
            // force username to lower-case
            userModel.username = userModel.username.toLowerCase();
            String username = userModel.username;
            if (isCreate) {
                UserModel model = app().users().getUserModel(username);
                if (model != null) {
                    error(MessageFormat.format(getString("gb.usernameUnavailable"), username));
                    return;
                }
            }
            boolean rename = !StringUtils.isEmpty(oldName) && !oldName.equalsIgnoreCase(username);
            if (app().authentication().supportsCredentialChanges(userModel)) {
                if (!userModel.password.equals(confirmPassword.getObject())) {
                    error(getString("gb.passwordsDoNotMatch"));
                    return;
                }
                String password = userModel.password;
                if (!password.toUpperCase().startsWith(StringUtils.MD5_TYPE) && !password.toUpperCase().startsWith(StringUtils.COMBINED_MD5_TYPE)) {
                    // This is a plain text password.
                    // Check length.
                    int minLength = app().settings().getInteger(Keys.realm.minPasswordLength, 5);
                    if (minLength < 4) {
                        minLength = 4;
                    }
                    if (password.trim().length() < minLength) {
                        error(MessageFormat.format(getString("gb.passwordTooShort"), minLength));
                        return;
                    }
                    // change the cookie
                    userModel.cookie = userModel.createCookie();
                    // Optionally store the password MD5 digest.
                    String type = app().settings().getString(Keys.realm.passwordStorage, "md5");
                    if (type.equalsIgnoreCase("md5")) {
                        // store MD5 digest of password
                        userModel.password = StringUtils.MD5_TYPE + StringUtils.getMD5(userModel.password);
                    } else if (type.equalsIgnoreCase("combined-md5")) {
                        // store MD5 digest of username+password
                        userModel.password = StringUtils.COMBINED_MD5_TYPE + StringUtils.getMD5(username + userModel.password);
                    }
                } else if (rename && password.toUpperCase().startsWith(StringUtils.COMBINED_MD5_TYPE)) {
                    error(getString("gb.combinedMd5Rename"));
                    return;
                }
            }
            // update user permissions
            for (RegistrantAccessPermission repositoryPermission : permissions) {
                if (repositoryPermission.mutable) {
                    userModel.setRepositoryPermission(repositoryPermission.registrant, repositoryPermission.permission);
                }
            }
            Iterator<String> selectedTeams = teams.getSelectedChoices();
            userModel.teams.clear();
            while (selectedTeams.hasNext()) {
                TeamModel team = app().users().getTeamModel(selectedTeams.next());
                if (team == null) {
                    continue;
                }
                userModel.teams.add(team);
            }
            try {
                if (isCreate) {
                    app().gitblit().addUser(userModel);
                } else {
                    app().gitblit().reviseUser(oldName, userModel);
                }
            } catch (GitBlitException e) {
                error(e.getMessage());
                return;
            }
            setRedirect(false);
            if (isCreate) {
                // create another user
                info(MessageFormat.format(getString("gb.userCreated"), userModel.username));
                setResponsePage(EditUserPage.class);
            } else {
                // back to users page
                setResponsePage(UsersPage.class);
            }
        }
    };
    // do not let the browser pre-populate these fields
    form.add(new SimpleAttributeModifier("autocomplete", "off"));
    // not all user providers support manipulating username and password
    boolean editCredentials = app().authentication().supportsCredentialChanges(userModel);
    // not all user providers support manipulating display name
    boolean editDisplayName = app().authentication().supportsDisplayNameChanges(userModel);
    // not all user providers support manipulating email address
    boolean editEmailAddress = app().authentication().supportsEmailAddressChanges(userModel);
    // not all user providers support manipulating team memberships
    boolean editTeams = app().authentication().supportsTeamMembershipChanges(userModel);
    // not all user providers support manipulating the admin role
    boolean changeAdminRole = app().authentication().supportsRoleChanges(userModel, Role.ADMIN);
    // not all user providers support manipulating the create role
    boolean changeCreateRole = app().authentication().supportsRoleChanges(userModel, Role.CREATE);
    // not all user providers support manipulating the fork role
    boolean changeForkRole = app().authentication().supportsRoleChanges(userModel, Role.FORK);
    // field names reflective match UserModel fields
    form.add(new TextField<String>("username").setEnabled(editCredentials));
    NonTrimmedPasswordTextField passwordField = new NonTrimmedPasswordTextField("password");
    passwordField.setResetPassword(false);
    form.add(passwordField.setEnabled(editCredentials));
    NonTrimmedPasswordTextField confirmPasswordField = new NonTrimmedPasswordTextField("confirmPassword", confirmPassword);
    confirmPasswordField.setResetPassword(false);
    form.add(confirmPasswordField.setEnabled(editCredentials));
    form.add(new TextField<String>("displayName").setEnabled(editDisplayName));
    form.add(new TextField<String>("emailAddress").setEnabled(editEmailAddress));
    DropDownChoice<Language> choice = new DropDownChoice<Language>("language", language, languages);
    form.add(choice.setEnabled(languages.size() > 0));
    if (userModel.canAdmin() && !userModel.canAdmin) {
        // user inherits Admin permission
        // display a disabled-yet-checked checkbox
        form.add(new CheckBox("canAdmin", Model.of(true)).setEnabled(false));
    } else {
        form.add(new CheckBox("canAdmin").setEnabled(changeAdminRole));
    }
    if (userModel.canFork() && !userModel.canFork) {
        // user inherits Fork permission
        // display a disabled-yet-checked checkbox
        form.add(new CheckBox("canFork", Model.of(true)).setEnabled(false));
    } else {
        final boolean forkingAllowed = app().settings().getBoolean(Keys.web.allowForking, true);
        form.add(new CheckBox("canFork").setEnabled(forkingAllowed && changeForkRole));
    }
    if (userModel.canCreate() && !userModel.canCreate) {
        // user inherits Create permission
        // display a disabled-yet-checked checkbox
        form.add(new CheckBox("canCreate", Model.of(true)).setEnabled(false));
    } else {
        form.add(new CheckBox("canCreate").setEnabled(changeCreateRole));
    }
    form.add(new CheckBox("excludeFromFederation"));
    form.add(new CheckBox("disabled"));
    form.add(new RegistrantPermissionsPanel("repositories", RegistrantType.REPOSITORY, repos, permissions, getAccessPermissions()));
    form.add(teams.setEnabled(editTeams));
    form.add(new TextField<String>("organizationalUnit").setEnabled(editDisplayName));
    form.add(new TextField<String>("organization").setEnabled(editDisplayName));
    form.add(new TextField<String>("locality").setEnabled(editDisplayName));
    form.add(new TextField<String>("stateProvince").setEnabled(editDisplayName));
    form.add(new TextField<String>("countryCode").setEnabled(editDisplayName));
    form.add(new Button("save"));
    Button cancel = new Button("cancel") {

        private static final long serialVersionUID = 1L;

        @Override
        public void onSubmit() {
            setResponsePage(UsersPage.class);
        }
    };
    cancel.setDefaultFormProcessing(false);
    form.add(cancel);
    add(form);
}
Also used : Locale(java.util.Locale) Palette(org.apache.wicket.extensions.markup.html.form.palette.Palette) Form(org.apache.wicket.markup.html.form.Form) RegistrantPermissionsPanel(com.gitblit.wicket.panels.RegistrantPermissionsPanel) ArrayList(java.util.ArrayList) GitBlitException(com.gitblit.GitBlitException) SimpleAttributeModifier(org.apache.wicket.behavior.SimpleAttributeModifier) UserModel(com.gitblit.models.UserModel) TeamModel(com.gitblit.models.TeamModel) Button(org.apache.wicket.markup.html.form.Button) RegistrantAccessPermission(com.gitblit.models.RegistrantAccessPermission) TextField(org.apache.wicket.markup.html.form.TextField) NonTrimmedPasswordTextField(com.gitblit.wicket.NonTrimmedPasswordTextField) CompoundPropertyModel(org.apache.wicket.model.CompoundPropertyModel) NonTrimmedPasswordTextField(com.gitblit.wicket.NonTrimmedPasswordTextField) DropDownChoice(org.apache.wicket.markup.html.form.DropDownChoice) StringChoiceRenderer(com.gitblit.wicket.StringChoiceRenderer) CheckBox(org.apache.wicket.markup.html.form.CheckBox) CompoundPropertyModel(org.apache.wicket.model.CompoundPropertyModel) IModel(org.apache.wicket.model.IModel) CollectionModel(org.apache.wicket.model.util.CollectionModel) ListModel(org.apache.wicket.model.util.ListModel) Model(org.apache.wicket.model.Model) UserModel(com.gitblit.models.UserModel) TeamModel(com.gitblit.models.TeamModel)

Example 57 with TeamModel

use of com.gitblit.models.TeamModel in project gitblit by gitblit.

the class TeamsPanel method createTeam.

/**
	 * Displays the create team dialog and fires a SwingWorker to update the
	 * server, if appropriate.
	 *
	 */
protected void createTeam() {
    EditTeamDialog dialog = new EditTeamDialog(gitblit.getProtocolVersion(), gitblit.getSettings());
    dialog.setLocationRelativeTo(TeamsPanel.this);
    dialog.setTeams(gitblit.getTeams());
    dialog.setRepositories(gitblit.getRepositories(), null);
    dialog.setUsers(gitblit.getUsernames(), null);
    dialog.setPreReceiveScripts(gitblit.getPreReceiveScriptsUnused(null), gitblit.getPreReceiveScriptsInherited(null), null);
    dialog.setPostReceiveScripts(gitblit.getPostReceiveScriptsUnused(null), gitblit.getPostReceiveScriptsInherited(null), null);
    dialog.setVisible(true);
    final TeamModel newTeam = dialog.getTeam();
    if (newTeam == null) {
        return;
    }
    GitblitWorker worker = new GitblitWorker(this, RpcRequest.CREATE_TEAM) {

        @Override
        protected Boolean doRequest() throws IOException {
            boolean success = gitblit.createTeam(newTeam);
            if (success) {
                gitblit.refreshTeams();
                gitblit.refreshUsers();
            }
            return success;
        }

        @Override
        protected void onSuccess() {
            updateTable(false);
            updateUsersTable();
        }

        @Override
        protected void onFailure() {
            showFailure("Failed to execute request \"{0}\" for team \"{1}\".", getRequestType(), newTeam.name);
        }
    };
    worker.execute();
}
Also used : TeamModel(com.gitblit.models.TeamModel)

Example 58 with TeamModel

use of com.gitblit.models.TeamModel in project gitblit by gitblit.

the class TeamsTableModel method getValueAt.

@Override
public Object getValueAt(int rowIndex, int columnIndex) {
    TeamModel model = list.get(rowIndex);
    Columns col = Columns.values()[columnIndex];
    switch(col) {
        case Name:
            return model.name;
        case Members:
            return model.users.size() == 0 ? "" : String.valueOf(model.users.size());
        case Repositories:
            return model.repositories.size() == 0 ? "" : String.valueOf(model.repositories.size());
    }
    return null;
}
Also used : TeamModel(com.gitblit.models.TeamModel)

Example 59 with TeamModel

use of com.gitblit.models.TeamModel in project gitblit by gitblit.

the class RootPage method getRepositoryFilterItems.

protected List<com.gitblit.models.Menu.MenuItem> getRepositoryFilterItems(PageParameters params) {
    final UserModel user = GitBlitWebSession.get().getUser();
    Set<MenuItem> filters = new LinkedHashSet<MenuItem>();
    List<RepositoryModel> repositories = getRepositoryModels();
    // accessible repositories by federation set
    Map<String, AtomicInteger> setMap = new HashMap<String, AtomicInteger>();
    for (RepositoryModel repository : repositories) {
        for (String set : repository.federationSets) {
            String key = set.toLowerCase();
            if (setMap.containsKey(key)) {
                setMap.get(key).incrementAndGet();
            } else {
                setMap.put(key, new AtomicInteger(1));
            }
        }
    }
    if (setMap.size() > 0) {
        List<String> sets = new ArrayList<String>(setMap.keySet());
        Collections.sort(sets);
        for (String set : sets) {
            filters.add(new ToggleMenuItem(MessageFormat.format("{0} ({1})", set, setMap.get(set).get()), "set", set, params));
        }
        // divider
        filters.add(new MenuDivider());
    }
    // user's team memberships
    if (user != null && user.teams.size() > 0) {
        List<TeamModel> teams = new ArrayList<TeamModel>(user.teams);
        Collections.sort(teams);
        for (TeamModel team : teams) {
            filters.add(new ToggleMenuItem(MessageFormat.format("{0} ({1})", team.name, team.repositories.size()), "team", team.name, params));
        }
        // divider
        filters.add(new MenuDivider());
    }
    // custom filters
    String customFilters = app().settings().getString(Keys.web.customFilters, null);
    if (!StringUtils.isEmpty(customFilters)) {
        boolean addedExpression = false;
        List<String> expressions = StringUtils.getStringsFromValue(customFilters, "!!!");
        for (String expression : expressions) {
            if (!StringUtils.isEmpty(expression)) {
                addedExpression = true;
                filters.add(new ToggleMenuItem(null, "x", expression, params));
            }
        }
        // if we added any custom expressions, add a divider
        if (addedExpression) {
            filters.add(new MenuDivider());
        }
    }
    return new ArrayList<MenuItem>(filters);
}
Also used : LinkedHashSet(java.util.LinkedHashSet) ToggleMenuItem(com.gitblit.models.Menu.ToggleMenuItem) MenuDivider(com.gitblit.models.Menu.MenuDivider) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) PageLinkMenuItem(com.gitblit.models.Menu.PageLinkMenuItem) ParameterMenuItem(com.gitblit.models.Menu.ParameterMenuItem) ExternalLinkMenuItem(com.gitblit.models.Menu.ExternalLinkMenuItem) MenuItem(com.gitblit.models.Menu.MenuItem) ToggleMenuItem(com.gitblit.models.Menu.ToggleMenuItem) RepositoryModel(com.gitblit.models.RepositoryModel) UserModel(com.gitblit.models.UserModel) TeamModel(com.gitblit.models.TeamModel) AtomicInteger(java.util.concurrent.atomic.AtomicInteger)

Example 60 with TeamModel

use of com.gitblit.models.TeamModel in project gitblit by gitblit.

the class RootPage method getRepositories.

protected List<RepositoryModel> getRepositories(PageParameters params) {
    if (params == null) {
        return getRepositoryModels();
    }
    boolean hasParameter = false;
    String projectName = WicketUtils.getProjectName(params);
    String userName = WicketUtils.getUsername(params);
    if (StringUtils.isEmpty(projectName)) {
        if (!StringUtils.isEmpty(userName)) {
            projectName = ModelUtils.getPersonalPath(userName);
        }
    }
    String repositoryName = WicketUtils.getRepositoryName(params);
    String set = WicketUtils.getSet(params);
    String regex = WicketUtils.getRegEx(params);
    String team = WicketUtils.getTeam(params);
    int daysBack = params.getInt("db", 0);
    int maxDaysBack = app().settings().getInteger(Keys.web.activityDurationMaximum, 30);
    List<RepositoryModel> availableModels = getRepositoryModels();
    Set<RepositoryModel> models = new HashSet<RepositoryModel>();
    if (!StringUtils.isEmpty(repositoryName)) {
        // try named repository
        hasParameter = true;
        for (RepositoryModel model : availableModels) {
            if (model.name.equalsIgnoreCase(repositoryName)) {
                models.add(model);
                break;
            }
        }
    }
    if (!StringUtils.isEmpty(projectName)) {
        // try named project
        hasParameter = true;
        if (projectName.equalsIgnoreCase(app().settings().getString(Keys.web.repositoryRootGroupName, "main"))) {
            // root project/group
            for (RepositoryModel model : availableModels) {
                if (model.name.indexOf('/') == -1) {
                    models.add(model);
                }
            }
        } else {
            // named project/group
            String group = projectName.toLowerCase() + "/";
            for (RepositoryModel model : availableModels) {
                if (model.name.toLowerCase().startsWith(group)) {
                    models.add(model);
                }
            }
        }
    }
    if (!StringUtils.isEmpty(regex)) {
        // filter the repositories by the regex
        hasParameter = true;
        Pattern pattern = Pattern.compile(regex);
        for (RepositoryModel model : availableModels) {
            if (pattern.matcher(model.name).find()) {
                models.add(model);
            }
        }
    }
    if (!StringUtils.isEmpty(set)) {
        // filter the repositories by the specified sets
        hasParameter = true;
        List<String> sets = StringUtils.getStringsFromValue(set, ",");
        for (RepositoryModel model : availableModels) {
            for (String curr : sets) {
                if (model.federationSets.contains(curr)) {
                    models.add(model);
                }
            }
        }
    }
    if (!StringUtils.isEmpty(team)) {
        // filter the repositories by the specified teams
        hasParameter = true;
        List<String> teams = StringUtils.getStringsFromValue(team, ",");
        // need TeamModels first
        List<TeamModel> teamModels = new ArrayList<TeamModel>();
        for (String name : teams) {
            TeamModel teamModel = app().users().getTeamModel(name);
            if (teamModel != null) {
                teamModels.add(teamModel);
            }
        }
        // brute-force our way through finding the matching models
        for (RepositoryModel repositoryModel : availableModels) {
            for (TeamModel teamModel : teamModels) {
                if (teamModel.hasRepositoryPermission(repositoryModel.name)) {
                    models.add(repositoryModel);
                }
            }
        }
    }
    if (!hasParameter) {
        models.addAll(availableModels);
    }
    // time-filter the list
    if (daysBack > 0) {
        if (maxDaysBack > 0 && daysBack > maxDaysBack) {
            daysBack = maxDaysBack;
        }
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);
        cal.add(Calendar.DATE, -1 * daysBack);
        Date threshold = cal.getTime();
        Set<RepositoryModel> timeFiltered = new HashSet<RepositoryModel>();
        for (RepositoryModel model : models) {
            if (model.lastChange.after(threshold)) {
                timeFiltered.add(model);
            }
        }
        models = timeFiltered;
    }
    List<RepositoryModel> list = new ArrayList<RepositoryModel>(models);
    Collections.sort(list);
    return list;
}
Also used : Pattern(java.util.regex.Pattern) Calendar(java.util.Calendar) ArrayList(java.util.ArrayList) RepositoryModel(com.gitblit.models.RepositoryModel) Date(java.util.Date) TeamModel(com.gitblit.models.TeamModel) HashSet(java.util.HashSet) LinkedHashSet(java.util.LinkedHashSet)

Aggregations

TeamModel (com.gitblit.models.TeamModel)109 RepositoryModel (com.gitblit.models.RepositoryModel)68 Test (org.junit.Test)67 Date (java.util.Date)62 UserModel (com.gitblit.models.UserModel)58 ArrayList (java.util.ArrayList)18 HashSet (java.util.HashSet)8 RegistrantAccessPermission (com.gitblit.models.RegistrantAccessPermission)6 HashMap (java.util.HashMap)6 Map (java.util.Map)5 GitBlitException (com.gitblit.GitBlitException)4 SearchResult (com.unboundid.ldap.sdk.SearchResult)4 SearchResultEntry (com.unboundid.ldap.sdk.SearchResultEntry)4 File (java.io.File)4 IOException (java.io.IOException)4 AccessPermission (com.gitblit.Constants.AccessPermission)3 List (java.util.List)3 Repository (org.eclipse.jgit.lib.Repository)3 StoredConfig (org.eclipse.jgit.lib.StoredConfig)3 IUserService (com.gitblit.IUserService)2