Skip to content

Commit

Permalink
Show release version on both apps and new release (#721)
Browse files Browse the repository at this point in the history
* Added changes to show release version on both apps and new release version message

* Fix casing and remove unused reference

* Added logic to handle exceptions

* Added OSS language
  • Loading branch information
santhoshb-msft authored Aug 15, 2024
1 parent db99c0d commit 31c7abd
Show file tree
Hide file tree
Showing 22 changed files with 343 additions and 18 deletions.
6 changes: 5 additions & 1 deletion src/AdminSite/Controllers/ApplicationConfigController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,11 @@ public class ApplicationConfigController : BaseController
/// </summary>
private readonly IEmailTemplateRepository emailTemplateRepository;

public ApplicationConfigController(IApplicationConfigRepository applicationConfigRepository,IEmailTemplateRepository emailTemplateRepository, SaaSClientLogger<ApplicationConfigController> logger) : base(applicationConfigRepository)
public ApplicationConfigController(
IApplicationConfigRepository applicationConfigRepository,
IEmailTemplateRepository emailTemplateRepository,
IAppVersionService appVersionService,
SaaSClientLogger<ApplicationConfigController> logger) : base(applicationConfigRepository, appVersionService)
{
this.appConfigService = new ApplicationConfigService(applicationConfigRepository);
this.emailTemplateRepository = emailTemplateRepository;
Expand Down
6 changes: 5 additions & 1 deletion src/AdminSite/Controllers/ApplicationLogController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,11 @@ public class ApplicationLogController : BaseController

private readonly IApplicationLogRepository appLogRepository;

public ApplicationLogController(IApplicationLogRepository applicationLogRepository, SaaSClientLogger<ApplicationLogController> logger, IApplicationConfigRepository applicationConfigRepository):base(applicationConfigRepository)
public ApplicationLogController(
IApplicationLogRepository applicationLogRepository,
IAppVersionService appVersionService,
SaaSClientLogger<ApplicationLogController> logger,
IApplicationConfigRepository applicationConfigRepository): base(applicationConfigRepository, appVersionService)
{
this.appLogRepository = applicationLogRepository;
this.logger = logger;
Expand Down
19 changes: 17 additions & 2 deletions src/AdminSite/Controllers/BaseController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,14 @@ public class BaseController : Controller
/// </summary>
///
private readonly ApplicationConfigService applicationConfigService;
public BaseController(IApplicationConfigRepository applicationConfigRepository)

private readonly IAppVersionService appVersionService;
public BaseController(IApplicationConfigRepository applicationConfigRepository,
IAppVersionService appVersionService)
{
this.applicationConfigService = new ApplicationConfigService(applicationConfigRepository);
this.CheckAuthentication();
this.appVersionService = appVersionService;
}

public override void OnActionExecuting(ActionExecutingContext filterContext)
Expand All @@ -42,7 +46,7 @@ public override void OnActionExecuting(ActionExecutingContext filterContext)
TempData["SupportMeteredBilling"] = "0";
}
}

ViewData["AppVersion"] = appVersionService?.Version;
base.OnActionExecuting(filterContext);
}
/// <summary>
Expand Down Expand Up @@ -129,4 +133,15 @@ public IActionResult CheckAuthentication()
}
}


/// <summary>
/// Gets the Application Version
/// </summary>
/// <value>
/// The name of the Application Version.
/// </value>
public string GetAppReleaseVersion()
{
return this.appVersionService?.Version;
}
}
50 changes: 49 additions & 1 deletion src/AdminSite/Controllers/HomeController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
using Marketplace.SaaS.Accelerator.Services.Configurations;
using Marketplace.SaaS.Accelerator.Services.Contracts;
using Marketplace.SaaS.Accelerator.Services.Exceptions;
using Marketplace.SaaS.Accelerator.Services.Helpers;
using Marketplace.SaaS.Accelerator.Services.Models;
using Marketplace.SaaS.Accelerator.Services.Services;
using Marketplace.SaaS.Accelerator.Services.StatusHandlers;
Expand All @@ -21,6 +22,7 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json.Linq;

namespace Marketplace.SaaS.Accelerator.AdminSite.Controllers;

Expand Down Expand Up @@ -100,11 +102,14 @@ public class HomeController : BaseController

private readonly ApplicationConfigService applicationConfigService;

private readonly ISAGitReleasesService sAGitReleasesService;

private UserService userService;

private SubscriptionService subscriptionService = null;

private ApplicationLogService applicationLogService = null;

private SaaSApiClientConfiguration saaSApiClientConfiguration;

/// <summary>
Expand Down Expand Up @@ -132,7 +137,28 @@ public class HomeController : BaseController
/// <param name="offersRepository">The offers repository.</param>
/// <param name="offersAttributeRepository">The offers attribute repository.</param>
public HomeController(
IUsersRepository usersRepository, IMeteredBillingApiService billingApiService, ISubscriptionsRepository subscriptionRepo, IPlansRepository planRepository, ISubscriptionUsageLogsRepository subscriptionUsageLogsRepository, IMeteredDimensionsRepository dimensionsRepository, ISubscriptionLogRepository subscriptionLogsRepo, IApplicationConfigRepository applicationConfigRepository, IUsersRepository userRepository, IFulfillmentApiService fulfillApiService, IApplicationLogRepository applicationLogRepository, IEmailTemplateRepository emailTemplateRepository, IPlanEventsMappingRepository planEventsMappingRepository, IEventsRepository eventsRepository, SaaSApiClientConfiguration saaSApiClientConfiguration, ILoggerFactory loggerFactory, IEmailService emailService, IOffersRepository offersRepository, IOfferAttributesRepository offersAttributeRepository, SaaSClientLogger<HomeController> logger) : base(applicationConfigRepository)
IUsersRepository usersRepository,
IMeteredBillingApiService billingApiService,
ISubscriptionsRepository subscriptionRepo,
IPlansRepository planRepository,
ISubscriptionUsageLogsRepository subscriptionUsageLogsRepository,
IMeteredDimensionsRepository dimensionsRepository,
ISubscriptionLogRepository subscriptionLogsRepo,
IApplicationConfigRepository applicationConfigRepository,
IUsersRepository userRepository,
IFulfillmentApiService fulfillApiService,
IApplicationLogRepository applicationLogRepository,
IEmailTemplateRepository emailTemplateRepository,
IPlanEventsMappingRepository planEventsMappingRepository,
IEventsRepository eventsRepository,
SaaSApiClientConfiguration saaSApiClientConfiguration,
ILoggerFactory loggerFactory,
IEmailService emailService,
IOffersRepository offersRepository,
IOfferAttributesRepository offersAttributeRepository,
IAppVersionService appVersionService,
ISAGitReleasesService sAGitReleasesService,
SaaSClientLogger<HomeController> logger) : base(applicationConfigRepository, appVersionService)
{
this.billingApiService = billingApiService;
this.subscriptionRepo = subscriptionRepo;
Expand All @@ -158,6 +184,7 @@ public HomeController(
this.offersAttributeRepository = offersAttributeRepository;
this.loggerFactory = loggerFactory;
this.saaSApiClientConfiguration = saaSApiClientConfiguration;
this.sAGitReleasesService = sAGitReleasesService;

this.pendingActivationStatusHandlers = new PendingActivationStatusHandler(
fulfillApiService,
Expand Down Expand Up @@ -211,6 +238,27 @@ public IActionResult Index()
this.applicationConfigService.SaveFileToDisk("LogoFile", "contoso-sales.png");
this.applicationConfigService.SaveFileToDisk("FaviconFile", "favicon.ico");

try
{
// Get the latest release version from GitHub
var latestReleaseVersion = this.sAGitReleasesService.GetLatestReleaseFromGitHub();

// If its come back empty then there is nothing we can check
if (!String.IsNullOrEmpty(latestReleaseVersion))
{
// Get the current release version from the app
var appReleaseVersion = GetAppReleaseVersion();

// Check if the latest release is newer than the current release
TempData["ShowNewVersionMessage"] = NewSAVersionCheckHelper.IsNewVersionAvailable(latestReleaseVersion, appReleaseVersion);
}
}
catch (Exception ex)
{
//This exception is for release version check is not critical, hence logging and continue
this.logger.LogError($"Release version check error:{ex.Message} :: {ex.InnerException}");
}

var userId = this.userService.AddUser(this.GetCurrentUserDetail());
return this.View();
}
Expand Down
7 changes: 6 additions & 1 deletion src/AdminSite/Controllers/KnownUsersController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using Marketplace.SaaS.Accelerator.DataAccess.Contracts;
using Marketplace.SaaS.Accelerator.DataAccess.Entities;
using Marketplace.SaaS.Accelerator.DataAccess.Services;
using Marketplace.SaaS.Accelerator.Services.Services;
using Marketplace.SaaS.Accelerator.Services.Utilities;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
Expand All @@ -25,7 +26,11 @@ public class KnownUsersController : BaseController
/// <param name = "knownUsersRepository" > The known users repository.</param>
/// <param name="logger">The logger.</param>

public KnownUsersController(IKnownUsersRepository knownUsersRepository, SaaSClientLogger<KnownUsersController> logger, IApplicationConfigRepository applicationConfigRepository):base(applicationConfigRepository)
public KnownUsersController(
IKnownUsersRepository knownUsersRepository,
IAppVersionService appVersionService,
SaaSClientLogger<KnownUsersController> logger,
IApplicationConfigRepository applicationConfigRepository):base(applicationConfigRepository, appVersionService)
{
this.knownUsersRepository = knownUsersRepository;
this.logger = logger;
Expand Down
4 changes: 3 additions & 1 deletion src/AdminSite/Controllers/OffersController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,9 @@ public OffersController(
IApplicationConfigRepository applicationConfigRepository,
IUsersRepository usersRepository,
IValueTypesRepository valueTypesRepository,
IOfferAttributesRepository offersAttributeRepository, SaaSClientLogger<OffersController> logger):base(applicationConfigRepository)
IOfferAttributesRepository offersAttributeRepository,
IAppVersionService appVersionService,
SaaSClientLogger<OffersController> logger):base(applicationConfigRepository, appVersionService)
{
this.applicationConfigRepository = applicationConfigRepository;
this.usersRepository = usersRepository;
Expand Down
10 changes: 9 additions & 1 deletion src/AdminSite/Controllers/PlansController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,15 @@ public class PlansController : BaseController
/// <param name="offerAttributeRepository">The offer attribute repository.</param>
/// <param name="offerRepository">The offer repository.</param>
/// <param name="logger">The logger.</param>
public PlansController(ISubscriptionsRepository subscriptionRepository, IUsersRepository usersRepository, IApplicationConfigRepository applicationConfigRepository, IPlansRepository plansRepository, IOfferAttributesRepository offerAttributeRepository, IOffersRepository offerRepository, SaaSClientLogger<PlansController> logger):base(applicationConfigRepository)
public PlansController(
ISubscriptionsRepository subscriptionRepository,
IUsersRepository usersRepository,
IApplicationConfigRepository applicationConfigRepository,
IPlansRepository plansRepository,
IOfferAttributesRepository offerAttributeRepository,
IOffersRepository offerRepository,
IAppVersionService appVersionService,
SaaSClientLogger<PlansController> logger):base(applicationConfigRepository, appVersionService)
{
this.subscriptionRepository = subscriptionRepository;
this.usersRepository = usersRepository;
Expand Down
6 changes: 4 additions & 2 deletions src/AdminSite/Controllers/SchedulerController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -56,15 +56,17 @@ public class SchedulerController : BaseController
/// <param name="offerAttributeRepository">The offer attribute repository.</param>
/// <param name="offerRepository">The offer repository.</param>
/// <param name="logger">The logger.</param>
public SchedulerController(ISubscriptionsRepository subscriptionRepository,
public SchedulerController(
ISubscriptionsRepository subscriptionRepository,
IMeteredDimensionsRepository meteredRepository,
ISchedulerFrequencyRepository frequencyRepository,
IPlansRepository plansRepository,
IMeteredPlanSchedulerManagementRepository schedulerRepository,
ISchedulerManagerViewRepository schedulerViewRepository,
IUsersRepository usersRepository,
SaaSClientLogger<SchedulerController> logger,
ISubscriptionUsageLogsRepository subscriptionUsageLogsRepository,IApplicationConfigRepository applicationConfigRepository):base(applicationConfigRepository)
IAppVersionService appVersionService,
ISubscriptionUsageLogsRepository subscriptionUsageLogsRepository,IApplicationConfigRepository applicationConfigRepository):base(applicationConfigRepository, appVersionService)

{
this.usersRepository = usersRepository;
Expand Down
7 changes: 6 additions & 1 deletion src/AdminSite/Startup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
// Licensed under the MIT License. See LICENSE file in the project root for license information.

using System;
using System.Diagnostics;
using System.Reflection;
using Azure.Identity;
using Marketplace.SaaS.Accelerator.AdminSite.Controllers;
using Marketplace.SaaS.Accelerator.DataAccess.Context;
Expand Down Expand Up @@ -138,8 +140,10 @@ public void ConfigureServices(IServiceCollection services)
.AddSingleton<IMeteredBillingApiService>(new MeteredBillingApiService(new MarketplaceMeteringClient(creds), config, new SaaSClientLogger<MeteredBillingApiService>()))
.AddSingleton<SaaSApiClientConfiguration>(config)
.AddSingleton<KnownUsersModel>(knownUsers);


// Read the versionInfo and Add to services
var versionInfo = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location);
services.AddSingleton<IAppVersionService>(new AppVersionService(versionInfo));


services
Expand Down Expand Up @@ -227,6 +231,7 @@ private static void InitializeRepositoryServices(IServiceCollection services)
services.AddScoped<IEventsRepository, EventsRepository>();
services.AddScoped<KnownUserAttribute>();
services.AddScoped<IEmailService, SMTPEmailService>();
services.AddScoped<ISAGitReleasesService, SAGitReleasesService>();
services.AddScoped<ISchedulerFrequencyRepository, SchedulerFrequencyRepository>();
services.AddScoped<IMeteredPlanSchedulerManagementRepository, MeteredPlanSchedulerManagementRepository>();
services.AddScoped<ISchedulerManagerViewRepository, SchedulerManagerViewRepository>();
Expand Down
10 changes: 10 additions & 0 deletions src/AdminSite/Views/Home/Index.cshtml
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
@{
ViewData["Title"] = "Welcome";
bool? showNewVersionMessage = TempData["ShowNewVersionMessage"] as bool?;

}
<div class="pt-5 custom">
<div class="page-title text-capitalize"><h1>Home</h1></div>
Expand All @@ -16,6 +18,14 @@
}

</div>
@if (showNewVersionMessage == null)
{
<div class="text-center">Unable to check if there is any new SaaS accelerator version exists. Please check the repo for any new SaaS Accelerator releases.</div>
}
else if (showNewVersionMessage == true)
{
<div class="text-center">*A New SaaS Accelerator version is available! Please goto the <a href="https://github.com/Azure/Commercial-Marketplace-SaaS-Accelerator/blob/main/docs/Installation-Instructions.md#update-to-a-newer-version-of-the-saas-accelerator" target="_blank">Git repository</a> for upgrade instructions.*</div>
}
</div>
<div class="pagequicklink text-capitalize"><h3>Quicklinks</h3></div>
<ul id="homepage-programs">
Expand Down
2 changes: 1 addition & 1 deletion src/AdminSite/Views/Shared/_Layout.cshtml
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@
</div>
<footer class="cm-footer">
<div class="container text-center">
&copy; 2020 - SaasKit - Demo - OSS not support by Microsoft.
&copy; 2020 - SaasKit - Demo - Version: @ViewData["AppVersion"] - Open-source software not supported by Microsoft.
</div>
</footer>

Expand Down
14 changes: 13 additions & 1 deletion src/CustomerSite/Controllers/BaseController.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
using System.Linq;
using Marketplace.SaaS.Accelerator.Services.Models;
using Marketplace.SaaS.Accelerator.Services.Services;
using Marketplace.SaaS.Accelerator.Services.Utilities;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.OpenIdConnect;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;

namespace Marketplace.SaaS.Accelerator.CustomerSite.Controllers;

Expand All @@ -13,14 +15,24 @@ namespace Marketplace.SaaS.Accelerator.CustomerSite.Controllers;
/// <seealso cref="Microsoft.AspNetCore.Mvc.Controller" />
public class BaseController : Controller
{

private readonly IAppVersionService _appVersionService;

/// <summary>
/// Initializes a new instance of the <see cref="BaseController"/> class.
/// </summary>
public BaseController()
public BaseController(IAppVersionService appVersionService)
{
_appVersionService = appVersionService;
this.CheckAuthentication();
}

public override void OnActionExecuting(ActionExecutingContext context)
{
base.OnActionExecuting(context);
ViewData["AppVersion"] = _appVersionService.Version;
}

/// <summary>
/// Gets Current Logged in User Email Address.
/// </summary>
Expand Down
19 changes: 18 additions & 1 deletion src/CustomerSite/Controllers/HomeController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,24 @@ public class HomeController : BaseController
/// <param name="cloudConfigs">The cloud configs.</param>
/// <param name="loggerFactory">The logger factory.</param>
/// <param name="emailService">The email service.</param>
public HomeController(SaaSClientLogger<HomeController> logger, IFulfillmentApiService apiService, ISubscriptionsRepository subscriptionRepo, IPlansRepository planRepository, IUsersRepository userRepository, IApplicationLogRepository applicationLogRepository, ISubscriptionLogRepository subscriptionLogsRepo, IApplicationConfigRepository applicationConfigRepository, IEmailTemplateRepository emailTemplateRepository, IOffersRepository offersRepository, IPlanEventsMappingRepository planEventsMappingRepository, IOfferAttributesRepository offerAttributesRepository, IEventsRepository eventsRepository, ILoggerFactory loggerFactory, IEmailService emailService,IWebNotificationService webNotificationService)
public HomeController(
SaaSClientLogger<HomeController> logger,
IFulfillmentApiService apiService,
ISubscriptionsRepository subscriptionRepo,
IPlansRepository planRepository,
IUsersRepository userRepository,
IApplicationLogRepository applicationLogRepository,
ISubscriptionLogRepository subscriptionLogsRepo,
IApplicationConfigRepository applicationConfigRepository,
IEmailTemplateRepository emailTemplateRepository,
IOffersRepository offersRepository,
IPlanEventsMappingRepository planEventsMappingRepository,
IOfferAttributesRepository offerAttributesRepository,
IEventsRepository eventsRepository,
ILoggerFactory loggerFactory,
IEmailService emailService,
IWebNotificationService webNotificationService,
IAppVersionService appVersionService) : base(appVersionService)
{
this.apiService = apiService;
this.subscriptionRepository = subscriptionRepo;
Expand Down
6 changes: 6 additions & 0 deletions src/CustomerSite/Startup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@
using Microsoft.IdentityModel.Protocols.OpenIdConnect;
using Microsoft.Marketplace.SaaS;
using System;
using System.Diagnostics;
using System.Reflection;

namespace Marketplace.SaaS.Accelerator.CustomerSite;

Expand Down Expand Up @@ -117,6 +119,10 @@ public void ConfigureServices(IServiceCollection services)
.AddSingleton<SaaSApiClientConfiguration>(config)
.AddSingleton<ValidateJwtToken>();

// Read the versionInfo and Add to services
var versionInfo = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location);
services.AddSingleton<IAppVersionService>(new AppVersionService(versionInfo));

services
.AddDbContext<SaasKitContext>(options => options.UseSqlServer(this.Configuration.GetConnectionString("DefaultConnection")));

Expand Down
Loading

0 comments on commit 31c7abd

Please sign in to comment.