<!DOCTYPE html>
<html lang='en'>
<head>
<title>commands.ts « support « cypress - nextcloud-server.git - Nextcloud server, a safe home for all your data: https://github.com/nextcloud/server</title>
<meta name='generator' content='cgit v1.2.3'/>
<meta name='robots' content='index, nofollow'/>
<link rel='stylesheet' type='text/css' href='/cgit.css'/>
<link rel='shortcut icon' href='/favicon.ico'/>
<link rel='alternate' title='Atom feed' href='https://source.dussan.org/nextcloud-server.git/atom/cypress/support/commands.ts?h=dependabot/github_actions/github-actions-aa3137d618' type='application/atom+xml'/>
</head>
<body>
<div id='cgit'><table id='header'>
<tr>
<td class='logo' rowspan='2'><a href='/'><img src='/cgit.png' alt='cgit logo'/></a></td>
<td class='main'><a href='/'>index</a> : <a href='/nextcloud-server.git/'>nextcloud-server.git</a></td><td class='form'><form method='get'>
<select name='h' onchange='this.form.submit();'>
<option value='27-shared-null-storage-merged'>27-shared-null-storage-merged</option>
<option value='3rdparty-aws-diet'>3rdparty-aws-diet</option>
<option value='3rdparty/justinrainbow/json-schema'>3rdparty/justinrainbow/json-schema</option>
<option value='3rdparty/stable28/sabre-dav-itip-broker'>3rdparty/stable28/sabre-dav-itip-broker</option>
<option value='3rdparty/stable29/sabre-dav-itip-broker'>3rdparty/stable29/sabre-dav-itip-broker</option>
<option value='3rdparty/stable30/sabre-dav-itip-broker'>3rdparty/stable30/sabre-dav-itip-broker</option>
<option value='44287-fix-avatar-fed-share-receiver'>44287-fix-avatar-fed-share-receiver</option>
<option value='44319-fix-fed-share-user-avatars'>44319-fix-fed-share-user-avatars</option>
<option value='Dennis1993-patch-1'>Dennis1993-patch-1</option>
<option value='Fix/app-menu-overflow'>Fix/app-menu-overflow</option>
<option value='Fix/mp3_regex'>Fix/mp3_regex</option>
<option value='Jerome-Herbinet-better-devices-wipe-action-wording'>Jerome-Herbinet-better-devices-wipe-action-wording</option>
<option value='Jerome-Herbinet-better-new-wording-better-than-delete-and-unshare'>Jerome-Herbinet-better-new-wording-better-than-delete-and-unshare</option>
<option value='Jerome-Herbinet-folder-tree-structure'>Jerome-Herbinet-folder-tree-structure</option>
<option value='Jerome-Herbinet-internal-shares-parameter-better-distinction'>Jerome-Herbinet-internal-shares-parameter-better-distinction</option>
<option value='Jerome-Herbinet-patch-1'>Jerome-Herbinet-patch-1</option>
<option value='Jerome-Herbinet-replace-remove-wording-with-delete'>Jerome-Herbinet-replace-remove-wording-with-delete</option>
<option value='Valdnet-patch-1'>Valdnet-patch-1</option>
<option value='add-VersionCreatedEvent'>add-VersionCreatedEvent</option>
<option value='add-caldav-repair-middleware'>add-caldav-repair-middleware</option>
<option value='add-command-to-cleanup-preview'>add-command-to-cleanup-preview</option>
<option value='add-default-request-timeout-const'>add-default-request-timeout-const</option>
<option value='add-integration-tests-for-deleting-a-file-copied-from-a-share'>add-integration-tests-for-deleting-a-file-copied-from-a-share</option>
<option value='add-integration-tests-for-moving-a-file-from-and-to-a-shared-folder'>add-integration-tests-for-moving-a-file-from-and-to-a-shared-folder</option>
<option value='add-integration-tests-for-renaming-a-share-by-a-user-with-stale-shares'>add-integration-tests-for-renaming-a-share-by-a-user-with-stale-shares</option>
<option value='addAllToGroupBy'>addAllToGroupBy</option>
<option value='addConstrDep'>addConstrDep</option>
<option value='admin-audit-listen-failed-login'>admin-audit-listen-failed-login</option>
<option value='admin_audit/enh/move-to-event-listeners'>admin_audit/enh/move-to-event-listeners</option>
<option value='allowMkcolAndPut'>allowMkcolAndPut</option>
<option value='allowUnderCustLink'>allowUnderCustLink</option>
<option value='appStoreCacheFolder'>appStoreCacheFolder</option>
<option value='appStoreDisabledOcc'>appStoreDisabledOcc</option>
<option value='artonge/backport/52121/stable29'>artonge/backport/52121/stable29</option>
<option value='artonge/backport/stable27/47770'>artonge/backport/stable27/47770</option>
<option value='artonge/backport/stable29/48207'>artonge/backport/stable29/48207</option>
<option value='artonge/chore/increase_log_in_trashbin'>artonge/chore/increase_log_in_trashbin</option>
<option value='artonge/chore/ldap_wizard_rewrite'>artonge/chore/ldap_wizard_rewrite</option>
<option value='artonge/chore/update_nc_cypress_beta.11'>artonge/chore/update_nc_cypress_beta.11</option>
<option value='artonge/chore/update_nc_pwd_confirmation_v5.3.1'>artonge/chore/update_nc_pwd_confirmation_v5.3.1</option>
<option value='artonge/chore/update_password_confirmation_v5.3.1'>artonge/chore/update_password_confirmation_v5.3.1</option>
<option value='artonge/chore/user_retry_trait'>artonge/chore/user_retry_trait</option>
<option value='artonge/debt/core_main.js'>artonge/debt/core_main.js</option>
<option value='artonge/feat/add_retry_support_to_query_builder'>artonge/feat/add_retry_support_to_query_builder</option>
<option value='artonge/feat/allow_deleting_metadata'>artonge/feat/allow_deleting_metadata</option>
<option value='artonge/feat/allow_partial_seen_users'>artonge/feat/allow_partial_seen_users</option>
<option value='artonge/feat/compare_hashed_password_when_updating_global_cred_in_files_external'>artonge/feat/compare_hashed_password_when_updating_global_cred_in_files_external</option>
<option value='artonge/feat/do_not_require_samesite_strict_cookie_on_public.php'>artonge/feat/do_not_require_samesite_strict_cookie_on_public.php</option>
<option value='artonge/feat/files_trashbin_parallel_expire_job'>artonge/feat/files_trashbin_parallel_expire_job</option>
<option value='artonge/feat/forward_sizeDifference_on_write'>artonge/feat/forward_sizeDifference_on_write</option>
<option value='artonge/feat/implement_custom_updater_for_object_storage'>artonge/feat/implement_custom_updater_for_object_storage</option>
<option value='artonge/feat/implement_custom_updater_for_object_storage-squashed'>artonge/feat/implement_custom_updater_for_object_storage-squashed</option>
<option value='artonge/feat/implement_custom_updater_for_object_storage-squashed-29'>artonge/feat/implement_custom_updater_for_object_storage-squashed-29</option>
<option value='artonge/feat/maintenance_warn_encrypt_all'>artonge/feat/maintenance_warn_encrypt_all</option>
<option value='artonge/feat/pwd_confirmation_allow_set_period'>artonge/feat/pwd_confirmation_allow_set_period</option>
<option value='artonge/feat/reset_route_when_sidebar_and_viewer_are_close'>artonge/feat/reset_route_when_sidebar_and_viewer_are_close</option>
<option value='artonge/feat/skip-trash-header'>artonge/feat/skip-trash-header</option>
<option value='artonge/feat/validate_keychecksum'>artonge/feat/validate_keychecksum</option>
<option value='artonge/fix/access_list_unaccepted_shares'>artonge/fix/access_list_unaccepted_shares</option>
<option value='artonge/fix/attribute_in_sidebar'>artonge/fix/attribute_in_sidebar</option>
<option value='artonge/fix/catch_exception_in_expire_trash'>artonge/fix/catch_exception_in_expire_trash</option>
<option value='artonge/fix/color_debounce'>artonge/fix/color_debounce</option>
<option value='artonge/fix/copy_cache_during_copy_operations'>artonge/fix/copy_cache_during_copy_operations</option>
<option value='artonge/fix/copy_subfolders_s3'>artonge/fix/copy_subfolders_s3</option>
<option value='artonge/fix/count_users'>artonge/fix/count_users</option>
<option value='artonge/fix/displayname_in_sidebar'>artonge/fix/displayname_in_sidebar</option>
<option value='artonge/fix/do_not_pass_parent_for_activity_tab_comments_plugin'>artonge/fix/do_not_pass_parent_for_activity_tab_comments_plugin</option>
<option value='artonge/fix/drop_unecessary_exit'>artonge/fix/drop_unecessary_exit</option>
<option value='artonge/fix/epehmeral_sessions'>artonge/fix/epehmeral_sessions</option>
<option value='artonge/fix/extra_files_integrity_check'>artonge/fix/extra_files_integrity_check</option>
<option value='artonge/fix/file_list_jump_on_viewer_close'>artonge/fix/file_list_jump_on_viewer_close</option>
<option value='artonge/fix/forward_extra'>artonge/fix/forward_extra</option>
<option value='artonge/fix/generate_metadata_perf'>artonge/fix/generate_metadata_perf</option>
<option value='artonge/fix/getting_cache_entry'>artonge/fix/getting_cache_entry</option>
<option value='artonge/fix/handle_folders_copy_live_photos'>artonge/fix/handle_folders_copy_live_photos</option>
<option value='artonge/fix/hash_return_type'>artonge/fix/hash_return_type</option>
<option value='artonge/fix/listen_to_group_removal_for_share'>artonge/fix/listen_to_group_removal_for_share</option>
<option value='artonge/fix/login_flow_v2_sessions'>artonge/fix/login_flow_v2_sessions</option>
<option value='artonge/fix/login_flow_v2_sessions_2'>artonge/fix/login_flow_v2_sessions_2</option>
<option value='artonge/fix/make_error_a_info'>artonge/fix/make_error_a_info</option>
<option value='artonge/fix/metadata_field_search'>artonge/fix/metadata_field_search</option>
<option value='artonge/fix/min_age_rentention_files_versions'>artonge/fix/min_age_rentention_files_versions</option>
<option value='artonge/fix/missing_dot'>artonge/fix/missing_dot</option>
<option value='artonge/fix/opening_a_secondly_created_file'>artonge/fix/opening_a_secondly_created_file</option>
<option value='artonge/fix/prevent_missing_users_from_crashing_disabled_users_search'>artonge/fix/prevent_missing_users_from_crashing_disabled_users_search</option>
<option value='artonge/fix/publicpage_attribute'>artonge/fix/publicpage_attribute</option>
<option value='artonge/fix/remove_duplicate_propfind_call'>artonge/fix/remove_duplicate_propfind_call</option>
<option value='artonge/fix/remove_unnecessary_formating'>artonge/fix/remove_unnecessary_formating</option>
<option value='artonge/fix/restoring_encrypted_version'>artonge/fix/restoring_encrypted_version</option>
<option value='artonge/fix/sidebar_davpath'>artonge/fix/sidebar_davpath</option>
<option value='artonge/fix/skip_blurhash_if_previews_are_disabled'>artonge/fix/skip_blurhash_if_previews_are_disabled</option>
<option value='artonge/fix/storage_full_warning'>artonge/fix/storage_full_warning</option>
<option value='artonge/fix/systemtag_rendering'>artonge/fix/systemtag_rendering</option>
<option value='artonge/fix/transfer_ownership'>artonge/fix/transfer_ownership</option>
<option value='artonge/fix/uid_type'>artonge/fix/uid_type</option>
<option value='artonge/fix/use_loginname_to_check_password'>artonge/fix/use_loginname_to_check_password</option>
<option value='artonge/fix/use_preview_api_for_blurhash_generation'>artonge/fix/use_preview_api_for_blurhash_generation</option>
<option value='artonge/fix/vue_app_names'>artonge/fix/vue_app_names</option>
<option value='artonge/local/IONOS/feat/config_unified_search_providers_allowed'>artonge/local/IONOS/feat/config_unified_search_providers_allowed</option>
<option value='artonge/local/IONOS/tl/dev/disable-mailing'>artonge/local/IONOS/tl/dev/disable-mailing</option>
<option value='artonge/local/georglauterbach/feat/skip_cname'>artonge/local/georglauterbach/feat/skip_cname</option>
<option value='artonge/optim/close_connection_before_s3_upload'>artonge/optim/close_connection_before_s3_upload</option>
<option value='artonge/support_oc_checksum_in_bulk_upload'>artonge/support_oc_checksum_in_bulk_upload</option>
<option value='artonge/test/remove_only_calls'>artonge/test/remove_only_calls</option>
<option value='authPropertyPromotion'>authPropertyPromotion</option>
<option value='automated/noid/main-fix-npm-audit'>automated/noid/main-fix-npm-audit</option>
<option value='automated/noid/master-fix-npm-audit'>automated/noid/master-fix-npm-audit</option>
<option value='automated/noid/master-update-ca-cert-bundle'>automated/noid/master-update-ca-cert-bundle</option>
<option value='automated/noid/master-update-code-signing-crl'>automated/noid/master-update-code-signing-crl</option>
<option value='automated/noid/master-update-psalm-baseline'>automated/noid/master-update-psalm-baseline</option>
<option value='automated/noid/stable22-update-ca-cert-bundle'>automated/noid/stable22-update-ca-cert-bundle</option>
<option value='automated/noid/stable22-update-code-signing-crl'>automated/noid/stable22-update-code-signing-crl</option>
hlight .nv { color: #336699 } /* Name.Variable */
.highlight .ow { color: #008800 } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */
.highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */
.highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */
.highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */
.highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */
.highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */
.highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */
.highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */
.highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */
.highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */
.highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */
.highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */
.highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */
.highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */
.highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */
.highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */
.highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */
.highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */
.highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */
.highlight .vc { color: #336699 } /* Name.Variable.Class */
.highlight .vg { color: #dd7700 } /* Name.Variable.Global */
.highlight .vi { color: #3333bb } /* Name.Variable.Instance */
.highlight .vm { color: #336699 } /* Name.Variable.Magic */
.highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */</style><div class="highlight"><pre><span></span><span class="cm">/*</span>
<span class="cm"> * Copyright 2013 gitblit.com.</span>
<span class="cm"> *</span>
<span class="cm"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span>
<span class="cm"> * you may not use this file except in compliance with the License.</span>
<span class="cm"> * You may obtain a copy of the License at</span>
<span class="cm"> *</span>
<span class="cm"> *     http://www.apache.org/licenses/LICENSE-2.0</span>
<span class="cm"> *</span>
<span class="cm"> * Unless required by applicable law or agreed to in writing, software</span>
<span class="cm"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span>
<span class="cm"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
<span class="cm"> * See the License for the specific language governing permissions and</span>
<span class="cm"> * limitations under the License.</span>
<span class="cm"> */</span>
<span class="kn">package</span><span class="w"> </span><span class="nn">com.gitblit.servlet</span><span class="p">;</span>

<span class="kn">import</span><span class="w"> </span><span class="nn">java.io.IOException</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.net.URL</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.text.MessageFormat</span><span class="p">;</span>

<span class="kn">import</span><span class="w"> </span><span class="nn">javax.servlet.ServletException</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.servlet.http.HttpServlet</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.servlet.http.HttpServletRequest</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.servlet.http.HttpServletResponse</span><span class="p">;</span>

<span class="kn">import</span><span class="w"> </span><span class="nn">com.gitblit.IStoredSettings</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">com.gitblit.Keys</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">com.gitblit.manager.IAuthenticationManager</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">com.gitblit.manager.IRepositoryManager</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">com.gitblit.manager.IUserManager</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">com.gitblit.models.RepositoryModel</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">com.gitblit.models.UserModel</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">com.gitblit.utils.StringUtils</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">com.google.inject.Inject</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">com.google.inject.Singleton</span><span class="p">;</span>

<span class="cm">/**</span>
<span class="cm"> * Handles requests for Sparkleshare Invites</span>
<span class="cm"> *</span>
<span class="cm"> * @author James Moger</span>
<span class="cm"> *</span>
<span class="cm"> */</span>
<span class="nd">@Singleton</span>
<span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">SparkleShareInviteServlet</span><span class="w"> </span><span class="kd">extends</span><span class="w"> </span><span class="n">HttpServlet</span><span class="w"> </span><span class="p">{</span>

<span class="w">	</span><span class="kd">private</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="kt">long</span><span class="w"> </span><span class="n">serialVersionUID</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1L</span><span class="p">;</span>

<span class="w">	</span><span class="kd">private</span><span class="w"> </span><span class="n">IStoredSettings</span><span class="w"> </span><span class="n">settings</span><span class="p">;</span>

<span class="w">	</span><span class="kd">private</span><span class="w"> </span><span class="n">IUserManager</span><span class="w"> </span><span class="n">userManager</span><span class="p">;</span>

<span class="w">	</span><span class="kd">private</span><span class="w"> </span><span class="n">IAuthenticationManager</span><span class="w"> </span><span class="n">authenticationManager</span><span class="p">;</span>

<span class="w">	</span><span class="kd">private</span><span class="w"> </span><span class="n">IRepositoryManager</span><span class="w"> </span><span class="n">repositoryManager</span><span class="p">;</span>

<span class="w">	</span><span class="nd">@Inject</span>
<span class="w">	</span><span class="kd">public</span><span class="w"> </span><span class="nf">SparkleShareInviteServlet</span><span class="p">(</span>
<span class="w">			</span><span class="n">IStoredSettings</span><span class="w"> </span><span class="n">settings</span><span class="p">,</span>
<span class="w">			</span><span class="n">IUserManager</span><span class="w"> </span><span class="n">userManager</span><span class="p">,</span>
<span class="w">			</span><span class="n">IAuthenticationManager</span><span class="w"> </span><span class="n">authenticationManager</span><span class="p">,</span>
<span class="w">			</span><span class="n">IRepositoryManager</span><span class="w"> </span><span class="n">repositoryManager</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>

<span class="w">		</span><span class="k">this</span><span class="p">.</span><span class="na">settings</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">settings</span><span class="p">;</span>
<span class="w">		</span><span class="k">this</span><span class="p">.</span><span class="na">userManager</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">userManager</span><span class="p">;</span>
<span class="w">		</span><span class="k">this</span><span class="p">.</span><span class="na">authenticationManager</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">authenticationManager</span><span class="p">;</span>
<span class="w">		</span><span class="k">this</span><span class="p">.</span><span class="na">repositoryManager</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">repositoryManager</span><span class="p">;</span>
<span class="w">	</span><span class="p">}</span>

<span class="w">	</span><span class="nd">@Override</span>
<span class="w">	</span><span class="kd">protected</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">doPost</span><span class="p">(</span><span class="n">HttpServletRequest</span><span class="w"> </span><span class="n">request</span><span class="p">,</span><span class="w"> </span><span class="n">HttpServletResponse</span><span class="w"> </span><span class="n">response</span><span class="p">)</span>
<span class="w">			</span><span class="kd">throws</span><span class="w"> </span><span class="n">ServletException</span><span class="p">,</span><span class="w"> </span><span class="n">java</span><span class="p">.</span><span class="na">io</span><span class="p">.</span><span class="na">IOException</span><span class="w"> </span><span class="p">{</span>
<span class="w">		</span><span class="n">processRequest</span><span class="p">(</span><span class="n">request</span><span class="p">,</span><span class="w"> </span><span class="n">response</span><span class="p">);</span>
<span class="w">	</span><span class="p">}</span>

<span class="w">	</span><span class="nd">@Override</span>
<span class="w">	</span><span class="kd">protected</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">doGet</span><span class="p">(</span><span class="n">HttpServletRequest</span><span class="w"> </span><span class="n">request</span><span class="p">,</span><span class="w"> </span><span class="n">HttpServletResponse</span><span class="w"> </span><span class="n">response</span><span class="p">)</span>
<span class="w">			</span><span class="kd">throws</span><span class="w"> </span><span class="n">ServletException</span><span class="p">,</span><span class="w"> </span><span class="n">IOException</span><span class="w"> </span><span class="p">{</span>
<span class="w">		</span><span class="n">processRequest</span><span class="p">(</span><span class="n">request</span><span class="p">,</span><span class="w"> </span><span class="n">response</span><span class="p">);</span>
<span class="w">	</span><span class="p">}</span>

<span class="w">	</span><span class="kd">protected</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">processRequest</span><span class="p">(</span><span class="n">javax</span><span class="p">.</span><span class="na">servlet</span><span class="p">.</span><span class="na">http</span><span class="p">.</span><span class="na">HttpServletRequest</span><span class="w"> </span><span class="n">request</span><span class="p">,</span>
<span class="w">			</span><span class="n">javax</span><span class="p">.</span><span class="na">servlet</span><span class="p">.</span><span class="na">http</span><span class="p">.</span><span class="na">HttpServletResponse</span><span class="w"> </span><span class="n">response</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">javax</span><span class="p">.</span><span class="na">servlet</span><span class="p">.</span><span class="na">ServletException</span><span class="p">,</span>
<span class="w">			</span><span class="n">java</span><span class="p">.</span><span class="na">io</span><span class="p">.</span><span class="na">IOException</span><span class="w"> </span><span class="p">{</span>

<span class="w">		</span><span class="kt">int</span><span class="w"> </span><span class="n">sshPort</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">settings</span><span class="p">.</span><span class="na">getInteger</span><span class="p">(</span><span class="n">Keys</span><span class="p">.</span><span class="na">git</span><span class="p">.</span><span class="na">sshPort</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">);</span>
<span class="w">		</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">sshPort</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">			</span><span class="n">response</span><span class="p">.</span><span class="na">setStatus</span><span class="p">(</span><span class="n">HttpServletResponse</span><span class="p">.</span><span class="na">SC_FORBIDDEN</span><span class="p">);</span>
<span class="w">			</span><span class="n">response</span><span class="p">.</span><span class="na">getWriter</span><span class="p">().</span><span class="na">append</span><span class="p">(</span><span class="s">&quot;SSH is not active on this server!&quot;</span><span class="p">);</span>
<span class="w">			</span><span class="k">return</span><span class="p">;</span>
<span class="w">		</span><span class="p">}</span>
<span class="w">		</span><span class="kt">int</span><span class="w"> </span><span class="n">sshDisplayPort</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">settings</span><span class="p">.</span><span class="na">getInteger</span><span class="p">(</span><span class="n">Keys</span><span class="p">.</span><span class="na">git</span><span class="p">.</span><span class="na">sshAdvertisedPort</span><span class="p">,</span><span class="w"> </span><span class="n">sshPort</span><span class="p">);</span>

<span class="w">		</span><span class="c1">// extract repo name from request</span>
<span class="w">		</span><span class="n">String</span><span class="w"> </span><span class="n">repoUrl</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">request</span><span class="p">.</span><span class="na">getPathInfo</span><span class="p">().</span><span class="na">substring</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span>

<span class="w">		</span><span class="c1">// trim trailing .xml</span>
<span class="w">		</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">repoUrl</span><span class="p">.</span><span class="na">endsWith</span><span class="p">(</span><span class="s">&quot;.xml&quot;</span><span class="p">))</span><span class="w"> </span><span class="p">{</span>
<span class="w">			</span><span class="n">repoUrl</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">repoUrl</span><span class="p">.</span><span class="na">substring</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="n">repoUrl</span><span class="p">.</span><span class="na">length</span><span class="p">()</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mi">4</span><span class="p">);</span>
<span class="w">		</span><span class="p">}</span>

<span class="w">		</span><span class="n">String</span><span class="w"> </span><span class="n">username</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">null</span><span class="p">;</span>
<span class="w">		</span><span class="n">String</span><span class="w"> </span><span class="n">path</span><span class="p">;</span>
<span class="w">		</span><span class="kt">int</span><span class="w"> </span><span class="n">fetchIndex</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">repoUrl</span><span class="p">.</span><span class="na">indexOf</span><span class="p">(</span><span class="sc">&#39;@&#39;</span><span class="p">);</span>
<span class="w">		</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">fetchIndex</span><span class="w"> </span><span class="o">&gt;</span><span class="w"> </span><span class="o">-</span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">			</span><span class="n">username</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">repoUrl</span><span class="p">.</span><span class="na">substring</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="n">fetchIndex</span><span class="p">);</span>
<span class="w">			</span><span class="n">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">repoUrl</span><span class="p">.</span><span class="na">substring</span><span class="p">(</span><span class="n">fetchIndex</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span>
<span class="w">		</span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span>
<span class="w">			</span><span class="n">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">repoUrl</span><span class="p">;</span>
<span class="w">		</span><span class="p">}</span>

<span class="w">		</span><span class="n">String</span><span class="w"> </span><span class="n">host</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">request</span><span class="p">.</span><span class="na">getServerName</span><span class="p">();</span>
<span class="w">		</span><span class="n">String</span><span class="w"> </span><span class="n">url</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">settings</span><span class="p">.</span><span class="na">getString</span><span class="p">(</span><span class="n">Keys</span><span class="p">.</span><span class="na">web</span><span class="p">.</span><span class="na">canonicalUrl</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;https://localhost:8443&quot;</span><span class="p">);</span>
<span class="w">		</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">StringUtils</span><span class="p">.</span><span class="na">isEmpty</span><span class="p">(</span><span class="n">url</span><span class="p">)</span><span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="n">url</span><span class="p">.</span><span class="na">indexOf</span><span class="p">(</span><span class="s">&quot;localhost&quot;</span><span class="p">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="o">-</span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">			</span><span class="n">host</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">URL</span><span class="p">(</span><span class="n">url</span><span class="p">).</span><span class="na">getHost</span><span class="p">();</span>
<span class="w">		</span><span class="p">}</span>
<span class="w">		</span><span class="n">String</span><span class="w"> </span><span class="n">sshDisplayHost</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">settings</span><span class="p">.</span><span class="na">getString</span><span class="p">(</span><span class="n">Keys</span><span class="p">.</span><span class="na">git</span><span class="p">.</span><span class="na">sshAdvertisedHost</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="p">);</span>
<span class="w">		</span><span class="k">if</span><span class="p">(</span><span class="n">sshDisplayHost</span><span class="p">.</span><span class="na">isEmpty</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
<span class="w">			</span><span class="n">sshDisplayHost</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">host</span><span class="p">;</span>
<span class="w">		</span><span class="p">}</span>

<span class="w">		</span><span class="n">UserModel</span><span class="w"> </span><span class="n">user</span><span class="p">;</span>
<span class="w">		</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">StringUtils</span><span class="p">.</span><span class="na">isEmpty</span><span class="p">(</span><span class="n">username</span><span class="p">))</span><span class="w"> </span><span class="p">{</span>
<span class="w">			</span><span class="n">user</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">authenticationManager</span><span class="p">.</span><span class="na">authenticate</span><span class="p">(</span><span class="n">request</span><span class="p">);</span>
<span class="w">		</span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span>
<span class="w">			</span><span class="n">user</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">userManager</span><span class="p">.</span><span class="na">getUserModel</span><span class="p">(</span><span class="n">username</span><span class="p">);</span>
<span class="w">		</span><span class="p">}</span>
<span class="w">		</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">user</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="kc">null</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">user</span><span class="p">.</span><span class="na">disabled</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">			</span><span class="n">response</span><span class="p">.</span><span class="na">setStatus</span><span class="p">(</span><span class="n">HttpServletResponse</span><span class="p">.</span><span class="na">SC_FORBIDDEN</span><span class="p">);</span>
<span class="w">			</span><span class="n">response</span><span class="p">.</span><span class="na">getWriter</span><span class="p">().</span><span class="na">append</span><span class="p">(</span><span class="s">&quot;Access is not permitted!&quot;</span><span class="p">);</span>
<span class="w">			</span><span class="k">return</span><span class="p">;</span>
<span class="w">		</span><span class="p">}</span>

<span class="w">		</span><span class="c1">// ensure that the requested repository exists</span>
<span class="w">		</span><span class="n">RepositoryModel</span><span class="w"> </span><span class="n">model</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">repositoryManager</span><span class="p">.</span><span class="na">getRepositoryModel</span><span class="p">(</span><span class="n">path</span><span class="p">);</span>
<span class="w">		</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">model</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">			</span><span class="n">response</span><span class="p">.</span><span class="na">setStatus</span><span class="p">(</span><span class="n">HttpServletResponse</span><span class="p">.</span><span class="na">SC_NOT_FOUND</span><span class="p">);</span>
<span class="w">			</span><span class="n">response</span><span class="p">.</span><span class="na">getWriter</span><span class="p">().</span><span class="na">append</span><span class="p">(</span><span class="n">MessageFormat</span><span class="p">.</span><span class="na">format</span><span class="p">(</span><span class="s">&quot;Repository \&quot;{0}\&quot; not found!&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">path</span><span class="p">));</span>
<span class="w">			</span><span class="k">return</span><span class="p">;</span>
<span class="w">		</span><span class="p">}</span>

<span class="w">		</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">user</span><span class="p">.</span><span class="na">canRewindRef</span><span class="p">(</span><span class="n">model</span><span class="p">))</span><span class="w"> </span><span class="p">{</span>
<span class="w">			</span><span class="n">response</span><span class="p">.</span><span class="na">setStatus</span><span class="p">(</span><span class="n">HttpServletResponse</span><span class="p">.</span><span class="na">SC_FORBIDDEN</span><span class="p">);</span>
<span class="w">			</span><span class="n">response</span><span class="p">.</span><span class="na">getWriter</span><span class="p">().</span><span class="na">append</span><span class="p">(</span><span class="n">MessageFormat</span><span class="p">.</span><span class="na">format</span><span class="p">(</span><span class="s">&quot;{0} does not have RW+ permissions to \&quot;{1}\&quot;!&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">user</span><span class="p">.</span><span class="na">username</span><span class="p">,</span><span class="w"> </span><span class="n">model</span><span class="p">.</span><span class="na">name</span><span class="p">));</span>
<span class="w">		</span><span class="p">}</span>

<span class="w">		</span><span class="n">StringBuilder</span><span class="w"> </span><span class="n">sb</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">StringBuilder</span><span class="p">();</span>
<span class="w">		</span><span class="n">sb</span><span class="p">.</span><span class="na">append</span><span class="p">(</span><span class="s">&quot;&lt;?xml version=\&quot;1.0\&quot; encoding=\&quot;UTF-8\&quot;?&gt;\n&quot;</span><span class="p">);</span>
<span class="w">		</span><span class="n">sb</span><span class="p">.</span><span class="na">append</span><span class="p">(</span><span class="s">&quot;&lt;sparkleshare&gt;&lt;invite&gt;\n&quot;</span><span class="p">);</span>
<span class="w">		</span><span class="n">sb</span><span class="p">.</span><span class="na">append</span><span class="p">(</span><span class="n">MessageFormat</span><span class="p">.</span><span class="na">format</span><span class="p">(</span><span class="s">&quot;&lt;address&gt;ssh://{0}@{1}:{2,number,0}/&lt;/address&gt;\n&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">user</span><span class="p">.</span><span class="na">username</span><span class="p">,</span><span class="w"> </span><span class="n">sshDisplayHost</span><span class="p">,</span><span class="w"> </span><span class="n">sshDisplayPort</span><span class="p">));</span>
<span class="w">		</span><span class="n">sb</span><span class="p">.</span><span class="na">append</span><span class="p">(</span><span class="n">MessageFormat</span><span class="p">.</span><span class="na">format</span><span class="p">(</span><span class="s">&quot;&lt;remote_path&gt;/{0}&lt;/remote_path&gt;\n&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">model</span><span class="p">.</span><span class="na">name</span><span class="p">));</span>
<span class="w">		</span><span class="kt">int</span><span class="w"> </span><span class="n">fanoutPort</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">settings</span><span class="p">.</span><span class="na">getInteger</span><span class="p">(</span><span class="n">Keys</span><span class="p">.</span><span class="na">fanout</span><span class="p">.</span><span class="na">port</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">);</span>
<span class="w">		</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">fanoutPort</span><span class="w"> </span><span class="o">&gt;</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">			</span><span class="c1">// Gitblit is running it&#39;s own fanout service for pubsub notifications</span>
<span class="w">			</span><span class="n">sb</span><span class="p">.</span><span class="na">append</span><span class="p">(</span><span class="n">MessageFormat</span><span class="p">.</span><span class="na">format</span><span class="p">(</span><span class="s">&quot;&lt;announcements_url&gt;tcp://{0}:{1,number,0}&lt;/announcements_url&gt;\n&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">request</span><span class="p">.</span><span class="na">getServerName</span><span class="p">(),</span><span class="w"> </span><span class="n">fanoutPort</span><span class="p">));</span>
<span class="w">		</span><span class="p">}</span>
<span class="w">		</span><span class="n">sb</span><span class="p">.</span><span class="na">append</span><span class="p">(</span><span class="s">&quot;&lt;/invite&gt;&lt;/sparkleshare&gt;\n&quot;</span><span class="p">);</span>

<span class="w">		</span><span class="c1">// write invite to client</span>
<span class="w">		</span><span class="n">response</span><span class="p">.</span><span class="na">setContentType</span><span class="p">(</span><span class="s">&quot;application/xml&quot;</span><span class="p">);</span>
<span class="w">		</span><span class="n">response</span><span class="p">.</span><span class="na">setContentLength</span><span class="p">(</span><span class="n">sb</span><span class="p">.</span><span class="na">length</span><span class="p">());</span>
<span class="w">		</span><span class="n">response</span><span class="p">.</span><span class="na">getWriter</span><span class="p">().</span><span class="na">append</span><span class="p">(</span><span class="n">sb</span><span class="p">.</span><span class="na">toString</span><span class="p">());</span>
<span class="w">	</span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
</code></pre></td></tr></table>
</div> <!-- class=content -->
<div class='footer'>generated by <a href='https://git.zx2c4.com/cgit/about/'>cgit v1.2.3</a> (<a href='https://git-scm.com/'>git 2.39.1</a>) at 2025-07-29 01:49:38 +0000</div>
</div> <!-- id=cgit -->
</body>
</html>
