diff options
| author | Eric Reed <ebr@mediabrowser3.com> | 2015-09-26 16:27:13 -0400 |
|---|---|---|
| committer | Eric Reed <ebr@mediabrowser3.com> | 2015-09-26 16:27:13 -0400 |
| commit | 7404114fee8a06983261bb7a8e361c00ed8b3d7a (patch) | |
| tree | ee686aef6b3f4b2c50ebdec29607e92d183e7c6a | |
| parent | ebc95ffb9af1d8fabe94c2686af8e816018e34ef (diff) | |
Add store registration endpoint (pointing to test)
5 files changed, 79 insertions, 1 deletions
diff --git a/MediaBrowser.Api/PluginService.cs b/MediaBrowser.Api/PluginService.cs index eb49914eb..224a88881 100644 --- a/MediaBrowser.Api/PluginService.cs +++ b/MediaBrowser.Api/PluginService.cs @@ -118,6 +118,30 @@ namespace MediaBrowser.Api public string Name { get; set; } } + [Route("/Appstore/Register", "POST", Summary = "Registers an appstore sale")] + [Authenticated] + public class RegisterAppstoreSale + { + [ApiMember(Name = "Store", Description = "Store Name", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "POST")] + public string Store { get; set; } + [ApiMember(Name = "Application", Description = "Application id", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "POST")] + public string Application { get; set; } + [ApiMember(Name = "Product", Description = "Product id", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "POST")] + public string Product { get; set; } + [ApiMember(Name = "Type", Description = "Type of product (Product or Subscription)", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "POST")] + public string Type { get; set; } + [ApiMember(Name = "StoreId", Description = "Store User Id (if needed)", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")] + public string StoreId { get; set; } + [ApiMember(Name = "StoreToken", Description = "Unique ID for this purchase in the store", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "POST")] + public string StoreToken { get; set; } + [ApiMember(Name = "Feature", Description = "Emby Feature Id", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "POST")] + public string Feature { get; set; } + [ApiMember(Name = "Email", Description = "Email address for purchase", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "POST")] + public string Email { get; set; } + [ApiMember(Name = "Amount", Description = "String representation of price (can have currency sign)", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "POST")] + public string Amount { get; set; } + } + /// <summary> /// Class PluginsService /// </summary> @@ -265,6 +289,12 @@ namespace MediaBrowser.Api return ToOptimizedSerializedResultUsingCache(result); } + public async Task Post(RegisterAppstoreSale request) + { + var success = await _securityManager.RegisterAppStoreSale(request.Store, request.Application, request.Product, request.Type, request.StoreId, request.StoreToken, request.Email, request.Amount); + if (!success) throw new ApplicationException("Error registering store sale"); + } + /// <summary> /// Posts the specified request. /// </summary> diff --git a/MediaBrowser.Common.Implementations/Security/PluginSecurityManager.cs b/MediaBrowser.Common.Implementations/Security/PluginSecurityManager.cs index ec3613298..4880b326e 100644 --- a/MediaBrowser.Common.Implementations/Security/PluginSecurityManager.cs +++ b/MediaBrowser.Common.Implementations/Security/PluginSecurityManager.cs @@ -18,6 +18,7 @@ namespace MediaBrowser.Common.Implementations.Security public class PluginSecurityManager : ISecurityManager { private const string MBValidateUrl = MbAdmin.HttpsUrl + "service/registration/validate"; + private const string AppstoreRegUrl = /*MbAdmin.HttpsUrl*/ "https://wwwm.mb3admin.com/test/admin/" + "service/appstore/register"; /// <summary> /// The _is MB supporter @@ -185,6 +186,44 @@ namespace MediaBrowser.Common.Implementations.Security } } + public async Task<Boolean> RegisterAppStoreSale(string store, string application, string product, + string type, string storeId, string storeToken, string email, string amt) + { + var data = new Dictionary<string, string>() + { + {"store", store}, + {"application", application}, + {"product", product}, + {"type", type}, + {"storeId", storeId}, + {"token", storeToken}, + {"email", email}, + {"amt", amt} + }; + + try + { + using (var json = await _httpClient.Post(AppstoreRegUrl, data, CancellationToken.None).ConfigureAwait(false)) + { + var reg = _jsonSerializer.DeserializeFromStream<RegRecord>(json); + if (!String.IsNullOrEmpty(reg.key)) + { + SupporterKey = reg.key; + } + + return true; + } + + } + catch (Exception e) + { + _logger.ErrorException("Error registering appstore purchase {0}", e, _jsonSerializer.SerializeToString(data)); + //TODO - really need to write this to a file so we can re-try it automatically + return false; + } + + } + private async Task<MBRegistrationRecord> GetRegistrationStatusInternal(string feature, string mb2Equivalent = null, string version = null) diff --git a/MediaBrowser.Common.Implementations/Security/RegRecord.cs b/MediaBrowser.Common.Implementations/Security/RegRecord.cs index f4e4337bf..ece70b772 100644 --- a/MediaBrowser.Common.Implementations/Security/RegRecord.cs +++ b/MediaBrowser.Common.Implementations/Security/RegRecord.cs @@ -7,5 +7,6 @@ namespace MediaBrowser.Common.Implementations.Security public string featId { get; set; } public bool registered { get; set; } public DateTime expDate { get; set; } + public string key { get; set; } } }
\ No newline at end of file diff --git a/MediaBrowser.Common/Security/ISecurityManager.cs b/MediaBrowser.Common/Security/ISecurityManager.cs index 935454353..17bd88b65 100644 --- a/MediaBrowser.Common/Security/ISecurityManager.cs +++ b/MediaBrowser.Common/Security/ISecurityManager.cs @@ -1,3 +1,4 @@ +using System; using MediaBrowser.Model.Entities; using System.Threading.Tasks; @@ -41,6 +42,13 @@ namespace MediaBrowser.Common.Security Task LoadAllRegistrationInfo(); /// <summary> + /// Register an appstore sale + /// </summary> + /// <returns>true if successful</returns> + Task<Boolean> RegisterAppStoreSale(string store, string application, string product, + string type, string storeId, string storeToken, string email, string amt); + + /// <summary> /// Gets the supporter information. /// </summary> /// <returns>Task<SupporterInfo>.</returns> diff --git a/MediaBrowser.ServerApplication/App.config b/MediaBrowser.ServerApplication/App.config index 14ce35a96..709b6de92 100644 --- a/MediaBrowser.ServerApplication/App.config +++ b/MediaBrowser.ServerApplication/App.config @@ -12,7 +12,7 @@ <targets async="true"></targets> </nlog> <appSettings> - <add key="DebugProgramDataPath" value="..\..\..\ProgramData-Server" /> + <add key="DebugProgramDataPath" value="c:\users\eric\appdata\roaming\mediabrowser-server\" /> <add key="ReleaseProgramDataPath" value=".." /> <add key="ClientSettingsProvider.ServiceUri" value="" /> </appSettings> |
