Merge branch 'release/v1.1.0' of https://github.com/ONLYOFFICE/DocSpace into release/v1.1.0

This commit is contained in:
Maria Sukhova 2023-06-27 16:43:58 +03:00
commit c0a1608691
10 changed files with 123 additions and 25 deletions

View File

@ -52,6 +52,7 @@ if [ "$DIST" = "debian" ] && [ "$DISTRIB_CODENAME" = "stretch" ]; then
else
curl https://packages.microsoft.com/config/$DIST/$REV/packages-microsoft-prod.deb -O
fi
echo -e "Package: *\nPin: origin \"packages.microsoft.com\"\nPin-Priority: 1002" | tee /etc/apt/preferences.d/99microsoft-prod.pref
dpkg -i packages-microsoft-prod.deb && rm packages-microsoft-prod.deb
MYSQL_REPO_VERSION="$(curl https://repo.mysql.com | grep -oP 'mysql-apt-config_\K.*' | grep -o '^[^_]*' | sort --version-sort --field-separator=. | tail -n1)"

View File

@ -698,6 +698,54 @@ docker_login () {
fi
}
read_continue_installation () {
read -p "Continue installation [Y/N]? " CHOICE_INSTALLATION
case "$CHOICE_INSTALLATION" in
y|Y )
return 0
;;
n|N )
exit 0;
;;
* )
echo "Please, enter Y or N";
read_continue_installation
;;
esac
}
domain_check () {
DOMAINS=$(dig +short -x $(curl -s ifconfig.me) | sed 's/\.$//')
if [[ -n "$DOMAINS" ]]; then
while IFS= read -r DOMAIN; do
IP_ADDRESS=$(dig +short "$DOMAIN")
if [[ -n "$IP_ADDRESS" || "$IP_ADDRESS" =~ ^127\. ]]; then
LOCAL_RESOLVED_DOMAINS+="$DOMAIN"
fi
done <<< "$DOMAINS"
if [[ -n "$LOCAL_RESOLVED_DOMAINS" ]]; then
DOCKER_DAEMON_FILE="/etc/docker/daemon.json"
if ! grep -q '"dns"' "$DOCKER_DAEMON_FILE" 2>/dev/null; then
echo "A problem was detected for ${LOCAL_RESOLVED_DOMAINS[@]} domains when using a loopback IP address or when using NAT."
echo "Select 'Y' to continue installing with configuring the use of external IP in Docker via Google Public DNS."
echo "Select 'N' to cancel ${PACKAGE_SYSNAME^^} ${PRODUCT^^} installation."
if read_continue_installation; then
if [[ -f "$DOCKER_DAEMON_FILE" ]]; then
sed -i '/{/a\ "dns": ["8.8.8.8"],' "$DOCKER_DAEMON_FILE"
else
echo "{\"dns\": [\"8.8.8.8\"]}" | tee "$DOCKER_DAEMON_FILE" >/dev/null
fi
systemctl restart docker
fi
fi
fi
fi
}
get_container_env_parameter () {
local CONTAINER_NAME=$1;
local PARAMETER_NAME=$2;
@ -1021,6 +1069,8 @@ start_installation () {
docker_login
domain_check
set_docspace_params
set_jwt_secret

View File

@ -50,9 +50,10 @@ yum localinstall -y --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusi
MONOREV=$REV
if [ "$REV" = "9" ]; then
MONOREV="8"
TESTING_REPO="--enablerepo=crb"
[ $DIST != "redhat" ] && TESTING_REPO="--enablerepo=crb" || /usr/bin/crb enable
update-crypto-policies --set DEFAULT:SHA1
elif [ "$REV" = "8" ]; then
POWERTOOLS_REPO="--enablerepo=powertools"
[ $DIST != "redhat" ] && POWERTOOLS_REPO="--enablerepo=powertools" || /usr/bin/crb enable
fi
#add rabbitmq & erlang repo

View File

@ -86,6 +86,12 @@ public class InvitationLinkHelper
var commonLinkResult = _emailValidationKeyProvider.ValidateEmailKey(ConfirmType.LinkInvite.ToStringFast() + (int)employeeType,
key, _emailValidationKeyProvider.ValidEmailKeyInterval);
if (commonLinkResult == ValidationResult.Invalid)
{
commonLinkResult = _emailValidationKeyProvider.ValidateEmailKey(email + ConfirmType.EmpInvite.ToStringFast() + (int)employeeType,
key, _emailValidationKeyProvider.ValidEmailKeyInterval);
}
if (commonLinkResult != ValidationResult.Invalid)
{
validationResult.Result = commonLinkResult;

View File

@ -27,6 +27,11 @@ const Confirm = () => {
const path = "/confirm";
return (
<Switch>
<ConfirmRoute
forUnauthorized
path={`${path}/EmpInvite`}
component={CreateUserForm}
/>
<ConfirmRoute
forUnauthorized
path={`${path}/LinkInvite`}

View File

@ -111,10 +111,12 @@ const CreateUserForm = (props) => {
}
const fetchData = async () => {
const uid = linkData.uid;
const confirmKey = linkData.confirmHeader;
const user = await getUserFromConfirm(uid, confirmKey);
setUser(user);
if (linkData.type === "LinkInvite") {
const uid = linkData.uid;
const confirmKey = linkData.confirmHeader;
const user = await getUserFromConfirm(uid, confirmKey);
setUser(user);
}
window.authCallback = authCallback;
@ -204,6 +206,7 @@ const CreateUserForm = (props) => {
}
console.error("confirm error", errorMessage);
setIsEmailErrorShow(true);
setEmailErrorText(errorMessage);
setEmailValid(false);
setIsLoading(false);
@ -229,9 +232,10 @@ const CreateUserForm = (props) => {
const createConfirmUser = async (registerData, loginData, key) => {
const { login } = props;
const fromInviteLink = linkData.type === "LinkInvite" ? true : false;
const data = Object.assign(
{ fromInviteLink: true },
{ fromInviteLink: fromInviteLink },
registerData,
loginData
);
@ -395,7 +399,7 @@ const CreateUserForm = (props) => {
setIsPasswordErrorShow(true);
};
const userAvatar = user.hasAvatar ? user.avatar : DefaultUserPhoto;
const userAvatar = user && user.hasAvatar ? user.avatar : DefaultUserPhoto;
return (
<StyledPage>
@ -414,17 +418,23 @@ const CreateUserForm = (props) => {
{showGreeting && (
<>
<div className="greeting-block">
<Avatar className="avatar" role="user" source={userAvatar} />
<div className="user-info">
<Text fontSize="15px" fontWeight={600}>
{user.firstName} {user.lastName}
</Text>
<Text fontSize="12px" fontWeight={600} color="#A3A9AE">
{user.department}
</Text>
{user && (
<div className="greeting-block">
<Avatar
className="avatar"
role="user"
source={userAvatar}
/>
<div className="user-info">
<Text fontSize="15px" fontWeight={600}>
{user.firstName} {user.lastName}
</Text>
<Text fontSize="12px" fontWeight={600} color="#A3A9AE">
{user.department}
</Text>
</div>
</div>
</div>
)}
<div className="tooltip">
<span className="tooltiptext">{t("WelcomeUser")}</span>

View File

@ -28,7 +28,8 @@ export default function withLoader(WrappedComponent) {
if (
(type === "PasswordChange" ||
type === "LinkInvite" ||
type === "Activation") &&
type === "Activation" ||
type === "EmpInvite") &&
!passwordSettings
) {
axios
@ -57,7 +58,7 @@ export default function withLoader(WrappedComponent) {
}, [passwordSettings]);
useEffect(() => {
if (type === "LinkInvite") {
if (type === "LinkInvite" || type === "EmpInvite") {
axios.all([getAuthProviders(), getCapabilities()]).catch((error) => {
let errorMessage = "";
if (typeof error === "object") {
@ -85,7 +86,8 @@ export default function withLoader(WrappedComponent) {
? props.isLoaded
: type === "PasswordChange" ||
type === "LinkInvite" ||
type === "Activation"
type === "Activation" ||
type === "EmpInvite"
? !!passwordSettings
: true;

View File

@ -413,6 +413,7 @@ class PureHome extends React.Component {
removeTagsFromRoom,
loadCurrentUser,
updateProfileCulture,
getRooms,
} = this.props;
const eventData = typeof e.data === "string" ? JSON.parse(e.data) : e.data;
@ -451,6 +452,11 @@ class PureHome extends React.Component {
case "getUserInfo":
res = await loadCurrentUser();
break;
case "getRooms":
{
res = await getRooms(data);
}
break;
case "openModal":
{
const { type, options } = data;
@ -713,6 +719,7 @@ export default inject(
setIsPreview,
addTagsToRoom,
removeTagsFromRoom,
getRooms,
} = filesStore;
const { updateProfileCulture } = peopleStore.targetUserStore;
@ -750,8 +757,12 @@ export default inject(
setItemsSelectionTitle,
} = secondaryProgressDataStore;
const { setUploadPanelVisible, startUpload, uploaded, converted } =
uploadDataStore;
const {
setUploadPanelVisible,
startUpload,
uploaded,
converted,
} = uploadDataStore;
const { uploadEmptyFolders } = filesActionsStore;
@ -871,6 +882,7 @@ export default inject(
loadCurrentUser,
user,
updateProfileCulture,
getRooms,
};
}
)(withRouter(observer(Home)));

View File

@ -555,8 +555,8 @@ class FilesStore {
this.isPreview = predicate;
};
setTempFilter = (filser) => {
this.tempFilter = filser;
setTempFilter = (filter) => {
this.tempFilter = filter;
};
setHighlightFile = (highlightFile) => {
@ -3482,6 +3482,13 @@ class FilesStore {
get roomsForDelete() {
return this.folders.filter((f) => f.security.Delete);
}
getRooms = async (filter) => {
let newFilter = RoomsFilter.getDefault();
Object.assign(newFilter, filter);
return await api.rooms.getRooms(newFilter);
};
}
export default FilesStore;

View File

@ -345,6 +345,10 @@
return this.#getMethodPromise("getList");
}
getRooms(filter) {
return this.#getMethodPromise("getRooms", filter);
}
getUserInfo() {
return this.#getMethodPromise("getUserInfo");
}