Merge branch 'release/v0.1.8' of github.com:ONLYOFFICE/AppServer into release/v0.1.8
This commit is contained in:
commit
decb2857e6
@ -28,6 +28,7 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
|
||||
using ASC.Common;
|
||||
using ASC.Common.Caching;
|
||||
using ASC.Common.Utils;
|
||||
using ASC.Core;
|
||||
@ -160,5 +161,18 @@ namespace ASC.FederatedLogin.LoginProviders
|
||||
}
|
||||
|
||||
public abstract LoginProfile GetLoginProfile(string accessToken);
|
||||
}
|
||||
|
||||
public class BaseLoginProviderExtension
|
||||
{
|
||||
public static void Register(DIHelper services)
|
||||
{
|
||||
services.TryAdd<BoxLoginProvider>();
|
||||
services.TryAdd<DropboxLoginProvider>();
|
||||
services.TryAdd<OneDriveLoginProvider>();
|
||||
services.TryAdd<DocuSignLoginProvider>();
|
||||
services.TryAdd<GoogleLoginProvider>();
|
||||
services.TryAdd<WordpressLoginProvider>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -236,7 +236,7 @@ export function getConsumersList() {
|
||||
export function getAuthProviders() {
|
||||
return request({
|
||||
method: "get",
|
||||
url: `/settings/authproviders`,
|
||||
url: `/people/thirdparty/providers`,
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -15,6 +15,7 @@ const StyledLabel = styled.label`
|
||||
|
||||
.checkbox {
|
||||
margin-right: 12px;
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
/* ${(props) =>
|
||||
|
@ -81,6 +81,7 @@ const PureTreeSettings = ({
|
||||
history,
|
||||
setIsLoading,
|
||||
t,
|
||||
isVisitor,
|
||||
}) => {
|
||||
const { setting } = match.params;
|
||||
|
||||
@ -168,7 +169,7 @@ const PureTreeSettings = ({
|
||||
title={t("TreeSettingsAdminSettings")}
|
||||
/>
|
||||
) : null}
|
||||
{enableThirdParty ? (
|
||||
{enableThirdParty && !isVisitor ? (
|
||||
<TreeNode
|
||||
selectable={true}
|
||||
className="settings-node"
|
||||
@ -226,6 +227,7 @@ export default inject(
|
||||
|
||||
return {
|
||||
isAdmin: auth.isAdmin,
|
||||
isVisitor: auth.userStore.user.isVisitor,
|
||||
isLoading,
|
||||
selectedTreeNode,
|
||||
enableThirdParty,
|
||||
|
@ -85,6 +85,7 @@ class ArticleBodyContent extends React.Component {
|
||||
onTreeDrop,
|
||||
selectedTreeNode,
|
||||
enableThirdParty,
|
||||
isVisitor,
|
||||
} = this.props;
|
||||
|
||||
return isEmpty(treeFolders) ? (
|
||||
@ -99,7 +100,7 @@ class ArticleBodyContent extends React.Component {
|
||||
onTreeDrop={onTreeDrop}
|
||||
/>
|
||||
<TreeSettings />
|
||||
{enableThirdParty && <ThirdPartyList />}
|
||||
{enableThirdParty && !isVisitor && <ThirdPartyList />}
|
||||
</>
|
||||
);
|
||||
}
|
||||
@ -107,6 +108,7 @@ class ArticleBodyContent extends React.Component {
|
||||
|
||||
export default inject(
|
||||
({
|
||||
auth,
|
||||
filesStore,
|
||||
treeFoldersStore,
|
||||
selectedFolderStore,
|
||||
@ -129,6 +131,7 @@ export default inject(
|
||||
selectedTreeNode,
|
||||
filter,
|
||||
enableThirdParty: settingsStore.enableThirdParty,
|
||||
isVisitor: auth.userStore.user.isVisitor,
|
||||
|
||||
setIsLoading,
|
||||
fetchFiles,
|
||||
|
@ -37,7 +37,7 @@ using Microsoft.Extensions.Configuration;
|
||||
|
||||
namespace ASC.Web.Files.Helpers
|
||||
{
|
||||
[Scope(Additional = typeof(ThirdpartyConfigurationExtension))]
|
||||
[Scope(Additional = typeof(BaseLoginProviderExtension))]
|
||||
public class ThirdpartyConfiguration
|
||||
{
|
||||
private IConfiguration Configuration { get; }
|
||||
@ -200,17 +200,5 @@ namespace ASC.Web.Files.Helpers
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
public class ThirdpartyConfigurationExtension
|
||||
{
|
||||
public static void Register(DIHelper services)
|
||||
{
|
||||
services.TryAdd<BoxLoginProvider>();
|
||||
services.TryAdd<DropboxLoginProvider>();
|
||||
services.TryAdd<OneDriveLoginProvider>();
|
||||
services.TryAdd<DocuSignLoginProvider>();
|
||||
services.TryAdd<GoogleLoginProvider>();
|
||||
}
|
||||
}
|
||||
}
|
@ -10,6 +10,7 @@ using System.Net.Mail;
|
||||
using System.Security;
|
||||
using System.ServiceModel.Security;
|
||||
using System.Threading;
|
||||
using System.Web;
|
||||
|
||||
using ASC.Api.Core;
|
||||
using ASC.Common;
|
||||
@ -22,6 +23,7 @@ using ASC.Core.Tenants;
|
||||
using ASC.Core.Users;
|
||||
using ASC.Data.Reassigns;
|
||||
using ASC.FederatedLogin;
|
||||
using ASC.FederatedLogin.LoginProviders;
|
||||
using ASC.FederatedLogin.Profile;
|
||||
using ASC.MessagingSystem;
|
||||
using ASC.People;
|
||||
@ -31,6 +33,7 @@ using ASC.Security.Cryptography;
|
||||
using ASC.Web.Api.Models;
|
||||
using ASC.Web.Api.Routing;
|
||||
using ASC.Web.Core;
|
||||
using ASC.Web.Core.Mobile;
|
||||
using ASC.Web.Core.PublicResources;
|
||||
using ASC.Web.Core.Users;
|
||||
using ASC.Web.Studio.Core;
|
||||
@ -48,7 +51,7 @@ using SecurityContext = ASC.Core.SecurityContext;
|
||||
|
||||
namespace ASC.Employee.Core.Controllers
|
||||
{
|
||||
[Scope]
|
||||
[Scope(Additional = typeof(BaseLoginProviderExtension))]
|
||||
[DefaultRoute]
|
||||
[ApiController]
|
||||
public class PeopleController : ControllerBase
|
||||
@ -88,7 +91,9 @@ namespace ASC.Employee.Core.Controllers
|
||||
private PasswordHasher PasswordHasher { get; }
|
||||
private UserHelpTourHelper UserHelpTourHelper { get; }
|
||||
private PersonalSettingsHelper PersonalSettingsHelper { get; }
|
||||
public CommonLinkUtility CommonLinkUtility { get; }
|
||||
private CommonLinkUtility CommonLinkUtility { get; }
|
||||
private MobileDetector MobileDetector { get; }
|
||||
private ProviderManager ProviderManager { get; }
|
||||
private ILog Log { get; }
|
||||
|
||||
public PeopleController(
|
||||
@ -127,7 +132,10 @@ namespace ASC.Employee.Core.Controllers
|
||||
PasswordHasher passwordHasher,
|
||||
UserHelpTourHelper userHelpTourHelper,
|
||||
PersonalSettingsHelper personalSettingsHelper,
|
||||
CommonLinkUtility commonLinkUtility)
|
||||
CommonLinkUtility commonLinkUtility,
|
||||
MobileDetector mobileDetector,
|
||||
ProviderManager providerManager
|
||||
)
|
||||
{
|
||||
Log = option.Get("ASC.Api");
|
||||
Log.Debug("Test");
|
||||
@ -166,6 +174,8 @@ namespace ASC.Employee.Core.Controllers
|
||||
UserHelpTourHelper = userHelpTourHelper;
|
||||
PersonalSettingsHelper = personalSettingsHelper;
|
||||
CommonLinkUtility = commonLinkUtility;
|
||||
MobileDetector = mobileDetector;
|
||||
ProviderManager = providerManager;
|
||||
}
|
||||
|
||||
[Read("info")]
|
||||
@ -1486,6 +1496,50 @@ namespace ASC.Employee.Core.Controllers
|
||||
return string.Format(Resource.SuccessfullySentNotificationDeleteUserInfoMessage, "<b>" + user.Email + "</b>");
|
||||
}
|
||||
|
||||
[AllowAnonymous]
|
||||
[Read("thirdparty/providers")]
|
||||
public ICollection<AccountInfo> GetAuthProviders(bool inviteView, bool settingsView, string clientCallback, string fromOnly)
|
||||
{
|
||||
ICollection<AccountInfo> infos = new List<AccountInfo>();
|
||||
IEnumerable<LoginProfile> linkedAccounts = new List<LoginProfile>();
|
||||
|
||||
if (AuthContext.IsAuthenticated)
|
||||
{
|
||||
linkedAccounts = AccountLinker.Get("webstudio").GetLinkedProfiles(AuthContext.CurrentAccount.ID.ToString());
|
||||
}
|
||||
|
||||
fromOnly = string.IsNullOrWhiteSpace(fromOnly) ? string.Empty : fromOnly.ToLower();
|
||||
|
||||
foreach (var provider in ProviderManager.AuthProviders.Where(provider => string.IsNullOrEmpty(fromOnly) || fromOnly == provider || (provider == "google" && fromOnly == "openid")))
|
||||
{
|
||||
if (inviteView && provider.ToLower() == "twitter") continue;
|
||||
|
||||
var loginProvider = ProviderManager.GetLoginProvider(provider);
|
||||
if (loginProvider != null && loginProvider.IsEnabled)
|
||||
{
|
||||
|
||||
var url = VirtualPathUtility.ToAbsolute("~/login.ashx") + $"?auth={provider}";
|
||||
var mode = (settingsView || inviteView || (!MobileDetector.IsMobile() && !Request.DesktopApp())
|
||||
? ("&mode=popup&callback=" + clientCallback)
|
||||
: ("&mode=Redirect&returnurl="
|
||||
+ HttpUtility.UrlEncode(new Uri(Request.GetUrlRewriter(),
|
||||
"Auth.aspx"
|
||||
+ (Request.DesktopApp() ? "?desktop=true" : "")
|
||||
).ToString())
|
||||
));
|
||||
|
||||
infos.Add(new AccountInfo
|
||||
{
|
||||
Linked = linkedAccounts.Any(x => x.Provider == provider),
|
||||
Provider = provider,
|
||||
Url = url + mode
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return infos;
|
||||
}
|
||||
|
||||
|
||||
[Update("thirdparty/linkaccount")]
|
||||
public void LinkAccountFromBody([FromBody]LinkAccountModel model)
|
||||
|
@ -1,4 +1,4 @@
|
||||
namespace ASC.Web.Api.Models
|
||||
namespace ASC.People.Models
|
||||
{
|
||||
public class AccountInfo
|
||||
{
|
@ -43,7 +43,6 @@ using ASC.Common;
|
||||
using ASC.Common.Caching;
|
||||
using ASC.Common.Logging;
|
||||
using ASC.Common.Utils;
|
||||
using ASC.Common.Web;
|
||||
using ASC.Core;
|
||||
using ASC.Core.Billing;
|
||||
using ASC.Core.Common.Configuration;
|
||||
@ -59,16 +58,13 @@ using ASC.Data.Storage;
|
||||
using ASC.Data.Storage.Configuration;
|
||||
using ASC.Data.Storage.Encryption;
|
||||
using ASC.Data.Storage.Migration;
|
||||
using ASC.FederatedLogin;
|
||||
using ASC.FederatedLogin.LoginProviders;
|
||||
using ASC.FederatedLogin.Profile;
|
||||
using ASC.IPSecurity;
|
||||
using ASC.MessagingSystem;
|
||||
using ASC.Security.Cryptography;
|
||||
using ASC.Web.Api.Models;
|
||||
using ASC.Web.Api.Routing;
|
||||
using ASC.Web.Core;
|
||||
using ASC.Web.Core.Mobile;
|
||||
using ASC.Web.Core.PublicResources;
|
||||
using ASC.Web.Core.Sms;
|
||||
using ASC.Web.Core.Users;
|
||||
@ -122,8 +118,6 @@ namespace ASC.Api.Settings
|
||||
private IPSecurity.IPSecurity IpSecurity { get; }
|
||||
private IMemoryCache MemoryCache { get; }
|
||||
private ProviderManager ProviderManager { get; }
|
||||
private MobileDetector MobileDetector { get; }
|
||||
private IOptionsSnapshot<AccountLinker> AccountLinker { get; }
|
||||
private FirstTimeTenantSettings FirstTimeTenantSettings { get; }
|
||||
private UserManager UserManager { get; }
|
||||
private TenantManager TenantManager { get; }
|
||||
@ -220,8 +214,6 @@ namespace ASC.Api.Settings
|
||||
IPSecurity.IPSecurity ipSecurity,
|
||||
IMemoryCache memoryCache,
|
||||
ProviderManager providerManager,
|
||||
MobileDetector mobileDetector,
|
||||
IOptionsSnapshot<AccountLinker> accountLinker,
|
||||
FirstTimeTenantSettings firstTimeTenantSettings,
|
||||
ServiceClient serviceClient,
|
||||
TelegramHelper telegramHelper,
|
||||
@ -247,8 +239,6 @@ namespace ASC.Api.Settings
|
||||
IpSecurity = ipSecurity;
|
||||
MemoryCache = memoryCache;
|
||||
ProviderManager = providerManager;
|
||||
MobileDetector = mobileDetector;
|
||||
AccountLinker = accountLinker;
|
||||
FirstTimeTenantSettings = firstTimeTenantSettings;
|
||||
MessageService = messageService;
|
||||
StudioNotifyService = studioNotifyService;
|
||||
@ -649,51 +639,6 @@ namespace ASC.Api.Settings
|
||||
return new QuotaWrapper(Tenant, CoreBaseSettings, CoreConfiguration, TenantExtra, TenantStatisticsProvider, AuthContext, SettingsManager, WebItemManager);
|
||||
}
|
||||
|
||||
|
||||
[AllowAnonymous]
|
||||
[Read("authproviders")]
|
||||
public ICollection<AccountInfo> GetAuthProviders(bool inviteView, bool settingsView, string clientCallback, string fromOnly)
|
||||
{
|
||||
ICollection<AccountInfo> infos = new List<AccountInfo>();
|
||||
IEnumerable<LoginProfile> linkedAccounts = new List<LoginProfile>();
|
||||
|
||||
if (AuthContext.IsAuthenticated)
|
||||
{
|
||||
linkedAccounts = AccountLinker.Get("webstudio").GetLinkedProfiles(AuthContext.CurrentAccount.ID.ToString());
|
||||
}
|
||||
|
||||
fromOnly = string.IsNullOrWhiteSpace(fromOnly) ? string.Empty : fromOnly.ToLower();
|
||||
|
||||
foreach (var provider in ProviderManager.AuthProviders.Where(provider => string.IsNullOrEmpty(fromOnly) || fromOnly == provider || (provider == "google" && fromOnly == "openid")))
|
||||
{
|
||||
if (inviteView && provider.ToLower() == "twitter") continue;
|
||||
|
||||
var loginProvider = ProviderManager.GetLoginProvider(provider);
|
||||
if (loginProvider != null && loginProvider.IsEnabled)
|
||||
{
|
||||
|
||||
var url = VirtualPathUtility.ToAbsolute("~/login.ashx") + $"?auth={provider}";
|
||||
var mode = (settingsView || inviteView || (!MobileDetector.IsMobile() && !Request.DesktopApp())
|
||||
? ("&mode=popup&callback=" + clientCallback)
|
||||
: ("&mode=Redirect&returnurl="
|
||||
+ HttpUtility.UrlEncode(new Uri(Request.GetUrlRewriter(),
|
||||
"Auth.aspx"
|
||||
+ (Request.DesktopApp() ? "?desktop=true" : "")
|
||||
).ToString())
|
||||
));
|
||||
|
||||
infos.Add(new AccountInfo
|
||||
{
|
||||
Linked = linkedAccounts.Any(x => x.Provider == provider),
|
||||
Provider = provider,
|
||||
Url = url + mode
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return infos;
|
||||
}
|
||||
|
||||
[AllowAnonymous]
|
||||
[Read("cultures", Check = false)]
|
||||
public IEnumerable<object> GetSupportedCultures()
|
||||
|
@ -37,7 +37,7 @@ using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
namespace ASC.Web.Api.Controllers
|
||||
{
|
||||
[Scope(Additional = typeof(ThirdPartyControllerExtension))]
|
||||
[Scope(Additional = typeof(BaseLoginProviderExtension))]
|
||||
[DefaultRoute]
|
||||
[ApiController]
|
||||
public class ThirdPartyController : ControllerBase
|
||||
@ -140,17 +140,4 @@ namespace ASC.Web.Api.Controllers
|
||||
return url;
|
||||
}
|
||||
}
|
||||
|
||||
public class ThirdPartyControllerExtension
|
||||
{
|
||||
public static void Register(DIHelper services)
|
||||
{
|
||||
services.TryAdd<BoxLoginProvider>();
|
||||
services.TryAdd<DropboxLoginProvider>();
|
||||
services.TryAdd<OneDriveLoginProvider>();
|
||||
services.TryAdd<DocuSignLoginProvider>();
|
||||
services.TryAdd<GoogleLoginProvider>();
|
||||
services.TryAdd<WordpressLoginProvider>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -93,17 +93,21 @@ const Editor = () => {
|
||||
//showLoader();
|
||||
|
||||
const docApiUrl = await getDocServiceUrl();
|
||||
const success = await checkIsAuthenticated();
|
||||
|
||||
if (!doc) {
|
||||
const success = await checkIsAuthenticated();
|
||||
|
||||
if (!success) {
|
||||
return tryRedirectTo(combineUrl(AppServerConfig.proxyURL, "/login"));
|
||||
} else {
|
||||
setIsAuthenticated(success);
|
||||
}
|
||||
if (!doc && !success) {
|
||||
return tryRedirectTo(combineUrl(AppServerConfig.proxyURL, "/login"));
|
||||
}
|
||||
|
||||
if (success) {
|
||||
try {
|
||||
fileInfo = await getFileInfo(fileId);
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
}
|
||||
|
||||
setIsAuthenticated(success);
|
||||
}
|
||||
fileInfo = await getFileInfo(fileId);
|
||||
|
||||
config = await openEdit(fileId, version, doc);
|
||||
|
||||
@ -145,7 +149,8 @@ const Editor = () => {
|
||||
if (
|
||||
config &&
|
||||
config.document.permissions.edit &&
|
||||
config.document.permissions.modifyFilter
|
||||
config.document.permissions.modifyFilter &&
|
||||
fileInfo
|
||||
) {
|
||||
const sharingSettings = await SharingDialog.getSharingSettings(fileId);
|
||||
config.document.info = {
|
||||
@ -249,20 +254,36 @@ const Editor = () => {
|
||||
config.type = "mobile";
|
||||
}
|
||||
|
||||
const filterObj = FilesFilter.getDefault();
|
||||
filterObj.folder = fileInfo.folderId;
|
||||
const urlFilter = filterObj.toUrlParams();
|
||||
let goback;
|
||||
|
||||
config.editorConfig.customization = {
|
||||
...config.editorConfig.customization,
|
||||
goback: {
|
||||
if (fileInfo) {
|
||||
const filterObj = FilesFilter.getDefault();
|
||||
filterObj.folder = fileInfo.folderId;
|
||||
const urlFilter = filterObj.toUrlParams();
|
||||
|
||||
goback = {
|
||||
blank: true,
|
||||
requestClose: false,
|
||||
text: i18n.t("FileLocation"),
|
||||
url: `${combineUrl(filesUrl, `/filter?${urlFilter}`)}`,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
config.editorConfig.customization = {
|
||||
...config.editorConfig.customization,
|
||||
goback,
|
||||
};
|
||||
|
||||
let onRequestSharingSettings;
|
||||
|
||||
if (
|
||||
fileInfo &&
|
||||
config.document.permissions.edit &&
|
||||
config.document.permissions.modifyFilter
|
||||
) {
|
||||
onRequestSharingSettings = onSDKRequestSharingSettings;
|
||||
}
|
||||
|
||||
const events = {
|
||||
events: {
|
||||
onAppReady: onSDKAppReady,
|
||||
@ -272,10 +293,7 @@ const Editor = () => {
|
||||
onInfo: onSDKInfo,
|
||||
onWarning: onSDKWarning,
|
||||
onError: onSDKError,
|
||||
...(config.document.permissions.edit &&
|
||||
config.document.permissions.modifyFilter && {
|
||||
onRequestSharingSettings: onSDKRequestSharingSettings,
|
||||
}),
|
||||
onRequestSharingSettings,
|
||||
},
|
||||
};
|
||||
|
||||
@ -357,13 +375,14 @@ const Editor = () => {
|
||||
{!isLoading ? (
|
||||
<>
|
||||
<div id="editor"></div>
|
||||
|
||||
<SharingDialog
|
||||
isVisible={isVisible}
|
||||
sharingObject={fileInfo}
|
||||
onCancel={onCancel}
|
||||
onSuccess={updateUsersRightsList}
|
||||
/>
|
||||
{fileInfo && (
|
||||
<SharingDialog
|
||||
isVisible={isVisible}
|
||||
sharingObject={fileInfo}
|
||||
onCancel={onCancel}
|
||||
onSuccess={updateUsersRightsList}
|
||||
/>
|
||||
)}
|
||||
</>
|
||||
) : (
|
||||
<Box paddingProp="16px">
|
||||
|
Loading…
Reference in New Issue
Block a user