namespace ASC.Files.Api; public class ThirdpartyController : ApiControllerBase { private readonly CoreBaseSettings _coreBaseSettings; private readonly EasyBibHelper _easyBibHelper; private readonly EntryManager _entryManager; private readonly FilesSettingsHelper _filesSettingsHelper; private readonly FileStorageService _fileStorageServiceInt; private readonly FileStorageService _fileStorageServiceString; private readonly FolderDtoHelper _folderDtoHelper; private readonly GlobalFolderHelper _globalFolderHelper; private readonly SecurityContext _securityContext; private readonly ThirdpartyConfiguration _thirdpartyConfiguration; private readonly UserManager _userManager; private readonly WordpressHelper _wordpressHelper; private readonly WordpressToken _wordpressToken; public ThirdpartyController( FilesControllerHelper filesControllerHelperInt, FilesControllerHelper filesControllerHelperString, CoreBaseSettings coreBaseSettings, ConsumerFactory consumerFactory, EntryManager entryManager, FilesSettingsHelper filesSettingsHelper, FileStorageService fileStorageServiceInt, FileStorageService fileStorageServiceString, FolderDtoHelper folderWrapperHelper, GlobalFolderHelper globalFolderHelper, SecurityContext securityContext, ThirdpartyConfiguration thirdpartyConfiguration, UserManager userManager, WordpressHelper wordpressHelper, WordpressToken wordpressToken ) : base(filesControllerHelperInt, filesControllerHelperString) { _userManager = userManager; _wordpressHelper = wordpressHelper; _wordpressToken = wordpressToken; _folderDtoHelper = folderWrapperHelper; _globalFolderHelper = globalFolderHelper; _securityContext = securityContext; _thirdpartyConfiguration = thirdpartyConfiguration; _coreBaseSettings = coreBaseSettings; _entryManager = entryManager; _fileStorageServiceInt = fileStorageServiceInt; _fileStorageServiceString = fileStorageServiceString; _filesSettingsHelper = filesSettingsHelper; _easyBibHelper = consumerFactory.Get(); } /// /// Get a list of available providers /// /// Third-Party Integration /// List of provider key /// List of provider key: DropboxV2, Box, WebDav, Yandex, OneDrive, SharePoint, GoogleDrive /// [Read("thirdparty/capabilities")] public List> Capabilities() { var result = new List>(); if (_userManager.GetUsers(_securityContext.CurrentAccount.ID).IsVisitor(_userManager) || (!_filesSettingsHelper.EnableThirdParty && !_coreBaseSettings.Personal)) { return result; } return _thirdpartyConfiguration.GetProviders(); } /// false [Create("wordpress")] public bool CreateWordpressPostFromBody([FromBody] CreateWordpressPostRequestDto inDto) { return CreateWordpressPost(inDto); } [Create("wordpress")] [Consumes("application/x-www-form-urlencoded")] public bool CreateWordpressPostFromForm([FromForm] CreateWordpressPostRequestDto inDto) { return CreateWordpressPost(inDto); } /// /// Removes the third party file storage service account with the ID specified in the request /// /// Provider ID. Provider id is part of folder id. /// Example, folder id is "sbox-123", then provider id is "123" /// /// Remove third party account /// Third-Party Integration /// Folder id /// [Delete("thirdparty/{providerId:int}")] public Task DeleteThirdPartyAsync(int providerId) { return _fileStorageServiceString.DeleteThirdPartyAsync(providerId.ToString(CultureInfo.InvariantCulture)); } /// false [Read("wordpress-delete")] public object DeleteWordpressInfo() { var token = _wordpressToken.GetToken(); if (token != null) { _wordpressToken.DeleteToken(token); return new { success = true }; } return new { success = false }; } /// false [Create("easybib-citation")] public object EasyBibCitationBookFromBody([FromBody] EasyBibCitationBookRequestDto inDto) { return EasyBibCitationBook(inDto); } [Create("easybib-citation")] [Consumes("application/x-www-form-urlencoded")] public object EasyBibCitationBookFromForm([FromForm] EasyBibCitationBookRequestDto inDto) { return EasyBibCitationBook(inDto); } /// /// Returns the list of third party services connected in the 'Common Documents' section /// /// Third-Party Integration /// Get third party folder /// Connected providers folder [Read("thirdparty/common")] public async Task>> GetCommonThirdPartyFoldersAsync() { var parent = await _fileStorageServiceInt.GetFolderAsync(await _globalFolderHelper.FolderCommonAsync); var thirdpartyFolders = await _entryManager.GetThirpartyFoldersAsync(parent); var result = new List>(); foreach (var r in thirdpartyFolders) { result.Add(await _folderDtoHelper.GetAsync(r)); } return result; } /// false [Read("easybib-citation-list")] public object GetEasybibCitationList(int source, string data) { try { var citationList = EasyBibHelper.GetEasyBibCitationsList(source, data); return new { success = true, citations = citationList }; } catch (Exception) { return new { success = false }; } } /// false [Read("easybib-styles")] public object GetEasybibStyles() { try { var data = EasyBibHelper.GetEasyBibStyles(); return new { success = true, styles = data }; } catch (Exception) { return new { success = false }; } } /// /// Returns the list of all connected third party services /// /// Third-Party Integration /// Get third party list /// Connected providers [Read("thirdparty")] public async Task> GetThirdPartyAccountsAsync() { return await _fileStorageServiceString.GetThirdPartyAsync(); } /// false [Read("wordpress-info")] public object GetWordpressInfo() { var token = _wordpressToken.GetToken(); if (token != null) { var meInfo = _wordpressHelper.GetWordpressMeInfo(token.AccessToken); var blogId = JObject.Parse(meInfo).Value("token_site_id"); var wordpressUserName = JObject.Parse(meInfo).Value("username"); var blogInfo = RequestHelper.PerformRequest(WordpressLoginProvider.WordpressSites + blogId, "", "GET", ""); var jsonBlogInfo = JObject.Parse(blogInfo); jsonBlogInfo.Add("username", wordpressUserName); blogInfo = jsonBlogInfo.ToString(); return new { success = true, data = blogInfo }; } return new { success = false }; } /// /// Saves the third party file storage service account /// /// Save third party account /// Connection url for SharePoint /// Login /// Password /// Authentication token /// /// Title /// Provider Key /// Provider ID /// Third-Party Integration /// Folder contents /// List of provider key: DropboxV2, Box, WebDav, Yandex, OneDrive, SharePoint, GoogleDrive /// [Create("thirdparty")] public Task> SaveThirdPartyFromBodyAsync([FromBody] ThirdPartyRequestDto inDto) { return SaveThirdPartyAsync(inDto); } [Create("thirdparty")] [Consumes("application/x-www-form-urlencoded")] public Task> SaveThirdPartyFromFormAsync([FromForm] ThirdPartyRequestDto inDto) { return SaveThirdPartyAsync(inDto); } /// false [Create("wordpress-save")] public object WordpressSaveFromBody([FromBody] WordpressSaveRequestDto inDto) { return WordpressSave(inDto); } [Create("wordpress-save")] [Consumes("application/x-www-form-urlencoded")] public object WordpressSaveFromForm([FromForm] WordpressSaveRequestDto inDto) { return WordpressSave(inDto); } private bool CreateWordpressPost(CreateWordpressPostRequestDto inDto) { try { var token = _wordpressToken.GetToken(); var meInfo = _wordpressHelper.GetWordpressMeInfo(token.AccessToken); var parser = JObject.Parse(meInfo); if (parser == null) return false; var blogId = parser.Value("token_site_id"); if (blogId != null) { var createPost = _wordpressHelper.CreateWordpressPost(inDto.Title, inDto.Content, inDto.Status, blogId, token); return createPost; } return false; } catch (Exception) { return false; } } private object EasyBibCitationBook(EasyBibCitationBookRequestDto inDto) { try { var citat = _easyBibHelper.GetEasyBibCitation(inDto.CitationData); if (citat != null) { return new { success = true, citation = citat }; } else { return new { success = false }; } } catch (Exception) { return new { success = false }; } } private async Task> SaveThirdPartyAsync(ThirdPartyRequestDto inDto) { var thirdPartyParams = new ThirdPartyParams { AuthData = new AuthData(inDto.Url, inDto.Login, inDto.Password, inDto.Token), Corporate = inDto.IsCorporate, CustomerTitle = inDto.CustomerTitle, ProviderId = inDto.ProviderId, ProviderKey = inDto.ProviderKey, }; var folder = await _fileStorageServiceString.SaveThirdPartyAsync(thirdPartyParams); return await _folderDtoHelper.GetAsync(folder); } private object WordpressSave(WordpressSaveRequestDto inDto) { if (inDto.Code.Length == 0) { return new { success = false }; } try { var token = _wordpressToken.SaveTokenFromCode(inDto.Code); var meInfo = _wordpressHelper.GetWordpressMeInfo(token.AccessToken); var blogId = JObject.Parse(meInfo).Value("token_site_id"); var wordpressUserName = JObject.Parse(meInfo).Value("username"); var blogInfo = RequestHelper.PerformRequest(WordpressLoginProvider.WordpressSites + blogId, "", "GET", ""); var jsonBlogInfo = JObject.Parse(blogInfo); jsonBlogInfo.Add("username", wordpressUserName); blogInfo = jsonBlogInfo.ToString(); return new { success = true, data = blogInfo }; } catch (Exception) { return new { success = false }; } } }