Compare commits

..

1 Commits

Author SHA1 Message Date
Thomas Fransolet
bc79528591 README.json created online with Bitbucket 2022-10-28 08:37:43 +00:00
206 changed files with 172 additions and 16251 deletions

View File

@ -22,25 +22,20 @@ namespace Manager.Framework.Business
_logger = logger; _logger = logger;
} }
public void TestPassword(string email, string userPassword, string password) public bool Authenticate(string email, string password)
{ {
if (string.IsNullOrWhiteSpace(email)) if (string.IsNullOrWhiteSpace(email))
{ {
_logger.LogError($"Authenticate error: No e-mail provided"); _logger.LogError($"Authenticate error: No e-mail provided");
throw new UnauthorizedAccessException("Authentication error"); throw new UnauthorizedAccessException("Authentication error");
} }
if (string.IsNullOrEmpty(password)) if (string.IsNullOrEmpty(password))
{ {
_logger.LogError($"Authenticate error: No password provided"); _logger.LogError($"Authenticate error: No password provided");
throw new UnauthorizedAccessException("Authentication error"); throw new UnauthorizedAccessException("Authentication error");
} }
if (!PasswordUtils.Compare(userPassword, password, PasswordsPepper)) return true;
{
_logger.LogError($"Authenticate error: passwords doesn't match");
throw new UnauthorizedAccessException("Authentication error");
}
} }
/// <summary> /// <summary>

View File

@ -1,11 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFramework>net6.0</TargetFramework> <TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="6.0.0" /> <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="5.0.0" />
<PackageReference Include="Scrypt.NET" Version="1.3.0" /> <PackageReference Include="Scrypt.NET" Version="1.3.0" />
</ItemGroup> </ItemGroup>

View File

@ -1,7 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using System.Xml.Linq;
namespace Manager.Interfaces.DTO namespace Manager.Interfaces.DTO
{ {
@ -9,37 +8,9 @@ namespace Manager.Interfaces.DTO
{ {
public string id { get; set; } public string id { get; set; }
public string label { get; set; } public string label { get; set; }
public List<TranslationDTO> title { get; set; }
public string imageId { get; set; } // == ResourceId
public string imageSource { get; set; } // == Image url
public string primaryColor { get; set; } public string primaryColor { get; set; }
public string secondaryColor { get; set; } public string secondaryColor { get; set; }
public List<string> languages { get; set; } // fr, en, de, nl => Sélection dans une liste déjà établie dans l'application ! public List<string> languages { get; set; } // fr, en, de, nl => Sélection dans une liste déjà établie dans l'application !
public DateTime dateCreation { get; set; } public DateTime dateCreation { get; set; }
public bool isMobile { get; set; } // MyVisit - True if for mobile (MyVisit)
public bool isTablet { get; set; }
public bool isOffline { get; set; } // MyVisit - True if MyVisit is full offline
/*public string latitude { get; set; } // MyVisit - latitude of visit ? (MyVisit)
public string longitude { get; set; } // MyVisit - True if for mobile (MyVisit)*/
public string instanceId { get; set; }
public List<string> sectionIds { get; set; }
public string loaderImageId { get; set; } // == ResourceId
public string loaderImageUrl { get; set; } // == Image url
public string weatherCity { get; set; } // Weather City // TODO REMOVE
public DateTimeOffset? weatherUpdatedDate { get; set; } // Weather date update (to only refresh) // TODO REMOVE
public string weatherResult { get; set; } // Weather result // TODO REMOVE
public bool isWeather // TODO REMOVE
{
get
{
return weatherCity != null && weatherCity.Trim().Length > 0;
}
}
public bool isDate { get; set; }
public bool isHour { get; set; }
public bool isSectionImageBackground { get; set; } // Use to display background for section main image (or not)
public int? roundedValue { get; set; } // Use to set rounded decoration value
public int? screenPercentageSectionsMainPage { get; set; } // Use to set percentage of screen will be used to show sections (base on center)
} }
} }

View File

@ -16,7 +16,6 @@ namespace Manager.Interfaces.DTO
public bool connected{ get; set; } public bool connected{ get; set; }
public DateTime dateCreation{ get; set; } public DateTime dateCreation{ get; set; }
public DateTime dateUpdate { get; set; } public DateTime dateUpdate { get; set; }
public string instanceId { get; set; }
} }
public class DeviceDetailDTO : DeviceDTO public class DeviceDetailDTO : DeviceDTO

View File

@ -1,4 +1,5 @@
using System; using DevExpress.Xpo;
using System;
using System.Collections.Generic; using System.Collections.Generic;
namespace Manager.Interfaces.DTO namespace Manager.Interfaces.DTO

View File

@ -1,14 +0,0 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Manager.Interfaces.DTO
{
public class InstanceDTO
{
public string id { get; set; }
public string name { get; set; }
public DateTime dateCreation { get; set; }
public int? pinCode { get; set; }
}
}

View File

@ -10,8 +10,7 @@ namespace Manager.Interfaces.DTO
public string id { get; set; } public string id { get; set; }
public ResourceType type { get; set; } public ResourceType type { get; set; }
public string label { get; set; } public string label { get; set; }
public string url { get; set; } // firebase url
public DateTime dateCreation { get; set; } public DateTime dateCreation { get; set; }
public string instanceId { get; set; } public string data { get; set; }
} }
} }

View File

@ -19,12 +19,6 @@ namespace Manager.Interfaces.DTO
public SectionType type { get; set; } // !! If IsSubSection == true => Type can't not be menu ! public SectionType type { get; set; } // !! If IsSubSection == true => Type can't not be menu !
public string data { get; set; } // == Include section type info public string data { get; set; } // == Include section type info
public DateTime dateCreation { get; set; } // == Include section type info public DateTime dateCreation { get; set; } // == Include section type info
public int? order { get; set; } // Order to show public int order { get; set; } // Order to show
public string instanceId { get; set; }
public string latitude { get; set; } // MyVisit - Use to launch automatic content when current location is near
public string longitude { get; set; } // MyVisit - Use to launch automatic content when current location is near
public int? meterZoneGPS { get; set; } // MyVisit - Nbr of meters of the zone to launch content
public bool isBeacon { get; set; } // MyVisit - True if section use beacon, false otherwise
public int? beaconId { get; set; } // MyVisit - Beacon' identifier
} }
} }

View File

@ -1,12 +0,0 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Manager.Interfaces.DTO
{
public class AgendaDTO
{
public List<TranslationDTO> resourceIds { get; set; } // All json files for all languages
public MapProvider? mapProvider { get; set; } // Default = Google
}
}

View File

@ -1,16 +0,0 @@
using Manager.Interfaces.Models;
using System;
using System.Collections.Generic;
using System.Text;
namespace Manager.Interfaces.DTO
{
public class ArticleDTO
{
public List<TranslationDTO> content { get; set; }
public bool isContentTop { get; set; } // MyVisit - True if content is displayed at top, false otherwise
public List<TranslationDTO> audioIds { get; set; }
public bool isReadAudioAuto { get; set; } // MyVisit - True for audio play when open the article / false otherwise
public List<ContentDTO> contents { get; set; }
}
}

View File

@ -8,52 +8,26 @@ namespace Manager.Interfaces.DTO
public class MapDTO public class MapDTO
{ {
public int zoom { get; set; } // Default = 18 public int zoom { get; set; } // Default = 18
public MapTypeApp? mapType { get; set; } // Default = Hybrid for Google public MapTypeApp mapType { get; set; } // Default = Hybrid
public MapTypeMapBox? mapTypeMapbox { get; set; } // Default = standard for MapBox
public MapProvider? mapProvider { get; set; } // Default = Google
public List<GeoPointDTO> points { get; set; } public List<GeoPointDTO> points { get; set; }
public string iconResourceId { get; set; } public string iconResourceId { get; set; }
public string iconSource { get; set; } // url to firebase storage or on internet public string iconSource { get; set; } // url to resource id (local) or on internet
public List<CategorieDTO> categories { get; set; }
public string latitude { get; set; } // Center on
public string longitude { get; set; } // Center on
} }
public class GeoPointDTO public class GeoPointDTO
{ {
public int? id { get; set; } public int id { get; set; }
public List<TranslationDTO> title { get; set; } public List<TranslationDTO> title { get; set; }
public List<TranslationDTO> description { get; set; } public List<TranslationDTO> description { get; set; }
public List<ContentGeoPoint> contents { get; set; } public List<ImageGeoPoint> images { get; set; }
public CategorieDTO categorie { get; set; } // TO DELETE IN FUTURE
public int? categorieId { get; set; }
public string latitude { get; set; } public string latitude { get; set; }
public string longitude { get; set; } public string longitude { get; set; }
}
public class ImageGeoPoint
{
public string imageResourceId { get; set; } public string imageResourceId { get; set; }
public string imageUrl { get; set; } public string imageSource { get; set; } // url to resource id (local) or on internet
public List<TranslationDTO> schedules { get; set; }
public List<TranslationDTO> prices { get; set; }
public List<TranslationDTO> phone { get; set; }
public List<TranslationDTO> email { get; set; }
public List<TranslationDTO> site { get; set; }
}
public class CategorieDTO
{
public int? id { get; set; }
public List<TranslationDTO> label { get; set; }
public string icon { get; set; } // icon material
public string iconResourceId { get; set; } // icon point geo
public string iconUrl { get; set; } // url to firebase storage or on internet
public int? order { get; set; } // Order to show
}
public class ContentGeoPoint
{
public string resourceId { get; set; }
public ResourceType resourceType { get; set; }
public string resourceUrl { get; set; } // url to firebase storage or on internet
public string resourceName { get; set; }
} }
public enum MapTypeApp public enum MapTypeApp
@ -64,21 +38,4 @@ namespace Manager.Interfaces.DTO
terrain, terrain,
hybrid hybrid
} }
public enum MapProvider
{
Google,
MapBox
}
public enum MapTypeMapBox
{
standard,
streets,
outdoors,
light,
dark,
satellite,
satellite_streets
}
} }

View File

@ -1,17 +0,0 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Manager.Interfaces.DTO
{
public class PdfDTO
{
public List<PDFFileDTO> pdfs { get; set; }
}
public class PDFFileDTO
{
public List<TranslationAndResourceDTO> pdfFilesAndTitles { get; set; }
public int? order { get; set; } // Order to show
}
}

View File

@ -1,16 +0,0 @@
using Manager.Interfaces.Models;
using System;
using System.Collections.Generic;
using System.Text;
namespace Manager.Interfaces.DTO
{
public class PuzzleDTO
{
public List<TranslationAndResourceDTO> messageDebut { get; set; }
public List<TranslationAndResourceDTO> messageFin { get; set; }
public ContentDTO image { get; set; } // But only image is possible
public int rows { get; set; } = 3;
public int cols { get; set; } = 3;
}
}

View File

@ -1,38 +0,0 @@
using System;
using System.Collections.Generic;
using System.Security.AccessControl;
using System.Text;
namespace Manager.Interfaces.DTO
{
public class QuizzDTO
{
public List<QuestionDTO> questions { get; set; }
public LevelDTO bad_level { get; set; }
public LevelDTO medium_level { get; set; }
public LevelDTO good_level { get; set; }
public LevelDTO great_level { get; set; }
}
public class QuestionDTO
{
public List<TranslationAndResourceDTO> label { get; set; }
public List<ResponseDTO> responses { get; set; }
public string imageBackgroundResourceId { get; set; } // question image background
public ResourceType? imageBackgroundResourceType { get; set; }
public string imageBackgroundResourceUrl { get; set; } // url to firebase storage or on internet
public int order { get; set; } // Order to show
}
public class ResponseDTO
{
public List<TranslationAndResourceDTO> label { get; set; }
public bool isGood { get; set; }
public int order { get; set; } // Order to show
}
public class LevelDTO
{
public List<TranslationAndResourceDTO> label { get; set; }
}
}

View File

@ -7,16 +7,14 @@ namespace Manager.Interfaces.DTO
{ {
public class SliderDTO public class SliderDTO
{ {
public List<ContentDTO> contents { get; set; } public List<ImageDTO> images { get; set; }
} }
public class ContentDTO public class ImageDTO {
{
public List<TranslationDTO> title { get; set; } public List<TranslationDTO> title { get; set; }
public List<TranslationDTO> description { get; set; } public List<TranslationDTO> description { get; set; }
public string resourceId { get; set; } public string resourceId { get; set; }
public string resourceUrl { get; set; } // url to firebase storage or on internet public string source { get; set; } // url to resource id (local) or on internet
public int order { get; set; } // Order to show public int order { get; set; } // Order to show
public ResourceType resourceType { get; set; }
} }
} }

View File

@ -1,13 +0,0 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Manager.Interfaces.DTO
{
public class WeatherDTO
{
public string city { get; set; } // Weather City
public DateTimeOffset? updatedDate { get; set; } // Weather date update (to only refresh)
public string result { get; set; } // Weather result
}
}

View File

@ -10,7 +10,5 @@ namespace Manager.Interfaces.DTO
public string token_type { get; set; } public string token_type { get; set; }
public int expires_in { get; set; } public int expires_in { get; set; }
public DateTimeOffset expiration { get; set; } public DateTimeOffset expiration { get; set; }
public string instanceId { get; set; }
public int? pinCode { get; set; }
} }
} }

View File

@ -1,16 +0,0 @@
using Manager.Interfaces.Models;
using System;
using System.Collections.Generic;
using System.Text;
namespace Manager.Interfaces.DTO
{
public class TranslationAndResourceDTO
{
public string language { get; set; }
public string value { get; set; }
public string resourceId { get; set; } // question image, audio or video
public ResourceType? resourceType { get; set; }
public string resourceUrl { get; set; } // url to firebase storage or on internet
}
}

View File

@ -1,5 +1,4 @@
using Manager.Interfaces.Models; using System;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;

View File

@ -1,10 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFramework>net6.0</TargetFramework> <TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="DevExpress.Xpo" Version="20.1.8" />
<PackageReference Include="MongoDB.Bson" Version="2.12.1" /> <PackageReference Include="MongoDB.Bson" Version="2.12.1" />
</ItemGroup> </ItemGroup>

View File

@ -1,17 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Manager.Interfaces.Models
{
public class CityData
{
//[JsonProperty("lat")]
public double Lat { get; set; }
//[JsonProperty("lon")]
public double Lon { get; set; }
}
}

View File

@ -2,7 +2,6 @@
using MongoDB.Bson.Serialization.Attributes; using MongoDB.Bson.Serialization.Attributes;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Text; using System.Text;
namespace Manager.Interfaces.Models namespace Manager.Interfaces.Models
@ -20,16 +19,6 @@ namespace Manager.Interfaces.Models
[BsonRequired] [BsonRequired]
public string Label { get; set; } public string Label { get; set; }
[BsonElement("Title")]
[BsonRequired]
public List<TranslationDTO> Title { get; set; }
[BsonElement("ImageId")]
public string ImageId { get; set; }
[BsonElement("ImageSource")]
public string ImageSource { get; set; }
[BsonElement("PrimaryColor")] [BsonElement("PrimaryColor")]
public string PrimaryColor { get; set; } public string PrimaryColor { get; set; }
@ -42,77 +31,16 @@ namespace Manager.Interfaces.Models
[BsonElement("DateCreation")] [BsonElement("DateCreation")]
public DateTime DateCreation { get; set; } public DateTime DateCreation { get; set; }
[BsonElement("IsMobile")] public ConfigurationDTO ToDTO()
public bool IsMobile { get; set; }
[BsonElement("IsTablet")]
public bool IsTablet { get; set; }
[BsonElement("IsOffline")]
public bool IsOffline { get; set; }
[BsonElement("InstanceId")]
[BsonRequired]
public string InstanceId { get; set; }
[BsonElement("LoaderImageId")]
public string LoaderImageId { get; set; }
[BsonElement("LoaderImageUrl")]
public string LoaderImageUrl { get; set; }
[BsonElement("WeatherCity")]
public string WeatherCity { get; set; }
[BsonElement("WeatherUpdatedDate")]
public DateTimeOffset? WeatherUpdatedDate { get; set; }
[BsonElement("WeatherResult")]
public string WeatherResult { get; set; }
[BsonElement("IsDate")]
public bool IsDate { get; set; }
[BsonElement("IsHour")]
public bool IsHour { get; set; }
[BsonElement("IsSectionImageBackground")]
public bool IsSectionImageBackground { get; set; }
[BsonElement("RoundedValue")]
public int? RoundedValue { get; set; }
[BsonElement("ScreenPercentageSectionsMainPage")]
public int? ScreenPercentageSectionsMainPage { get; set; }
public ConfigurationDTO ToDTO(List<string> sectionIds)
{ {
return new ConfigurationDTO() return new ConfigurationDTO()
{ {
id = Id, id = Id,
label = Label, label = Label,
title = Title,
imageId = ImageId,
imageSource = ImageSource,
loaderImageId = LoaderImageId,
loaderImageUrl = LoaderImageUrl,
weatherCity = WeatherCity,
weatherUpdatedDate = WeatherUpdatedDate,
weatherResult = WeatherResult,
dateCreation = DateCreation, dateCreation = DateCreation,
primaryColor = PrimaryColor, primaryColor = PrimaryColor,
languages = Languages, languages = Languages,
secondaryColor = SecondaryColor, secondaryColor = SecondaryColor
isMobile = IsMobile,
isTablet = IsTablet,
isOffline = IsOffline,
instanceId = InstanceId,
isDate = IsDate,
isHour = IsHour,
isSectionImageBackground = IsSectionImageBackground,
roundedValue = RoundedValue,
screenPercentageSectionsMainPage = ScreenPercentageSectionsMainPage,
sectionIds = sectionIds
}; };
} }
@ -121,27 +49,12 @@ namespace Manager.Interfaces.Models
{ {
id = Id, id = Id,
label = Label, label = Label,
title= Title,
imageId = ImageId,
imageSource = ImageSource,
loaderImageId = LoaderImageId,
loaderImageUrl = LoaderImageUrl,
weatherCity = WeatherCity,
dateCreation = DateCreation, dateCreation = DateCreation,
primaryColor = PrimaryColor, primaryColor = PrimaryColor,
languages = Languages, languages = Languages,
secondaryColor = SecondaryColor, secondaryColor = SecondaryColor,
isMobile = IsMobile,
isTablet = IsTablet,
isOffline = IsOffline,
sections = sections, sections = sections,
resources = resources, resources = resources
instanceId = InstanceId,
isDate = IsDate,
isSectionImageBackground = IsSectionImageBackground,
roundedValue = RoundedValue,
screenPercentageSectionsMainPage = ScreenPercentageSectionsMainPage,
sectionIds = sections.Select(s => s.id).ToList()
}; };
} }
} }

View File

@ -60,9 +60,6 @@ namespace Manager.Interfaces.Models
[BsonElement("LastConnectionLevel")] [BsonElement("LastConnectionLevel")]
public DateTime LastConnectionLevel { get; set; } public DateTime LastConnectionLevel { get; set; }
[BsonElement("InstanceId")]
[BsonRequired]
public string InstanceId { get; set; }
public DeviceDTO ToDTO() public DeviceDTO ToDTO()
{ {
@ -77,8 +74,7 @@ namespace Manager.Interfaces.Models
configuration = Configuration, configuration = Configuration,
configurationId = ConfigurationId, configurationId = ConfigurationId,
dateUpdate = DateUpdate, dateUpdate = DateUpdate,
dateCreation = DateCreation, dateCreation = DateCreation
instanceId = InstanceId
}; };
} }
@ -99,8 +95,7 @@ namespace Manager.Interfaces.Models
batteryLevel = BatteryLevel, batteryLevel = BatteryLevel,
lastBatteryLevel = LastBatteryLevel, lastBatteryLevel = LastBatteryLevel,
dateUpdate = DateUpdate, dateUpdate = DateUpdate,
dateCreation = DateCreation, dateCreation = DateCreation
instanceId = InstanceId
}; };
} }
} }

View File

@ -1,40 +0,0 @@
using Manager.Interfaces.DTO;
using MongoDB.Bson.Serialization.Attributes;
using System;
using System.Collections.Generic;
using System.Text;
namespace Manager.Interfaces.Models
{
/// <summary>
/// Instance Information
/// </summary>
public class Instance
{
[BsonId]
[BsonRepresentation(MongoDB.Bson.BsonType.ObjectId)]
public string Id { get; set; }
[BsonElement("Name")]
[BsonRequired]
public string Name { get; set; } // UNIQUE !..
[BsonElement("DateCreation")]
public DateTime DateCreation { get; set; }
[BsonElement("PinCode")]
public int? PinCode { get; set; }
public InstanceDTO ToDTO()
{
return new InstanceDTO()
{
id = Id,
name = Name,
dateCreation = DateCreation,
pinCode = PinCode
};
}
}
}

View File

@ -27,23 +27,19 @@ namespace Manager.Interfaces.Models
[BsonElement("DateCreation")] [BsonElement("DateCreation")]
public DateTime DateCreation { get; set; } public DateTime DateCreation { get; set; }
[BsonElement("InstanceId")] [BsonElement("Data")]
[BsonRequired] [BsonRequired]
public string InstanceId { get; set; } public string Data { get; set; }
[BsonElement("URL")] public ResourceDTO ToDTO(bool isExport = false)
public string Url { get; set; } // Firebase url
public ResourceDTO ToDTO()
{ {
return new ResourceDTO() return new ResourceDTO()
{ {
id = Id, id = Id,
label = Label, label = Label,
type = Type, type = Type,
url = Url, data = isExport ? Data : null,
dateCreation = DateCreation, dateCreation = DateCreation
instanceId = InstanceId
}; };
} }
} }
@ -53,10 +49,6 @@ namespace Manager.Interfaces.Models
Image, Image,
Video, Video,
ImageUrl, ImageUrl,
VideoUrl, VideoUrl
Audio,
PDF,
JSON,
JSONUrl
} }
} }

View File

@ -61,25 +61,6 @@ namespace Manager.Interfaces.Models
[BsonRequired] [BsonRequired]
public string Data { get; set; } // Json encapsulated section info public string Data { get; set; } // Json encapsulated section info
[BsonElement("InstanceId")]
[BsonRequired]
public string InstanceId { get; set; }
[BsonElement("IsBeacon")]
public bool IsBeacon { get; set; }
[BsonElement("BeaconId")]
public int? BeaconId { get; set; }
[BsonElement("Latitude")]
public string Latitude { get; set; }
[BsonElement("Longitude")]
public string Longitude { get; set; }
[BsonElement("MeterZoneGPS")]
public int? MeterZoneGPS { get; set; }
public SectionDTO ToDTO() public SectionDTO ToDTO()
{ {
return new SectionDTO() return new SectionDTO()
@ -96,13 +77,7 @@ namespace Manager.Interfaces.Models
isSubSection = IsSubSection, isSubSection = IsSubSection,
parentId = ParentId, parentId = ParentId,
data = Data, data = Data,
dateCreation = DateCreation, dateCreation = DateCreation
instanceId = InstanceId,
isBeacon = IsBeacon,
beaconId = BeaconId,
latitude = Latitude,
longitude = Longitude,
meterZoneGPS = MeterZoneGPS,
}; };
} }
} }
@ -113,12 +88,6 @@ namespace Manager.Interfaces.Models
Slider, Slider,
Video, Video,
Web, Web,
Menu, Menu
Quizz,
Article,
PDF,
Puzzle,
Agenda,
Weather
} }
} }

View File

@ -38,10 +38,6 @@ namespace Manager.Interfaces.Models
[BsonElement("DateCreation")] [BsonElement("DateCreation")]
public DateTime DateCreation { get; set; } public DateTime DateCreation { get; set; }
[BsonElement("InstanceId")]
[BsonRequired]
public string InstanceId { get; set; }
public UserDetailDTO ToDTO() public UserDetailDTO ToDTO()
{ {
return new UserDetailDTO() return new UserDetailDTO()

View File

@ -51,16 +51,16 @@ namespace ManagerService.Service.Controllers
{ {
#if DEBUG #if DEBUG
email = "test@email.be"; email = "test@email.be";
password = "kljqsdkljqsd"; // password = "kljqsdkljqsd"; // W/7aj4NB60i3YFKJq50pbw== password = "W/7aj4NB60i3YFKJq50pbw=="; // password = "kljqsdkljqsd";
#endif #endif
var token = _tokensService.Authenticate(email.ToLower(), password);
// Set user token ? // Set user token ?
var user = _UserDatabaseService.GetByEmail(email.ToLower()); var user = _UserDatabaseService.GetByEmail(email.ToLower());
if (user == null) if (user == null)
throw new KeyNotFoundException("User not found"); throw new KeyNotFoundException("User not found");
var token = _tokensService.Authenticate(user, password);
MqttClientService.SetServices(_DeviceDatabaseService, _ConfigurationDatabaseService); MqttClientService.SetServices(_DeviceDatabaseService, _ConfigurationDatabaseService);
return new OkObjectResult(token); return new OkObjectResult(token);

View File

@ -1,18 +1,13 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Manager.Helpers;
using Manager.Interfaces.DTO; using Manager.Interfaces.DTO;
using Manager.Interfaces.Models; using Manager.Interfaces.Models;
using Manager.Services; using Manager.Services;
using ManagerService.Service.Services; using ManagerService.Service.Services;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.DataProtection.KeyManagement;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Mqtt.Client.AspNetCore.Services; using Mqtt.Client.AspNetCore.Services;
using Newtonsoft.Json; using Newtonsoft.Json;
@ -26,19 +21,15 @@ namespace ManagerService.Controllers
public class ConfigurationController : ControllerBase public class ConfigurationController : ControllerBase
{ {
private ConfigurationDatabaseService _configurationService; private ConfigurationDatabaseService _configurationService;
private InstanceDatabaseService _instanceService;
private SectionDatabaseService _sectionService; private SectionDatabaseService _sectionService;
private ResourceDatabaseService _resourceService; private ResourceDatabaseService _resourceService;
private DeviceDatabaseService _deviceService; private DeviceDatabaseService _deviceService;
private readonly ILogger<ConfigurationController> _logger; private readonly ILogger<ConfigurationController> _logger;
private readonly IConfiguration _configuration;
public ConfigurationController(IConfiguration configuration, ILogger<ConfigurationController> logger, ConfigurationDatabaseService configurationService, InstanceDatabaseService instanceService, SectionDatabaseService sectionService, ResourceDatabaseService resourceService, DeviceDatabaseService deviceService) public ConfigurationController(ILogger<ConfigurationController> logger, ConfigurationDatabaseService configurationService, SectionDatabaseService sectionService, ResourceDatabaseService resourceService, DeviceDatabaseService deviceService)
{ {
_logger = logger; _logger = logger;
_configuration = configuration;
_configurationService = configurationService; _configurationService = configurationService;
_instanceService = instanceService;
_sectionService = sectionService; _sectionService = sectionService;
_resourceService = resourceService; _resourceService = resourceService;
_deviceService = deviceService; _deviceService = deviceService;
@ -47,27 +38,17 @@ namespace ManagerService.Controllers
/// <summary> /// <summary>
/// Get a list of all configuration (summary) /// Get a list of all configuration (summary)
/// </summary> /// </summary>
/// <param name="id">id instance</param>
[AllowAnonymous] [AllowAnonymous]
[ProducesResponseType(typeof(List<ConfigurationDTO>), 200)] [ProducesResponseType(typeof(List<ConfigurationDTO>), 200)]
[ProducesResponseType(typeof(string), 500)] [ProducesResponseType(typeof(string), 500)]
[HttpGet] [HttpGet]
public ObjectResult Get([FromQuery] string instanceId) public ObjectResult Get()
{ {
try try
{ {
List<Configuration> configurations = _configurationService.GetAll(instanceId); List<Configuration> configurations = _configurationService.GetAll();
List<ConfigurationDTO> configurationDTOs = new List<ConfigurationDTO>(); return new OkObjectResult(configurations.Select(r => r.ToDTO()));
foreach(var configuration in configurations)
{
List<string> sectionIds = _sectionService.GetAllIdsFromConfiguration(configuration.Id);
ConfigurationDTO configurationDTO = configuration.ToDTO(sectionIds);
configurationDTOs.Add(configurationDTO);
}
return new OkObjectResult(configurationDTOs.OrderBy(c => c.dateCreation));
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -75,39 +56,6 @@ namespace ManagerService.Controllers
} }
} }
/// <summary>
/// Get Confuguration list by instanceId' pincode
/// </summary>
/// <param name="pinCode">Code pin</param>
[AllowAnonymous]
[ProducesResponseType(typeof(List<ConfigurationDTO>), 200)]
[ProducesResponseType(typeof(string), 404)]
[ProducesResponseType(typeof(string), 500)]
[HttpGet("byPin")]
public ObjectResult GetConfigurationsByPinCode([FromQuery] int pinCode)
{
try
{
Instance instance = _instanceService.GetByPinCode(pinCode);
if (instance == null)
throw new KeyNotFoundException("None instance is linked to this pin code");
List<Configuration> configurations = _configurationService.GetAll(instance.Id);
List<ConfigurationDTO> configurationDTOs = new List<ConfigurationDTO>();
foreach (var configuration in configurations)
{
List<string> sectionIds = _sectionService.GetAllIdsFromConfiguration(configuration.Id);
configurationDTOs.Add(configuration.ToDTO(sectionIds));
}
return new OkObjectResult(configurationDTOs);
}
catch (Exception ex)
{
return new ObjectResult(ex.Message) { StatusCode = 500 };
}
}
/// <summary> /// <summary>
/// Get a specific display configuration /// Get a specific display configuration
@ -118,7 +66,7 @@ namespace ManagerService.Controllers
[ProducesResponseType(typeof(string), 404)] [ProducesResponseType(typeof(string), 404)]
[ProducesResponseType(typeof(string), 500)] [ProducesResponseType(typeof(string), 500)]
[HttpGet("{id}")] [HttpGet("{id}")]
public async Task<ObjectResult> GetDetailAsync(string id) public ObjectResult GetDetail(string id)
{ {
try try
{ {
@ -127,73 +75,7 @@ namespace ManagerService.Controllers
if (configuration == null) if (configuration == null)
throw new KeyNotFoundException("This configuration was not found"); throw new KeyNotFoundException("This configuration was not found");
List<string> sectionIds = _sectionService.GetAllIdsFromConfiguration(id); return new OkObjectResult(configuration.ToDTO());
try
{
var weatherSections = _sectionService.GetAllWeatherSectionsFromConfiguration(id);
foreach (var weatherSection in weatherSections)
{
WeatherDTO weatherDTO = JsonConvert.DeserializeObject<WeatherDTO>(weatherSection.Data);
if (weatherDTO.city != null && weatherDTO.city.Length >= 2 &&
(weatherDTO.updatedDate == null || weatherDTO.updatedDate.Value.AddHours(3) < DateTimeOffset.Now)) // Update all 4 hours
{
// Call Openweather api with token from appSettings and update result with json
var apiKey = _configuration.GetSection("OpenWeatherApiKey").Get<string>();
if (apiKey != null && apiKey.Length > 0)
{
string url = $"http://api.openweathermap.org/geo/1.0/direct?q={weatherDTO.city}&limit=1&appid={apiKey}";
using (HttpClient client = new HttpClient())
{
try
{
HttpResponseMessage response = await client.GetAsync(url);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
List<CityData> cities = JsonConvert.DeserializeObject<List<CityData>>(responseBody);
if (cities.Count > 0)
{
double lat = cities[0].Lat;
double lon = cities[0].Lon;
//string onecallUrl = $"https://api.openweathermap.org/data/3.0/onecall?lat={lat}&lon={lon}&appid={apiKey}";
string callUrl = $"https://api.openweathermap.org/data/2.5/forecast?lat={lat}&lon={lon}&units=metric&appid={apiKey}";
HttpResponseMessage callResponse = await client.GetAsync(callUrl);
callResponse.EnsureSuccessStatusCode();
string callResponseBody = await callResponse.Content.ReadAsStringAsync();
weatherDTO.updatedDate = DateTimeOffset.Now;
weatherDTO.result = callResponseBody;
weatherSection.Data = JsonConvert.SerializeObject(weatherDTO);
_sectionService.Update(weatherSection.Id, weatherSection);
}
else
{
Console.WriteLine("Aucune ville trouvée.");
}
}
catch (HttpRequestException e)
{
Console.WriteLine($"Une erreur s'est produite lors de la requête HTTP : {e.Message}");
}
}
}
}
}
} catch (Exception e)
{
Console.WriteLine($"Une erreur s'est produite lors de la mise à jour des sections de type météo : {e.Message}");
}
return new OkObjectResult(configuration.ToDTO(sectionIds));
} }
catch (KeyNotFoundException ex) catch (KeyNotFoundException ex)
{ {
@ -223,37 +105,15 @@ namespace ManagerService.Controllers
// Todo add some verification ? // Todo add some verification ?
Configuration configuration = new Configuration(); Configuration configuration = new Configuration();
configuration.InstanceId = newConfiguration.instanceId;
configuration.Label = newConfiguration.label; configuration.Label = newConfiguration.label;
configuration.Title = new List<TranslationDTO>();
configuration.ImageId = newConfiguration.imageId;
configuration.ImageSource = newConfiguration.imageSource;
configuration.PrimaryColor = newConfiguration.primaryColor; configuration.PrimaryColor = newConfiguration.primaryColor;
configuration.SecondaryColor = newConfiguration.secondaryColor; configuration.SecondaryColor = newConfiguration.secondaryColor;
configuration.LoaderImageId = newConfiguration.loaderImageId; configuration.Languages = new List<string> { "FR", "NL", "EN", "DE" }; // by default all languages
configuration.LoaderImageUrl = newConfiguration.loaderImageUrl;
configuration.WeatherCity = newConfiguration.weatherCity;
configuration.WeatherUpdatedDate = null;
configuration.WeatherResult = null;
configuration.IsDate = newConfiguration.isDate;
configuration.IsHour = newConfiguration.isHour;
configuration.IsSectionImageBackground = true;
configuration.RoundedValue = newConfiguration.roundedValue;
configuration.ScreenPercentageSectionsMainPage = newConfiguration.screenPercentageSectionsMainPage;
configuration.Languages = _configuration.GetSection("SupportedLanguages").Get<List<string>>();
//configuration.Languages = new List<string> { "FR", "NL", "EN", "DE" }; // by default all languages
configuration.Title = LanguageInit.Init("Title", configuration.Languages);
configuration.DateCreation = DateTime.Now; configuration.DateCreation = DateTime.Now;
configuration.IsMobile = newConfiguration.isMobile;
configuration.IsTablet = newConfiguration.isTablet;
configuration.IsOffline = newConfiguration.isOffline;
Configuration configurationCreated = _configurationService.Create(configuration); Configuration configurationCreated = _configurationService.Create(configuration);
return new OkObjectResult(configurationCreated.ToDTO(new List<string>())); // Empty list return new OkObjectResult(configurationCreated.ToDTO());
} }
catch (ArgumentNullException ex) catch (ArgumentNullException ex)
{ {
@ -292,38 +152,16 @@ namespace ManagerService.Controllers
throw new KeyNotFoundException("Configuration does not exist"); throw new KeyNotFoundException("Configuration does not exist");
// Todo add some verification ? // Todo add some verification ?
configuration.InstanceId = updatedConfiguration.instanceId;
configuration.Label = updatedConfiguration.label; configuration.Label = updatedConfiguration.label;
configuration.Title = updatedConfiguration.title;
configuration.ImageId = updatedConfiguration.imageId;
configuration.ImageSource = updatedConfiguration.imageSource;
configuration.PrimaryColor = updatedConfiguration.primaryColor; configuration.PrimaryColor = updatedConfiguration.primaryColor;
configuration.SecondaryColor = updatedConfiguration.secondaryColor; configuration.SecondaryColor = updatedConfiguration.secondaryColor;
configuration.Languages = updatedConfiguration.languages; configuration.Languages = updatedConfiguration.languages;
configuration.IsMobile = updatedConfiguration.isMobile;
configuration.IsTablet = updatedConfiguration.isTablet;
configuration.IsOffline = updatedConfiguration.isOffline;
configuration.LoaderImageId = updatedConfiguration.loaderImageId;
configuration.LoaderImageUrl = updatedConfiguration.loaderImageUrl;
configuration.WeatherCity = updatedConfiguration.weatherCity;
if (configuration.WeatherCity != updatedConfiguration.weatherCity)
{
configuration.WeatherUpdatedDate = null;
configuration.WeatherResult = null;
}
configuration.IsDate = updatedConfiguration.isDate;
configuration.IsHour = updatedConfiguration.isHour;
configuration.IsSectionImageBackground = updatedConfiguration.isSectionImageBackground;
configuration.RoundedValue = updatedConfiguration.roundedValue;
configuration.ScreenPercentageSectionsMainPage = updatedConfiguration.screenPercentageSectionsMainPage;
Configuration configurationModified = _configurationService.Update(updatedConfiguration.id, configuration); Configuration configurationModified = _configurationService.Update(updatedConfiguration.id, configuration);
MqttClientService.PublishMessage($"config/{configurationModified.Id}", JsonConvert.SerializeObject(new PlayerMessageDTO() { configChanged = true })); MqttClientService.PublishMessage($"config/{configurationModified.Id}", JsonConvert.SerializeObject(new PlayerMessageDTO() { configChanged = true }));
List<string> sectionIds = _sectionService.GetAllIdsFromConfiguration(configuration.Id); return new OkObjectResult(configurationModified.ToDTO());
return new OkObjectResult(configurationModified.ToDTO(sectionIds));
} }
catch (ArgumentNullException ex) catch (ArgumentNullException ex)
{ {
@ -395,14 +233,12 @@ namespace ManagerService.Controllers
/// Export a configuration /// Export a configuration
/// </summary> /// </summary>
/// <param name="id">Id of configuration to export</param> /// <param name="id">Id of configuration to export</param>
/// <param name="language">Language to export</param> [ProducesResponseType(typeof(ExportConfigurationDTO), 200)]
[AllowAnonymous]
[ProducesResponseType(typeof(FileContentResult), 200)]
[ProducesResponseType(typeof(string), 400)] [ProducesResponseType(typeof(string), 400)]
[ProducesResponseType(typeof(string), 404)] [ProducesResponseType(typeof(string), 404)]
[ProducesResponseType(typeof(string), 500)] [ProducesResponseType(typeof(string), 500)]
[HttpGet("{id}/export")] [HttpGet("{id}/export")]
public FileContentResult Export(string id, [FromQuery] string language) public ObjectResult Export(string id)
{ {
try try
{ {
@ -410,23 +246,12 @@ namespace ManagerService.Controllers
throw new ArgumentNullException("Configuration param is null"); throw new ArgumentNullException("Configuration param is null");
Configuration configuration = _configurationService.GetById(id); Configuration configuration = _configurationService.GetById(id);
if (configuration == null) if (configuration == null)
throw new KeyNotFoundException("Configuration does not exist"); throw new KeyNotFoundException("Configuration does not exist");
List<SectionDTO> sectionDTOs = _sectionService.GetAllFromConfigurationEvenSubsection(configuration.Id).Select(s => s.ToDTO()).ToList(); List<SectionDTO> sectionDTOs = _sectionService.GetAllFromConfiguration(configuration.Id).Select(s => s.ToDTO()).ToList();
List<ResourceDTO> resourceDTOs = new List<ResourceDTO>(); List<ResourceDTO> resourceDTOs = new List<ResourceDTO>();
if (configuration.ImageId != null)
{
addResourceToList(resourceDTOs, configuration.ImageId);
}
if (configuration.LoaderImageId != null)
{
addResourceToList(resourceDTOs, configuration.LoaderImageId);
}
foreach (var section in sectionDTOs) foreach (var section in sectionDTOs)
{ {
if (section.imageId != null) { if (section.imageId != null) {
@ -442,25 +267,10 @@ namespace ManagerService.Controllers
} }
foreach (var point in mapDTO.points) { foreach (var point in mapDTO.points) {
if (point.imageResourceId != null) foreach (var image in point.images) {
{ if (image.imageResourceId != null)
addResourceToList(resourceDTOs, point.imageResourceId);
}
foreach (var content in point.contents) {
if (content.resourceId != null)
{ {
addResourceToList(resourceDTOs, content.resourceId); addResourceToList(resourceDTOs, image.imageResourceId);
}
}
}
if (mapDTO.categories != null && mapDTO.categories.Count > 0)
{
foreach (var categorie in mapDTO.categories)
{
if (categorie.iconResourceId != null)
{
addResourceToList(resourceDTOs, categorie.iconResourceId);
} }
} }
} }
@ -468,154 +278,36 @@ namespace ManagerService.Controllers
break; break;
case SectionType.Slider: case SectionType.Slider:
SliderDTO sliderDTO = JsonConvert.DeserializeObject<SliderDTO>(section.data); SliderDTO sliderDTO = JsonConvert.DeserializeObject<SliderDTO>(section.data);
foreach (var content in sliderDTO.contents) foreach (var image in sliderDTO.images)
{ {
if (content.resourceId != null) if (image.resourceId != null)
{ {
addResourceToList(resourceDTOs, content.resourceId); addResourceToList(resourceDTOs, image.resourceId);
}
}
break;
case SectionType.Quizz:
QuizzDTO quizzDTO = JsonConvert.DeserializeObject<QuizzDTO>(section.data);
foreach (var question in quizzDTO.questions)
{
if (question.label != null)
{
foreach (var questionLabel in question.label)
{
addResourceToList(resourceDTOs, questionLabel.resourceId);
}
}
if (question.imageBackgroundResourceId != null)
{
addResourceToList(resourceDTOs, question.imageBackgroundResourceId);
}
foreach (var response in question.responses)
{
if (response.label != null)
{
foreach (var responseLabel in response.label)
{
addResourceToList(resourceDTOs, responseLabel.resourceId);
}
}
}
}
if (quizzDTO.bad_level != null)
{
if (quizzDTO.bad_level.label != null)
{
foreach (var badLevelLabel in quizzDTO.bad_level.label)
{
addResourceToList(resourceDTOs, badLevelLabel.resourceId);
}
}
}
if (quizzDTO.medium_level != null)
{
if (quizzDTO.medium_level.label != null)
{
foreach (var medium_levelLabel in quizzDTO.medium_level.label)
{
addResourceToList(resourceDTOs, medium_levelLabel.resourceId);
}
}
}
if (quizzDTO.good_level != null)
{
if (quizzDTO.good_level.label != null)
{
foreach (var good_levelLabel in quizzDTO.good_level.label)
{
addResourceToList(resourceDTOs, good_levelLabel.resourceId);
}
}
}
if (quizzDTO.great_level != null)
{
if (quizzDTO.great_level.label != null)
{
foreach (var great_levelLabel in quizzDTO.great_level.label)
{
addResourceToList(resourceDTOs, great_levelLabel.resourceId);
}
}
}
break;
case SectionType.Article:
ArticleDTO articleDTO = JsonConvert.DeserializeObject<ArticleDTO>(section.data);
foreach (var content in articleDTO.contents)
{
if (content.resourceId != null)
{
addResourceToList(resourceDTOs, content.resourceId);
}
}
// If not a language is used for export in manager, if one is the myvisit app
var audios = language != null ? articleDTO.audioIds.Where(a => a.language == language) : articleDTO.audioIds;
foreach (var audio in audios)
{
if (audio.value != null)
{
addResourceToList(resourceDTOs, audio.value);
}
}
break;
case SectionType.PDF:
PdfDTO pdfDTO = JsonConvert.DeserializeObject<PdfDTO>(section.data);
foreach (var pdf in pdfDTO.pdfs)
{
foreach (var pdfFileAndTitle in pdf.pdfFilesAndTitles)
{
addResourceToList(resourceDTOs, pdfFileAndTitle.resourceId);
}
}
break;
case SectionType.Agenda:
AgendaDTO agendaDTO = JsonConvert.DeserializeObject<AgendaDTO>(section.data);
var resourceIds = language != null ? agendaDTO.resourceIds.Where(a => a.language == language) : agendaDTO.resourceIds;
foreach (var resourceId in resourceIds)
{
if (resourceId.value != null && resourceId.value.Trim().Length > 0)
{
addResourceToList(resourceDTOs, resourceId.value);
} }
} }
break; break;
case SectionType.Menu: case SectionType.Menu:
case SectionType.Web: case SectionType.Web:
case SectionType.Video: case SectionType.Video:
case SectionType.Weather:
default: default:
break; break;
} }
} }
ExportConfigurationDTO toDownload = configuration.ToExportDTO(sectionDTOs, resourceDTOs);
string jsonString = JsonConvert.SerializeObject(toDownload); return new OkObjectResult(configuration.ToExportDTO(sectionDTOs, resourceDTOs));
var fileName = $"{configuration.Label}.json";
var mimeType = "application/json";
var fileBytes = Encoding.UTF8.GetBytes(jsonString);
return new FileContentResult(fileBytes, mimeType)
{
FileDownloadName = fileName
};
} }
catch (ArgumentNullException ex) catch (ArgumentNullException ex)
{ {
return null; return new BadRequestObjectResult(ex.Message) { };
//return new BadRequestObjectResult(ex.Message) { };
} }
catch (KeyNotFoundException ex) catch (KeyNotFoundException ex)
{ {
return null; return new NotFoundObjectResult(ex.Message) { };
//return new NotFoundObjectResult(ex.Message) { };
} }
catch (Exception ex) catch (Exception ex)
{ {
return null; return new ObjectResult(ex.Message) { StatusCode = 500 };
//return new ObjectResult(ex.Message) { StatusCode = 500 };
} }
} }
@ -642,38 +334,11 @@ namespace ManagerService.Controllers
configuration = new Configuration(); configuration = new Configuration();
configuration.Id = exportConfiguration.id; configuration.Id = exportConfiguration.id;
configuration.InstanceId = exportConfiguration.instanceId;
configuration.Label = exportConfiguration.label; configuration.Label = exportConfiguration.label;
configuration.Title = exportConfiguration.title;
configuration.ImageId = exportConfiguration.imageId;
configuration.ImageSource = exportConfiguration.imageSource;
if (configuration.ImageId != null)
{
createResource(exportConfiguration.resources.Where(r => r.id == configuration.ImageId).FirstOrDefault());
}
configuration.DateCreation = exportConfiguration.dateCreation; configuration.DateCreation = exportConfiguration.dateCreation;
configuration.PrimaryColor = exportConfiguration.primaryColor; configuration.PrimaryColor = exportConfiguration.primaryColor;
configuration.SecondaryColor = exportConfiguration.secondaryColor; configuration.SecondaryColor = exportConfiguration.secondaryColor;
configuration.Languages = exportConfiguration.languages; configuration.Languages = exportConfiguration.languages;
configuration.IsMobile = exportConfiguration.isMobile;
configuration.IsTablet = exportConfiguration.isTablet;
configuration.IsOffline = exportConfiguration.isOffline;
configuration.LoaderImageId = exportConfiguration.loaderImageId;
configuration.LoaderImageUrl = exportConfiguration.loaderImageUrl;
if (configuration.LoaderImageId != null)
{
createResource(exportConfiguration.resources.Where(r => r.id == configuration.LoaderImageId).FirstOrDefault());
}
configuration.WeatherCity = exportConfiguration.weatherCity;
configuration.IsDate = exportConfiguration.isDate;
configuration.IsHour = exportConfiguration.isHour;
configuration.IsSectionImageBackground = exportConfiguration.isSectionImageBackground;
configuration.RoundedValue = exportConfiguration.roundedValue;
configuration.ScreenPercentageSectionsMainPage = exportConfiguration.screenPercentageSectionsMainPage;
_configurationService.Create(configuration); _configurationService.Create(configuration);
@ -681,11 +346,10 @@ namespace ManagerService.Controllers
{ {
Section newSection = new Section(); Section newSection = new Section();
newSection.Id = section.id; newSection.Id = section.id;
newSection.InstanceId = section.instanceId;
newSection.Label = section.label; newSection.Label = section.label;
newSection.Title = section.title; newSection.Title = section.title;
newSection.Description = section.description; newSection.Description = section.description;
newSection.Order = section.order.GetValueOrDefault(); // if one day we can use same section in multiple configuration, need to change that newSection.Order = section.order; // if one day we can use same section in multiple configuration, need to change that
newSection.Type = section.type; newSection.Type = section.type;
newSection.ImageId = section.imageId; newSection.ImageId = section.imageId;
newSection.ImageSource = section.imageSource; newSection.ImageSource = section.imageSource;
@ -694,11 +358,6 @@ namespace ManagerService.Controllers
newSection.ParentId = section.parentId; newSection.ParentId = section.parentId;
newSection.Data = section.data; newSection.Data = section.data;
newSection.DateCreation = section.dateCreation; newSection.DateCreation = section.dateCreation;
newSection.IsBeacon = section.isBeacon;
newSection.BeaconId = section.beaconId;
newSection.Latitude = section.latitude;
newSection.Longitude = section.longitude;
newSection.MeterZoneGPS = section.meterZoneGPS;
if (newSection.ImageId != null) if (newSection.ImageId != null)
{ {
@ -718,119 +377,29 @@ namespace ManagerService.Controllers
foreach (var point in mapDTO.points) foreach (var point in mapDTO.points)
{ {
if (point.imageResourceId != null) foreach (var image in point.images)
{ {
createResource(exportConfiguration.resources.Where(r => r.id == point.imageResourceId).FirstOrDefault()); if (image.imageResourceId != null)
}
foreach (var content in point.contents)
{
if (content.resourceId != null)
{ {
createResource(exportConfiguration.resources.Where(r => r.id == content.resourceId).FirstOrDefault()); createResource(exportConfiguration.resources.Where(r => r.id == image.imageResourceId).FirstOrDefault());
} }
} }
} }
foreach (var categorie in mapDTO.categories)
{
if (categorie.iconResourceId != null)
{
createResource(exportConfiguration.resources.Where(r => r.id == categorie.iconResourceId).FirstOrDefault());
}
}
break; break;
case SectionType.Slider: case SectionType.Slider:
SliderDTO sliderDTO = JsonConvert.DeserializeObject<SliderDTO>(section.data); SliderDTO sliderDTO = JsonConvert.DeserializeObject<SliderDTO>(section.data);
foreach (var content in sliderDTO.contents) foreach (var image in sliderDTO.images)
{ {
if (content.resourceId != null) if (image.resourceId != null)
{ {
createResource(exportConfiguration.resources.Where(r => r.id == content.resourceId).FirstOrDefault()); createResource(exportConfiguration.resources.Where(r => r.id == image.resourceId).FirstOrDefault());
}
}
break;
case SectionType.Quizz:
QuizzDTO quizzDTO = JsonConvert.DeserializeObject<QuizzDTO>(section.data);
foreach (var question in quizzDTO.questions)
{
if (question.label != null)
{
foreach (var questionLabel in question.label)
{
createResource(exportConfiguration.resources.Where(r => r.id == questionLabel.resourceId).FirstOrDefault());
}
}
if (question.imageBackgroundResourceId != null)
{
createResource(exportConfiguration.resources.Where(r => r.id == question.imageBackgroundResourceId).FirstOrDefault());
}
foreach (var response in question.responses)
{
if (response.label != null)
{
foreach (var responseLabel in response.label)
{
createResource(exportConfiguration.resources.Where(r => r.id == responseLabel.resourceId).FirstOrDefault());
}
}
}
}
if (quizzDTO.bad_level != null)
{
if(quizzDTO.bad_level.label != null)
{
foreach (var balLevelLabel in quizzDTO.bad_level.label)
{
createResource(exportConfiguration.resources.Where(r => r.id == balLevelLabel.resourceId).FirstOrDefault());
}
}
}
if (quizzDTO.medium_level != null)
{
if (quizzDTO.medium_level.label != null)
{
foreach (var medium_levelLabel in quizzDTO.medium_level.label)
{
createResource(exportConfiguration.resources.Where(r => r.id == medium_levelLabel.resourceId).FirstOrDefault());
}
}
}
if (quizzDTO.good_level != null)
{
if (quizzDTO.good_level.label != null)
{
foreach (var good_levelLabel in quizzDTO.good_level.label)
{
createResource(exportConfiguration.resources.Where(r => r.id == good_levelLabel.resourceId).FirstOrDefault());
}
}
}
if (quizzDTO.great_level != null)
{
if (quizzDTO.great_level.label != null)
{
foreach (var great_levelLabel in quizzDTO.great_level.label)
{
createResource(exportConfiguration.resources.Where(r => r.id == great_levelLabel.resourceId).FirstOrDefault());
}
}
}
break;
case SectionType.Article:
ArticleDTO articleDTO = JsonConvert.DeserializeObject<ArticleDTO>(section.data);
foreach (var content in articleDTO.contents)
{
if (content.resourceId != null)
{
createResource(exportConfiguration.resources.Where(r => r.id == content.resourceId).FirstOrDefault());
} }
} }
break; break;
case SectionType.Menu: case SectionType.Menu:
case SectionType.Web: case SectionType.Web:
case SectionType.Video: case SectionType.Video:
case SectionType.Weather:
default: default:
break; break;
} }
@ -863,11 +432,10 @@ namespace ManagerService.Controllers
{ {
Resource resource = new Resource(); Resource resource = new Resource();
resource.Id = resourceExport.id; resource.Id = resourceExport.id;
resource.InstanceId = resourceExport.instanceId;
resource.Type = resourceExport.type; resource.Type = resourceExport.type;
resource.Label = resourceExport.label; resource.Label = resourceExport.label;
resource.DateCreation = resourceExport.dateCreation; resource.DateCreation = resourceExport.dateCreation;
//resource.Data = resourceExport.data; resource.Data = resourceExport.data;
if (!_resourceService.IsExist(resourceExport.id)) if (!_resourceService.IsExist(resourceExport.id))
_resourceService.Create(resource); _resourceService.Create(resource);
@ -878,8 +446,8 @@ namespace ManagerService.Controllers
if (!resourceDTOs.Select(r => r.id).Contains(resourceId)) { if (!resourceDTOs.Select(r => r.id).Contains(resourceId)) {
Resource resource = _resourceService.GetById(resourceId); Resource resource = _resourceService.GetById(resourceId);
if (resource != null && !resourceDTOs.Any(r => r.id == resource.Id)) { if (resource != null) {
resourceDTOs.Add(resource.ToDTO()); resourceDTOs.Add(resource.ToDTO(true));
} }
} }
return resourceDTOs; return resourceDTOs;

View File

@ -37,15 +37,14 @@ namespace ManagerService.Controllers
/// <summary> /// <summary>
/// Get a list of all devices /// Get a list of all devices
/// </summary> /// </summary>
/// <param name="id">id instance</param>
[ProducesResponseType(typeof(List<DeviceDTO>), 200)] [ProducesResponseType(typeof(List<DeviceDTO>), 200)]
[ProducesResponseType(typeof(string), 500)] [ProducesResponseType(typeof(string), 500)]
[HttpGet] [HttpGet]
public ObjectResult Get([FromQuery] string instanceId) public ObjectResult Get()
{ {
try try
{ {
List<Device> devices = _deviceService.GetAll(instanceId); List<Device> devices = _deviceService.GetAll();
return new OkObjectResult(devices.Select(d => d.ToDTO())); return new OkObjectResult(devices.Select(d => d.ToDTO()));
} }
@ -122,7 +121,6 @@ namespace ManagerService.Controllers
device.DateCreation = DateTime.Now; device.DateCreation = DateTime.Now;
} }
device.InstanceId = newDevice.instanceId;
device.Name = newDevice.name; device.Name = newDevice.name;
device.Configuration = configuration.Label; device.Configuration = configuration.Label;
device.ConfigurationId = newDevice.configurationId; device.ConfigurationId = newDevice.configurationId;
@ -180,7 +178,6 @@ namespace ManagerService.Controllers
// Todo add some verification ? // Todo add some verification ?
device.Name = updatedDevice.name; device.Name = updatedDevice.name;
device.InstanceId = updatedDevice.instanceId;
device.Identifier = updatedDevice.identifier; device.Identifier = updatedDevice.identifier;
device.IpAddressWLAN = updatedDevice.ipAddressWLAN; device.IpAddressWLAN = updatedDevice.ipAddressWLAN;
device.IpAddressETH = updatedDevice.ipAddressETH; device.IpAddressETH = updatedDevice.ipAddressETH;

View File

@ -1,246 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Manager.Framework.Business;
using Manager.Interfaces.DTO;
using Manager.Interfaces.Models;
using Manager.Services;
using ManagerService.Service.Services;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using NSwag.Annotations;
namespace ManagerService.Controllers
{
[Authorize] // TODO Add ROLES (Roles = "Admin")
[ApiController, Route("api/[controller]")]
[OpenApiTag("Instance", Description = "Instance management")]
public class InstanceController : ControllerBase
{
private InstanceDatabaseService _instanceService;
private UserDatabaseService _userService;
private readonly ILogger<InstanceController> _logger;
private readonly ProfileLogic _profileLogic;
public InstanceController(ILogger<InstanceController> logger, InstanceDatabaseService instanceService, UserDatabaseService userService, ProfileLogic profileLogic)
{
_logger = logger;
_instanceService = instanceService;
_userService = userService;
_profileLogic = profileLogic;
}
/// <summary>
/// Get a list of instance
/// </summary>
[ProducesResponseType(typeof(List<Instance>), 200)]
[ProducesResponseType(typeof(string), 500)]
[HttpGet]
public ObjectResult Get()
{
try
{
List<Instance> instances = _instanceService.GetAll();
return new OkObjectResult(instances);
}
catch (Exception ex)
{
return new ObjectResult(ex.Message) { StatusCode = 500 };
}
}
/// <summary>
/// Get a specific instance
/// </summary>
/// <param name="id">id instance</param>
[ProducesResponseType(typeof(InstanceDTO), 200)]
[ProducesResponseType(typeof(string), 404)]
[ProducesResponseType(typeof(string), 500)]
[HttpGet("{id}")]
public ObjectResult GetDetail(string id)
{
try
{
Instance instance = _instanceService.GetById(id);
if (instance == null)
throw new KeyNotFoundException("This instance was not found");
return new OkObjectResult(instance.ToDTO());
}
catch (KeyNotFoundException ex)
{
return new NotFoundObjectResult(ex.Message) {};
}
catch (Exception ex)
{
return new ObjectResult(ex.Message) { StatusCode = 500 };
}
}
/// <summary>
/// Create an instance
/// </summary>
/// <param name="newInstance">New instance info</param>
//[AllowAnonymous]
[ProducesResponseType(typeof(InstanceDTO), 200)]
[ProducesResponseType(typeof(string), 400)]
[ProducesResponseType(typeof(string), 409)]
[ProducesResponseType(typeof(string), 500)]
[HttpPost]
public ObjectResult CreateInstance([FromBody] Instance newInstance)
{
try
{
if (newInstance == null)
throw new ArgumentNullException("instance param is null");
newInstance.DateCreation = DateTime.Now;
List<Instance> instances = _instanceService.GetAll();
if (instances.Select(i => i.Name).Contains(newInstance.Name))
throw new InvalidOperationException("This name is already used");
Instance instanceCreated = _instanceService.Create(newInstance);
return new OkObjectResult(instanceCreated.ToDTO());
}
catch (ArgumentNullException ex)
{
return new BadRequestObjectResult(ex.Message) {};
}
catch (InvalidOperationException ex)
{
return new ConflictObjectResult(ex.Message) {};
}
catch (Exception ex)
{
return new ObjectResult(ex.Message) { StatusCode = 500 };
}
}
/// <summary>
/// Update an instance
/// </summary>
/// <param name="updatedinstance">instance to update</param>
[ProducesResponseType(typeof(InstanceDTO), 200)]
[ProducesResponseType(typeof(string), 400)]
[ProducesResponseType(typeof(string), 404)]
[ProducesResponseType(typeof(string), 500)]
[HttpPut]
public ObjectResult Updateinstance([FromBody] Instance updatedInstance)
{
try
{
if (updatedInstance == null)
throw new ArgumentNullException("instance param is null");
Instance instance = _instanceService.GetById(updatedInstance.Id);
if (instance == null)
throw new KeyNotFoundException("instance does not exist");
Instance instanceModified = _instanceService.Update(updatedInstance.Id, instance);
return new OkObjectResult(instanceModified.ToDTO());
}
catch (ArgumentNullException ex)
{
return new BadRequestObjectResult(ex.Message) {};
}
catch (KeyNotFoundException ex)
{
return new NotFoundObjectResult(ex.Message) {};
}
catch (Exception ex)
{
return new ObjectResult(ex.Message) { StatusCode = 500 };
}
}
/// <summary>
/// Get Instance by pincode
/// </summary>
/// <param name="pinCode">Code pin</param>
[AllowAnonymous]
[ProducesResponseType(typeof(InstanceDTO), 200)]
[ProducesResponseType(typeof(string), 404)]
[ProducesResponseType(typeof(string), 500)]
[HttpGet("byPin")]
public ObjectResult GetInstanceByPinCode([FromQuery] int pinCode)
{
try
{
Instance instance = _instanceService.GetByPinCode(pinCode);
if (instance == null)
throw new KeyNotFoundException("Instance was not found");
return new OkObjectResult(instance.ToDTO());
}
catch (KeyNotFoundException ex)
{
return new NotFoundObjectResult(ex.Message) { };
}
catch (Exception ex)
{
return new ObjectResult(ex.Message) { StatusCode = 500 };
}
}
/// <summary>
/// Delete an instance
/// </summary>
/// <param name="id">Id of instance to delete</param>
[ProducesResponseType(typeof(string), 202)]
[ProducesResponseType(typeof(string), 400)]
[ProducesResponseType(typeof(string), 404)]
[ProducesResponseType(typeof(string), 500)]
[HttpDelete("{id}")]
public ObjectResult DeleteInstance(string id)
{
try
{
if (id == null)
throw new ArgumentNullException("instance param is null");
Instance instance = _instanceService.GetById(id);
// Delete all user in instance
List<User> users = _userService.GetByInstanceId(instance.Id);
foreach(var user in users)
{
_userService.Remove(user.Id);
}
if (instance == null)
throw new KeyNotFoundException("instance does not exist");
_instanceService.Remove(id);
return new ObjectResult("The instance has been deleted") { StatusCode = 202 };
}
catch (ArgumentNullException ex)
{
return new BadRequestObjectResult(ex.Message) { };
}
catch (KeyNotFoundException ex)
{
return new NotFoundObjectResult(ex.Message) { };
}
catch (Exception ex)
{
return new ObjectResult(ex.Message) { StatusCode = 500 };
}
}
}
}

View File

@ -11,17 +11,12 @@ using System.Threading.Tasks;
using Manager.Interfaces.DTO; using Manager.Interfaces.DTO;
using Manager.Interfaces.Models; using Manager.Interfaces.Models;
using Manager.Services; using Manager.Services;
using ManagerService.Helpers;
using ManagerService.Service.Services; using ManagerService.Service.Services;
using ManagerService.Services;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Server.IIS.Core;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Newtonsoft.Json; using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using NSwag.Annotations; using NSwag.Annotations;
using static System.Net.Mime.MediaTypeNames;
namespace ManagerService.Controllers namespace ManagerService.Controllers
{ {
@ -32,57 +27,28 @@ namespace ManagerService.Controllers
{ {
private ResourceDatabaseService _resourceService; private ResourceDatabaseService _resourceService;
private SectionDatabaseService _sectionService; private SectionDatabaseService _sectionService;
private ConfigurationDatabaseService _configurationService;
private FirebaseService _firebaseService;
private FirebaseStorageService _firebaseStorageService;
private readonly ILogger<ResourceController> _logger; private readonly ILogger<ResourceController> _logger;
private static int MaxWidth = 1024; public ResourceController(ILogger<ResourceController> logger, ResourceDatabaseService resourceService, SectionDatabaseService sectionService)
private static int MaxHeight = 1024;
public ResourceController(ILogger<ResourceController> logger, ResourceDatabaseService resourceService, SectionDatabaseService sectionService, ConfigurationDatabaseService configurationService, FirebaseService firebaseService, FirebaseStorageService firebaseStorageService)
{ {
_logger = logger; _logger = logger;
_resourceService = resourceService; _resourceService = resourceService;
_sectionService = sectionService; _sectionService = sectionService;
_configurationService = configurationService;
_firebaseService = firebaseService;
_firebaseStorageService = firebaseStorageService;
} }
/// <summary> /// <summary>
/// Get a list of all resources (summary) /// Get a list of all resources (summary)
/// </summary> /// </summary>
/// <param name="id">id instance</param>
/// <param name="types">types of resource</param>
[ProducesResponseType(typeof(List<ResourceDTO>), 200)] [ProducesResponseType(typeof(List<ResourceDTO>), 200)]
[ProducesResponseType(typeof(string), 500)] [ProducesResponseType(typeof(string), 500)]
[HttpGet] [HttpGet]
public ObjectResult Get([FromQuery] string instanceId, [FromQuery] List<ResourceType> types) public ObjectResult Get()
{ {
try try
{ {
if (instanceId == null) List<Resource> resources = _resourceService.GetAll();
throw new ArgumentNullException("InstanceId needed");
List<Resource> resources = new List<Resource>();
if (types.Count > 0)
{
resources = _resourceService.GetAllByType(instanceId, types);
}
else
{
resources = _resourceService.GetAll(instanceId);
}
List<ResourceDTO> resourceDTOs = new List<ResourceDTO>(); return new OkObjectResult(resources.Select(r => r.ToDTO(r.Type == ResourceType.ImageUrl)));
foreach(var resource in resources)
{
ResourceDTO resourceDTO = new ResourceDTO();
resourceDTO = resource.ToDTO();
resourceDTOs.Add(resourceDTO);
}
return new OkObjectResult(resourceDTOs.OrderByDescending(r => r.dateCreation));
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -90,6 +56,7 @@ namespace ManagerService.Controllers
} }
} }
/// <summary> /// <summary>
/// Get a specific resource /// Get a specific resource
/// </summary> /// </summary>
@ -108,37 +75,7 @@ namespace ManagerService.Controllers
if (resource == null) if (resource == null)
throw new KeyNotFoundException("This resource was not found"); throw new KeyNotFoundException("This resource was not found");
ResourceDTO resourceDTO = new ResourceDTO(); return new OkObjectResult(resource.ToDTO(resource.Type == ResourceType.ImageUrl));
resourceDTO = resource.ToDTO();
/*if (resource.Type == ResourceType.ImageUrl)
{
var resourceData = _resourceDataService.GetByResourceId(resource.Id);
resourceDTO.data = resourceData != null ? resourceData.Data : null;
}*/
// RESIZE IMAGE
/*byte[] imageBytes = Convert.FromBase64String(resourceData.Data);
using (MemoryStream originalImageMemoryStream = new MemoryStream(imageBytes))
{
using (Image image = Image.FromStream(originalImageMemoryStream))
{
var width = image.Width;
var height = image.Height;
if (image.Width > MaxWidth || image.Height > MaxHeight)
{
Size newSize = ImageResizer.ResizeKeepAspect(image.Size, MaxWidth, MaxHeight);
byte[] resizedImage = ImageResizer.ResizeImage(image, newSize.Width, newSize.Height, image.Width, image.Height);
resourceData.Data = Convert.ToBase64String(resizedImage);
ResourceData resourceModified = _resourceDataService.Update(resourceData.Id, resourceData);
}
}
}*/
return new OkObjectResult(resourceDTO);
} }
catch (KeyNotFoundException ex) catch (KeyNotFoundException ex)
{ {
@ -164,48 +101,22 @@ namespace ManagerService.Controllers
try try
{ {
Resource resource = _resourceService.GetById(id); Resource resource = _resourceService.GetById(id);
if (resource == null) if (resource == null)
throw new KeyNotFoundException("This resource was not found"); throw new KeyNotFoundException("This resource was not found");
//var file = Convert.FromBase64String(resourceData.Data); var file = Convert.FromBase64String(resource.Data);
// RESIZE IMAGE if (resource.Type == ResourceType.Image)
/*using (MemoryStream originalImageMemoryStream = new MemoryStream(file))
{ {
using (Image image = Image.FromStream(originalImageMemoryStream)) return new FileContentResult(file, "image/png");
{
var width = image.Width;
var height = image.Height;
if(image.Width > MaxWidth || image.Height > MaxHeight)
{
Size newSize = ImageResizer.ResizeKeepAspect(image.Size, MaxWidth, MaxHeight);
byte[] resizedImage = ImageResizer.ResizeImage(image, newSize.Width, newSize.Height, image.Width, image.Height);
resourceData.Data = Convert.ToBase64String(resizedImage);
ResourceData resourceModified = _resourceDataService.Update(resourceData.Id, resourceData);
}
}
}*/
/*if (resource.Type == ResourceType.Image)
{
return new FileContentResult(file, "image/png")
{
FileDownloadName = resource.Label + ".png"
};
} }
if (resource.Type == ResourceType.Video || resource.Type == ResourceType.Audio) if (resource.Type == ResourceType.Video)
{ {
return new FileContentResult(file, "application/octet-stream") return new FileContentResult(file, "application/octet-stream");
{
FileDownloadName = resource.Type == ResourceType.Audio ? resource.Label + ".mp3" : resource.Label + ".mp4",
};
} }
return new FileContentResult(file, "image/png");*/ return new FileContentResult(file, "image/png");
return new NotFoundObjectResult("No more supported") { };
} }
catch (KeyNotFoundException ex) catch (KeyNotFoundException ex)
{ {
@ -217,7 +128,6 @@ namespace ManagerService.Controllers
} }
} }
// OLD VERSION
/// <summary> /// <summary>
/// Upload a specific resource (picture or video) /// Upload a specific resource (picture or video)
/// </summary> /// </summary>
@ -225,14 +135,16 @@ namespace ManagerService.Controllers
[ProducesResponseType(typeof(string), 404)] [ProducesResponseType(typeof(string), 404)]
[ProducesResponseType(typeof(string), 500)] [ProducesResponseType(typeof(string), 500)]
[HttpPost("upload"), DisableRequestSizeLimit] [HttpPost("upload"), DisableRequestSizeLimit]
public IActionResult Upload([FromForm] string label, [FromForm] string type, [FromForm] string instanceId) // Create but with local //[FromBody] ResourceDetailDTO uploadResource public IActionResult Upload([FromForm] string label, [FromForm] string type) // Create but with local //[FromBody] ResourceDetailDTO uploadResource
{ {
try try
{ {
if (label == null || type == null || instanceId == null) if (label == null || type == null)
throw new ArgumentNullException("One of resource params is null"); throw new ArgumentNullException("One of resource params is null");
ResourceDTO uploadResource = new ResourceDTO();
uploadResource.type = (ResourceType) Enum.Parse(typeof(ResourceType), type);
uploadResource.label = label;
var resourceType = (ResourceType)Enum.Parse(typeof(ResourceType), type);
List<Resource> resources = new List<Resource>(); List<Resource> resources = new List<Resource>();
foreach (var file in Request.Form.Files) foreach (var file in Request.Form.Files)
@ -240,35 +152,21 @@ namespace ManagerService.Controllers
if (file.Length > 0) if (file.Length > 0)
{ {
var stringResult = ""; var stringResult = "";
double fileSizeibMbs = (double) ((double)file.Length) / (1024*1024); if (file.Length > 0)
if (fileSizeibMbs <= 1.5 || resourceType == ResourceType.Image)
{ {
using (var ms = new MemoryStream()) using (var ms = new MemoryStream())
{ {
file.CopyTo(ms); file.CopyTo(ms);
var fileBytes = ms.ToArray(); var fileBytes = ms.ToArray();
if (resourceType == ResourceType.Image)
{
bool isFort = instanceId == "633ee379d9405f32f166f047"; // If fort saint heribert, TODO add watermark in configuration and model
if(isFort) // TODO We need to know for which purpose (mobile or tablet)
{
fileBytes = ImageHelper.ResizeAndAddWatermark(fileBytes, isFort, MaxWidth, MaxHeight);
}
}
stringResult = Convert.ToBase64String(fileBytes); stringResult = Convert.ToBase64String(fileBytes);
} }
} }
else
{
throw new FileLoadException(message: "Fichier inexistant ou trop volumineux (max 4Mb)");
}
// Todo add some verification ? // Todo add some verification ?
Resource resource = new Resource(); Resource resource = new Resource();
resource.Label = label; resource.Label = uploadResource.label;
resource.Type = resourceType; resource.Type = uploadResource.type;
resource.DateCreation = DateTime.Now; resource.DateCreation = DateTime.Now;
resource.InstanceId = instanceId; resource.Data = stringResult;
Resource resourceCreated = _resourceService.Create(resource); Resource resourceCreated = _resourceService.Create(resource);
resources.Add(resourceCreated); resources.Add(resourceCreated);
} }
@ -279,10 +177,6 @@ namespace ManagerService.Controllers
{ {
return new BadRequestObjectResult(ex.Message) { }; return new BadRequestObjectResult(ex.Message) { };
} }
catch (FileLoadException ex)
{
return new BadRequestObjectResult(ex.Message) { };
}
catch (InvalidOperationException ex) catch (InvalidOperationException ex)
{ {
return new ConflictObjectResult(ex.Message) { }; return new ConflictObjectResult(ex.Message) { };
@ -311,17 +205,14 @@ namespace ManagerService.Controllers
// Todo add some verification ? // Todo add some verification ?
Resource resource = new Resource(); Resource resource = new Resource();
resource.InstanceId = newResource.instanceId;
resource.Label = newResource.label; resource.Label = newResource.label;
resource.Type = newResource.type; resource.Type = newResource.type;
resource.Url = newResource.url;
resource.DateCreation = DateTime.Now; resource.DateCreation = DateTime.Now;
//resource.Data = newResource.data; resource.Data = newResource.data;
resource.InstanceId = newResource.instanceId;
Resource resourceCreated = _resourceService.Create(resource); Resource resourceCreated = _resourceService.Create(resource);
return new OkObjectResult(resourceCreated.ToDTO()); // WITHOUT DATA return new OkObjectResult(resourceCreated.ToDTO(resource.Type == ResourceType.ImageUrl));
} }
catch (ArgumentNullException ex) catch (ArgumentNullException ex)
{ {
@ -360,11 +251,9 @@ namespace ManagerService.Controllers
throw new KeyNotFoundException("Resource does not exist"); throw new KeyNotFoundException("Resource does not exist");
// Todo add some verification ? // Todo add some verification ?
resource.InstanceId = updatedResource.instanceId;
resource.Label = updatedResource.label; resource.Label = updatedResource.label;
resource.Type = updatedResource.type; resource.Type = updatedResource.type;
resource.Url = updatedResource.url; resource.Data = updatedResource.data;
//resource.Data = updatedResource.data; // NOT ALLOWED
Resource resourceModified = _resourceService.Update(updatedResource.id, resource); Resource resourceModified = _resourceService.Update(updatedResource.id, resource);
@ -401,23 +290,12 @@ namespace ManagerService.Controllers
if (id == null) if (id == null)
throw new ArgumentNullException("Resource param is null"); throw new ArgumentNullException("Resource param is null");
var ressource = _resourceService.GetById(id); if (!_resourceService.IsExist(id))
if (ressource == null)
throw new KeyNotFoundException("Resource does not exist"); throw new KeyNotFoundException("Resource does not exist");
foreach (var configuration in _configurationService.GetAll(ressource.InstanceId))
{
if (configuration.ImageId == id)
{
configuration.ImageId = null;
configuration.ImageSource = null;
}
}
// Delete all resource occurence // Delete all resource occurence
foreach (var section in _sectionService.GetAll(ressource.InstanceId)) foreach (var section in _sectionService.GetAll())
{ {
if (section.ImageId == id) if (section.ImageId == id)
{ {
@ -432,117 +310,25 @@ namespace ManagerService.Controllers
mapDTO.iconResourceId = mapDTO.iconResourceId == id ? null : mapDTO.iconResourceId; mapDTO.iconResourceId = mapDTO.iconResourceId == id ? null : mapDTO.iconResourceId;
foreach (var point in mapDTO.points) foreach (var point in mapDTO.points)
{ {
point.imageResourceId = point.imageResourceId == id ? null : point.imageResourceId; foreach (var image in point.images)
foreach (var content in point.contents)
{ {
content.resourceUrl = content.resourceId == id ? null : content.resourceUrl; image.imageSource = image.imageResourceId == id ? null : image.imageSource;
content.resourceId = content.resourceId == id ? null : content.resourceId; image.imageResourceId = image.imageResourceId == id ? null : image.imageResourceId;
} }
} }
foreach (var categorie in mapDTO.categories)
{
categorie.iconUrl = categorie.iconResourceId == id ? null : categorie.iconUrl;
categorie.iconResourceId = categorie.iconResourceId == id ? null : categorie.iconResourceId;
}
section.Data = JsonConvert.SerializeObject(mapDTO); section.Data = JsonConvert.SerializeObject(mapDTO);
break; break;
case SectionType.Slider: case SectionType.Slider:
SliderDTO sliderDTO = JsonConvert.DeserializeObject<SliderDTO>(section.Data); SliderDTO sliderDTO = JsonConvert.DeserializeObject<SliderDTO>(section.Data);
List<ContentDTO> contentsToKeep = new List<ContentDTO>(); List<ImageDTO> imagesToKeep = new List<ImageDTO>();
foreach (var content in sliderDTO.contents) foreach (var image in sliderDTO.images)
{ {
if (content.resourceId != id) if (image.resourceId != id)
contentsToKeep.Add(content); imagesToKeep.Add(image);
} }
sliderDTO.contents = contentsToKeep; sliderDTO.images = imagesToKeep;
section.Data = JsonConvert.SerializeObject(sliderDTO); section.Data = JsonConvert.SerializeObject(sliderDTO);
break; break;
case SectionType.Quizz:
QuizzDTO quizzDTO = JsonConvert.DeserializeObject<QuizzDTO>(section.Data);
foreach (var question in quizzDTO.questions)
{
if (question.label != null)
{
foreach (var questionLabel in question.label)
{
questionLabel.resourceUrl = questionLabel.resourceId == id ? null : questionLabel.resourceUrl;
questionLabel.resourceId = questionLabel.resourceId == id ? null : questionLabel.resourceId;
}
}
question.imageBackgroundResourceUrl = question.imageBackgroundResourceId == id ? null : question.imageBackgroundResourceUrl;
question.imageBackgroundResourceId = question.imageBackgroundResourceId == id ? null : question.imageBackgroundResourceId;
foreach (var response in question.responses)
{
if (response.label != null)
{
foreach (var responseLabel in response.label)
{
responseLabel.resourceUrl = responseLabel.resourceId == id ? null : responseLabel.resourceUrl;
responseLabel.resourceId = responseLabel.resourceId == id ? null : responseLabel.resourceId;
}
}
}
}
if (quizzDTO.bad_level != null)
{
if (quizzDTO.bad_level.label != null)
{
foreach (var badLevelLabel in quizzDTO.bad_level.label)
{
badLevelLabel.resourceUrl = badLevelLabel.resourceId == id ? null : badLevelLabel.resourceUrl;
badLevelLabel.resourceId = badLevelLabel.resourceId == id ? null : badLevelLabel.resourceId;
}
}
}
if (quizzDTO.medium_level != null)
{
if (quizzDTO.medium_level.label != null)
{
foreach (var medium_levelLabel in quizzDTO.medium_level.label)
{
medium_levelLabel.resourceUrl = medium_levelLabel.resourceId == id ? null : medium_levelLabel.resourceUrl;
medium_levelLabel.resourceId = medium_levelLabel.resourceId == id ? null : medium_levelLabel.resourceId;
}
}
}
if (quizzDTO.good_level != null)
{
if (quizzDTO.good_level.label != null)
{
foreach (var gooLevelLabel in quizzDTO.good_level.label)
{
gooLevelLabel.resourceUrl = gooLevelLabel.resourceId == id ? null : gooLevelLabel.resourceUrl;
gooLevelLabel.resourceId = gooLevelLabel.resourceId == id ? null : gooLevelLabel.resourceId;
}
}
}
if (quizzDTO.great_level != null)
{
if (quizzDTO.great_level.label != null)
{
foreach (var greatLevelLabel in quizzDTO.great_level.label)
{
greatLevelLabel.resourceUrl = greatLevelLabel.resourceId == id ? null : greatLevelLabel.resourceUrl;
greatLevelLabel.resourceId = greatLevelLabel.resourceId == id ? null : greatLevelLabel.resourceId;
}
}
}
section.Data = JsonConvert.SerializeObject(quizzDTO);
break;
case SectionType.Article:
ArticleDTO articleDTO = JsonConvert.DeserializeObject<ArticleDTO>(section.Data);
List<ContentDTO> contentsArticleToKeep = new List<ContentDTO>();
foreach (var content in articleDTO.contents)
{
if (content.resourceId != id)
contentsArticleToKeep.Add(content);
}
articleDTO.contents = contentsArticleToKeep;
section.Data = JsonConvert.SerializeObject(articleDTO);
break;
} }
_sectionService.Update(section.Id, section); _sectionService.Update(section.Id, section);
@ -566,61 +352,5 @@ namespace ManagerService.Controllers
return new ObjectResult(ex.Message) { StatusCode = 500 }; return new ObjectResult(ex.Message) { StatusCode = 500 };
} }
} }
/// <summary>
/// Create new ressources from json
/// </summary>
/// <param name="newSection">New section info</param>
[ProducesResponseType(typeof(SectionDTO), 200)]
[ProducesResponseType(typeof(string), 400)]
[ProducesResponseType(typeof(string), 409)]
[ProducesResponseType(typeof(string), 500)]
[HttpPost("json")]
public async Task<ObjectResult> CreateFromJSON()
{
try
{
string json = System.IO.File.ReadAllText("C:/Users/ThomasFransolet/Documents/Documents/Perso/MuseeDeLaFraise/Aout 2024/TabletDb.Resources.json");
JArray resourceAll = JArray.Parse(json);
foreach (var resource in resourceAll)
{
Resource newResource = new Resource();
newResource.Id = (string)resource["_id"]["$oid"];
var test = _resourceService.GetById(newResource.Id);
if (test == null)
{
newResource.Type = ResourceType.Image;
newResource.DateCreation = (DateTime)resource["DateCreation"]["$date"];
newResource.Label = (string)resource["Label"];
newResource.InstanceId = "65ccc67265373befd15be511";
var dataTest = (string)resource["Data"];
var downloadUrl = await _firebaseStorageService.UploadBase64Async(dataTest, newResource.Id, newResource.InstanceId);
newResource.Url = downloadUrl;
// TO Uncomment if needed
//Resource createdResource = _resourceService.Create(newResource);
}
}
return new OkObjectResult(true);
}
catch (ArgumentNullException ex)
{
return new BadRequestObjectResult(ex.Message) { };
}
catch (InvalidOperationException ex)
{
return new ConflictObjectResult(ex.Message) { };
}
catch (Exception ex)
{
return new ObjectResult(ex.Message) { StatusCode = 500 };
}
}
} }
} }

View File

@ -1,21 +1,15 @@
using Manager.Helpers; using Manager.Interfaces.DTO;
using Manager.Interfaces.DTO;
using Manager.Interfaces.Models; using Manager.Interfaces.Models;
using Manager.Services; using Manager.Services;
using ManagerService.Services;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Mqtt.Client.AspNetCore.Services; using Mqtt.Client.AspNetCore.Services;
using Newtonsoft.Json; using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using NSwag.Annotations; using NSwag.Annotations;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Drawing;
using System.Linq; using System.Linq;
using static System.Net.Mime.MediaTypeNames;
namespace ManagerService.Controllers namespace ManagerService.Controllers
{ {
@ -24,17 +18,13 @@ namespace ManagerService.Controllers
[OpenApiTag("Section", Description = "Section management")] [OpenApiTag("Section", Description = "Section management")]
public class SectionController : ControllerBase public class SectionController : ControllerBase
{ {
private ResourceDatabaseService _resourceService;
private SectionDatabaseService _sectionService; private SectionDatabaseService _sectionService;
private ConfigurationDatabaseService _configurationService; private ConfigurationDatabaseService _configurationService;
private readonly ILogger<SectionController> _logger; private readonly ILogger<SectionController> _logger;
private readonly IConfiguration _configuration;
public SectionController(IConfiguration configuration, ILogger<SectionController> logger, SectionDatabaseService sectionService, ConfigurationDatabaseService configurationService, ResourceDatabaseService resourceService) public SectionController(ILogger<SectionController> logger, SectionDatabaseService sectionService, ConfigurationDatabaseService configurationService)
{ {
_logger = logger; _logger = logger;
_configuration = configuration;
_resourceService = resourceService;
_sectionService = sectionService; _sectionService = sectionService;
_configurationService = configurationService; _configurationService = configurationService;
} }
@ -42,35 +32,14 @@ namespace ManagerService.Controllers
/// <summary> /// <summary>
/// Get a list of all section (summary) /// Get a list of all section (summary)
/// </summary> /// </summary>
/// <param name="id">id instance</param>
[ProducesResponseType(typeof(List<SectionDTO>), 200)] [ProducesResponseType(typeof(List<SectionDTO>), 200)]
[ProducesResponseType(typeof(string), 500)] [ProducesResponseType(typeof(string), 500)]
[HttpGet] [HttpGet]
public ObjectResult Get([FromQuery] string instanceId) public ObjectResult Get()
{ {
try try
{ {
List<Section> sections = _sectionService.GetAll(instanceId); List<Section> sections = _sectionService.GetAll();
/* CLEAN ARTICLE AUDIO - Init new field AudioIds */
/*foreach (var article in sections.Where(s => s.Type == SectionType.Article))
{
try
{
ArticleDTO articleDTO = JsonConvert.DeserializeObject<ArticleDTO>(article.Data);
List<string> languages = _configuration.GetSection("SupportedLanguages").Get<List<string>>();
articleDTO.audioIds = LanguageInit.Init("Audio", languages, true);
article.Data = JsonConvert.SerializeObject(articleDTO); // Include all info from specific section as JSON
Section sectionModified = _sectionService.Update(article.Id, article);
}
catch (Exception ex)
{
}
}*/
return new OkObjectResult(sections.Select(r => r.ToDTO())); return new OkObjectResult(sections.Select(r => r.ToDTO()));
} }
@ -236,35 +205,6 @@ namespace ManagerService.Controllers
} }
} }
/// <summary>
/// Get all section with beacon
/// </summary>
/// <param name="instanceId">Instance id</param>
[AllowAnonymous]
[ProducesResponseType(typeof(List<SectionDTO>), 200)]
[ProducesResponseType(typeof(string), 404)]
[ProducesResponseType(typeof(string), 500)]
[HttpGet("beacons/{instanceId}")]
public ObjectResult GetAllBeaconsForInstance(string instanceId)
{
try
{
List<Section> sections = _sectionService.GetAll(instanceId);
sections = sections.Where(s => s.IsBeacon && s.BeaconId != null).ToList();
return new OkObjectResult(sections.Select(s => s.ToDTO()));
}
catch (KeyNotFoundException ex)
{
return new NotFoundObjectResult(ex.Message) { };
}
catch (Exception ex)
{
return new ObjectResult(ex.Message) { StatusCode = 500 };
}
}
/// <summary> /// <summary>
/// Create a new section /// Create a new section
/// </summary> /// </summary>
@ -289,7 +229,6 @@ namespace ManagerService.Controllers
// Todo add some verification ? // Todo add some verification ?
Section section = new Section(); Section section = new Section();
section.InstanceId = newSection.instanceId;
section.Label = newSection.label; section.Label = newSection.label;
section.ImageId = newSection.imageId; section.ImageId = newSection.imageId;
section.ImageSource = newSection.imageSource; section.ImageSource = newSection.imageSource;
@ -301,59 +240,40 @@ namespace ManagerService.Controllers
section.Title = new List<TranslationDTO>(); section.Title = new List<TranslationDTO>();
section.Description = new List<TranslationDTO>(); section.Description = new List<TranslationDTO>();
section.Order = _sectionService.GetAllFromConfiguration(newSection.configurationId).Count; section.Order = _sectionService.GetAllFromConfiguration(newSection.configurationId).Count;
section.IsBeacon = newSection.isBeacon;
section.BeaconId = newSection.beaconId;
section.Latitude = newSection.latitude;
section.Longitude = newSection.longitude;
section.MeterZoneGPS = newSection.meterZoneGPS;
// Preparation // Preparation
List<string> languages = _configuration.GetSection("SupportedLanguages").Get<List<string>>(); List<string> languages = new List<string> { "FR", "NL", "EN", "DE" };//_configurationService.GetById(newSection.ConfigurationId).Languages;
var contentArticle = new List<TranslationDTO>();
var mapDTO = new MapDTO(); // For menu dto var mapDTO = new MapDTO(); // For menu dto
var sliderDTO = new SliderDTO(); // For menu dto var sliderDTO = new SliderDTO(); // For menu dto
section.Title = LanguageInit.Init("Title", languages); foreach (var language in languages)
section.Description = LanguageInit.Init("Description", languages);
contentArticle = LanguageInit.Init("Content", languages);
/*foreach (var language in languages)
{ {
TranslationDTO title = new TranslationDTO(); TranslationDTO title = new TranslationDTO();
TranslationDTO description = new TranslationDTO(); TranslationDTO description = new TranslationDTO();
TranslationDTO content = new TranslationDTO();
title.language = language.ToUpper(); title.language = language.ToUpper();
description.language = language.ToUpper(); description.language = language.ToUpper();
content.language = language.ToUpper();
switch (language.ToUpper()) switch (language.ToUpper())
{ {
case "FR": case "FR":
title.value = "Titre en français"; title.value = "Titre en français";
description.value = "Description en français"; description.value = "Description en français";
content.value = "Contenu en français";
break; break;
case "EN": case "EN":
title.value = "Title in english"; title.value = "Title in english";
description.value = "Description en anglais"; description.value = "Description en anglais";
content.value = "Contenu en anglais";
break; break;
case "NL": case "NL":
title.value = "Titre in dutch"; title.value = "Titre in dutch";
description.value = "Description en néerlandais"; description.value = "Description en néerlandais";
content.value = "Contenu en néerlandais";
break; break;
case "DE": case "DE":
title.value = "Titre en allemand"; title.value = "Titre en allemand";
description.value = "Description en allemand"; description.value = "Description en allemand";
content.value = "Contenu en allemand";
break; break;
} }
section.Title.Add(title); section.Title.Add(title);
section.Description.Add(description); section.Description.Add(description);
contentArticle.Add(content); }
}*/
section.Title = section.Title.OrderBy(t => t.language).ToList(); section.Title = section.Title.OrderBy(t => t.language).ToList();
section.Description = section.Description.OrderBy(d => d.language).ToList(); section.Description = section.Description.OrderBy(d => d.language).ToList();
@ -362,18 +282,15 @@ namespace ManagerService.Controllers
case SectionType.Map: case SectionType.Map:
mapDTO = new MapDTO(); mapDTO = new MapDTO();
mapDTO.mapType = MapTypeApp.hybrid; mapDTO.mapType = MapTypeApp.hybrid;
mapDTO.mapTypeMapbox = MapTypeMapBox.standard;
mapDTO.mapProvider = MapProvider.Google;
mapDTO.zoom = 18; mapDTO.zoom = 18;
mapDTO.points = new List<GeoPointDTO>(); mapDTO.points = new List<GeoPointDTO>();
mapDTO.categories = new List<CategorieDTO>();
section.Data = JsonConvert.SerializeObject(mapDTO); // Include all info from specific section as JSON section.Data = JsonConvert.SerializeObject(mapDTO); // Include all info from specific section as JSON
break; break;
case SectionType.Slider: case SectionType.Slider:
sliderDTO = new SliderDTO(); sliderDTO = new SliderDTO();
sliderDTO.contents = new List<ContentDTO>(); sliderDTO.images = new List<ImageDTO>();
section.Data = JsonConvert.SerializeObject(sliderDTO); // Include all info from specific section as JSON section.Data = JsonConvert.SerializeObject(sliderDTO); // Include all info from specific section as JSON
break; break;
@ -416,35 +333,6 @@ namespace ManagerService.Controllers
menuDTO.Sections.Add(section1DTO);*/ menuDTO.Sections.Add(section1DTO);*/
section.Data = JsonConvert.SerializeObject(menuDTO); // Include all info from specific section as JSON section.Data = JsonConvert.SerializeObject(menuDTO); // Include all info from specific section as JSON
break; break;
case SectionType.Quizz:
QuizzDTO quizzDTO = new QuizzDTO();
quizzDTO.questions = new List<QuestionDTO>();
section.Data = JsonConvert.SerializeObject(quizzDTO); // Include all info from specific section as JSON
break;
case SectionType.Article:
ArticleDTO articleDTO = new ArticleDTO();
articleDTO.contents = new List<ContentDTO>();
articleDTO.content = contentArticle;
articleDTO.audioIds = LanguageInit.Init("Audio", languages, true);
section.Data = JsonConvert.SerializeObject(articleDTO); // Include all info from specific section as JSON
break;
case SectionType.PDF:
PdfDTO pdfDTO = new PdfDTO();
section.Data = JsonConvert.SerializeObject(pdfDTO); // Include all info from specific section as JSON
break;
case SectionType.Puzzle:
PuzzleDTO puzzleDTO = new PuzzleDTO();
section.Data = JsonConvert.SerializeObject(puzzleDTO); // Include all info from specific section as JSON
break;
case SectionType.Agenda:
AgendaDTO agendaDTO = new AgendaDTO();
section.Data = JsonConvert.SerializeObject(agendaDTO); // Include all info from specific section as JSON
break;
case SectionType.Weather:
WeatherDTO weatherDTO = new WeatherDTO();
section.Data = JsonConvert.SerializeObject(weatherDTO); // Include all info from specific section as JSON
break;
} }
Section sectionCreated = _sectionService.Create(section); Section sectionCreated = _sectionService.Create(section);
@ -539,7 +427,6 @@ namespace ManagerService.Controllers
throw new KeyNotFoundException("Section does not exist"); throw new KeyNotFoundException("Section does not exist");
// Todo add some verification ? // Todo add some verification ?
section.InstanceId = updatedSection.instanceId;
section.Label = updatedSection.label; section.Label = updatedSection.label;
section.Title = updatedSection.title; section.Title = updatedSection.title;
section.Description = updatedSection.description; section.Description = updatedSection.description;
@ -550,11 +437,6 @@ namespace ManagerService.Controllers
section.IsSubSection = updatedSection.isSubSection; section.IsSubSection = updatedSection.isSubSection;
section.ParentId = updatedSection.parentId; section.ParentId = updatedSection.parentId;
section.Data = updatedSection.data; section.Data = updatedSection.data;
section.IsBeacon = updatedSection.isBeacon;
section.BeaconId = updatedSection.beaconId;
section.Latitude = updatedSection.latitude;
section.Longitude = updatedSection.longitude;
section.MeterZoneGPS = updatedSection.meterZoneGPS;
Section sectionModified = _sectionService.Update(updatedSection.id, section); Section sectionModified = _sectionService.Update(updatedSection.id, section);
@ -601,7 +483,7 @@ namespace ManagerService.Controllers
foreach (var updatedSection in updatedSectionsOrder) foreach (var updatedSection in updatedSectionsOrder)
{ {
Section section = _sectionService.GetById(updatedSection.id); Section section = _sectionService.GetById(updatedSection.id);
section.Order = updatedSection.order.GetValueOrDefault(); section.Order = updatedSection.order;
_sectionService.Update(section.Id, section); _sectionService.Update(section.Id, section);
} }
@ -665,430 +547,6 @@ namespace ManagerService.Controllers
} }
} }
/// <summary>
/// Update section image url order
/// </summary>
[ProducesResponseType(typeof(string), 200)]
[ProducesResponseType(typeof(string), 400)]
[ProducesResponseType(typeof(string), 404)]
[ProducesResponseType(typeof(string), 500)]
[HttpPut("imageURL")]
public ObjectResult UpdateImageURL()
{
try
{
List<Section> sections = _sectionService.GetAll("65ccc67265373befd15be511"); // get by instance ID (hardcoded MDLF)
foreach (var section in sections)
{
section.ImageSource = CheckAndUpdateURL(section.ImageSource, _resourceService);
switch (section.Type)
{
case SectionType.Map:
var mapSection = JsonConvert.DeserializeObject<MapDTO>(section.Data);
mapSection.iconSource = CheckAndUpdateURL(mapSection.iconSource, _resourceService);
foreach (var point in mapSection.points)
{
point.imageUrl = CheckAndUpdateURL(point.imageUrl, _resourceService);
foreach (var content in point.contents)
{
content.resourceUrl = CheckAndUpdateURL(content.resourceUrl, _resourceService);
}
}
section.Data = JsonConvert.SerializeObject(mapSection); // Include all info from specific section as JSON
break;
case SectionType.Slider:
var sliderData = JsonConvert.DeserializeObject<SliderDTO>(section.Data);
foreach (var content in sliderData.contents)
{
content.resourceUrl = CheckAndUpdateURL(content.resourceUrl, _resourceService);
}
section.Data = JsonConvert.SerializeObject(sliderData); // Include all info from specific section as JSON
break;
case SectionType.Video:
break;
case SectionType.Web:
break;
case SectionType.Quizz:
var quizData = JsonConvert.DeserializeObject<QuizzDTO>(section.Data);
foreach (var badLevelLabel in quizData.bad_level.label)
{
badLevelLabel.resourceUrl = CheckAndUpdateURL(badLevelLabel.resourceUrl, _resourceService);
}
foreach (var mediumLevelLabel in quizData.medium_level.label)
{
mediumLevelLabel.resourceUrl = CheckAndUpdateURL(mediumLevelLabel.resourceUrl, _resourceService);
}
foreach (var goodLevelLabel in quizData.good_level.label)
{
goodLevelLabel.resourceUrl = CheckAndUpdateURL(goodLevelLabel.resourceUrl, _resourceService);
}
foreach (var greatLevelLabel in quizData.great_level.label)
{
greatLevelLabel.resourceUrl = CheckAndUpdateURL(greatLevelLabel.resourceUrl, _resourceService);
}
foreach (var question in quizData.questions)
{
question.imageBackgroundResourceUrl = CheckAndUpdateURL(question.imageBackgroundResourceUrl, _resourceService);
foreach (var labelQuestion in question.label)
{
labelQuestion.resourceUrl = CheckAndUpdateURL(labelQuestion.resourceUrl, _resourceService);
}
foreach (var labelResponse in question.responses)
{
foreach (var LabelResponseLabel in labelResponse.label)
{
LabelResponseLabel.resourceUrl = CheckAndUpdateURL(LabelResponseLabel.resourceUrl, _resourceService);
}
}
}
section.Data = JsonConvert.SerializeObject(quizData); // Include all info from specific section as JSON
break;
case SectionType.Menu:
break;
}
// Update DB
//_sectionService.Update(section.Id, section);
}
return new ObjectResult("OK, done") { StatusCode = 200 };
}
catch (ArgumentNullException ex)
{
return new BadRequestObjectResult(ex.Message) { };
}
catch (KeyNotFoundException ex)
{
return new NotFoundObjectResult(ex.Message) { };
}
catch (Exception ex)
{
return new ObjectResult(ex.Message) { StatusCode = 500 };
}
}
private string CheckAndUpdateURL(string sourceURL, ResourceDatabaseService resourceDatabaseService)
{
if (sourceURL != null && (sourceURL.Contains("192.168.1.19") || sourceURL.Contains("localhost")))
{
if (sourceURL.Contains("localhost"))
{
}
string[] segments = sourceURL.Split('/');
string sourceIDFromURL = segments[segments.Length - 1];
Resource resource = resourceDatabaseService.GetById(sourceIDFromURL);
return resource != null ? resource.Url : sourceURL;
} else return sourceURL;
}
/// <summary>
/// Create a new sections from json
/// </summary>
/// <param name="newSection">New section info</param>
[ProducesResponseType(typeof(SectionDTO), 200)]
[ProducesResponseType(typeof(string), 400)]
[ProducesResponseType(typeof(string), 409)]
[ProducesResponseType(typeof(string), 500)]
[HttpPost("json")]
public ObjectResult CreateFromJSON()
{
try
{
string json = System.IO.File.ReadAllText("C:/Users/ThomasFransolet/Documents/Documents/Perso/MuseeDeLaFraise/Aout 2024/TabletDb.Sections.json");
var sections = JsonConvert.DeserializeObject<SectionDTO[]>(json);
foreach (var sectionJSON in sections)
{
// Todo add some verification ?
Section section = new Section();
section.Id = sectionJSON.id;
section.InstanceId = "65ccc67265373befd15be511"; // MDLF hardcoded
section.Label = sectionJSON.label;
section.ImageId = sectionJSON.imageId;
section.ImageSource = sectionJSON.imageSource;
section.ConfigurationId = sectionJSON.configurationId;
section.DateCreation = sectionJSON.dateCreation;
section.IsSubSection = sectionJSON.isSubSection;
section.ParentId = sectionJSON.parentId;
section.Type = sectionJSON.type;
section.Title = sectionJSON.title;
section.Description = sectionJSON.description;
section.Order = _sectionService.GetAllFromConfiguration(section.ConfigurationId).Count;
section.IsBeacon = false;
// Preparation
//List<string> languages = _configuration.GetSection("SupportedLanguages").Get<List<string>>();
var contentArticle = new List<TranslationDTO>();
/*section.Title = LanguageInit.Init("Title", languages);
section.Description = LanguageInit.Init("Description", languages);
contentArticle = LanguageInit.Init("Content", languages);
section.Title = section.Title.OrderBy(t => t.language).ToList();
section.Description = section.Description.OrderBy(d => d.language).ToList();*/
switch (section.Type)
{
case SectionType.Map:
var sectionDataMap = JsonConvert.DeserializeObject<MapDTO>(sectionJSON.data);
var mapDTO = new MapDTO();
mapDTO.mapType = sectionDataMap.mapType;
mapDTO.mapProvider = MapProvider.Google;
mapDTO.zoom = sectionDataMap.zoom;
mapDTO.iconSource = sectionDataMap.iconSource;
mapDTO.iconResourceId = sectionDataMap.iconResourceId;
//mapDTO.points = sectionDataMap.points ?? new List<GeoPointDTO>();
List<GeoPointDTO> geoPoints = new List<GeoPointDTO>();
JObject sectionMapp = JObject.Parse(sectionJSON.data);
foreach (var point in sectionMapp["points"])
{
GeoPointDTO pointDTO = new GeoPointDTO();
pointDTO.id = (int)point["id"];
pointDTO.latitude = (string)point["latitude"];
pointDTO.longitude = (string)point["longitude"];
pointDTO.title = JsonConvert.DeserializeObject<List<TranslationDTO>>(point["title"].ToString());
pointDTO.description = JsonConvert.DeserializeObject<List<TranslationDTO>>(point["description"].ToString());
List<ContentGeoPoint> contents = new List<ContentGeoPoint>();
foreach (var image in point["images"])
{
ContentGeoPoint contentDTO = new ContentGeoPoint();
contentDTO.resourceType = ResourceType.Image; // ce n'est que des images..
contentDTO.resourceId = (string)image["imageResourceId"];
contentDTO.resourceUrl = (string)image["imageSource"];
contents.Add(contentDTO);
}
pointDTO.contents = contents;
geoPoints.Add(pointDTO);
}
mapDTO.points = geoPoints;
mapDTO.categories = new List<CategorieDTO>();
section.Data = JsonConvert.SerializeObject(mapDTO); // Include all info from specific section as JSON
break;
case SectionType.Slider:
//var sectionSlider = JsonConvert.DeserializeObject(sectionJSON.data);
var sliderDTO = new SliderDTO();
JObject sectionSlider = JObject.Parse(sectionJSON.data);
List<ContentDTO> newContents = new List<ContentDTO>();
if (sectionSlider["images"].Count() > 0)
{
}
foreach (var image in sectionSlider["images"])
{
ContentDTO newContent = new ContentDTO();
int order = (int)image["order"];
string resourceId = (string)image["resourceId"];
string source = (string)image["source"];
newContent.order = order;
newContent.resourceId = resourceId;
newContent.resourceUrl = source;
newContent.resourceType = ResourceType.Image; // ONLY IMAGE WAS POSSIBLE
newContent.title = JsonConvert.DeserializeObject<List<TranslationDTO>>(image["title"].ToString());
newContent.description = JsonConvert.DeserializeObject<List<TranslationDTO>>(image["description"].ToString());
newContents.Add(newContent);
}
sliderDTO.contents = newContents;
section.Data = JsonConvert.SerializeObject(sliderDTO); // Include all info from specific section as JSON
break;
case SectionType.Video:
var sectionVideo = JsonConvert.DeserializeObject<VideoDTO>(sectionJSON.data);
VideoDTO videoDTO = new VideoDTO();
videoDTO.source = sectionVideo.source;
section.Data = JsonConvert.SerializeObject(videoDTO); // Include all info from specific section as JSON
break;
case SectionType.Web:
var sectionWeb = JsonConvert.DeserializeObject<WebDTO>(sectionJSON.data);
WebDTO webDTO = new WebDTO();
webDTO.source = sectionWeb.source;
section.Data = JsonConvert.SerializeObject(webDTO); // Include all info from specific section as JSON
break;
case SectionType.Menu:
var sectionMenu = JsonConvert.DeserializeObject<MenuDTO>(sectionJSON.data);
MenuDTO menuDTO = new MenuDTO();
menuDTO.sections = sectionMenu.sections;
foreach (var sectionMenuu in menuDTO.sections)
{
sectionMenuu.instanceId = section.InstanceId;
switch (sectionMenuu.type)
{
case SectionType.Map:
var sectionMAPSub = JsonConvert.DeserializeObject<MapDTO>(sectionMenuu.data);
var mapDTOSUB = new MapDTO();
mapDTOSUB.mapType = sectionMAPSub.mapType;
mapDTOSUB.mapProvider = MapProvider.Google;
mapDTOSUB.zoom = sectionMAPSub.zoom;
mapDTOSUB.iconSource = sectionMAPSub.iconSource;
mapDTOSUB.iconResourceId = sectionMAPSub.iconResourceId;
List<GeoPointDTO> geoPointsSUB = new List<GeoPointDTO>();
JObject sectionMappSUB = JObject.Parse(sectionMenuu.data);
foreach (var pointSUB in sectionMappSUB["points"])
{
GeoPointDTO pointDTOSUB = new GeoPointDTO();
pointDTOSUB.id = (int)pointSUB["id"];
pointDTOSUB.latitude = (string)pointSUB["latitude"];
pointDTOSUB.longitude = (string)pointSUB["longitude"];
pointDTOSUB.title = JsonConvert.DeserializeObject<List<TranslationDTO>>(pointSUB["title"].ToString());
pointDTOSUB.description = JsonConvert.DeserializeObject<List<TranslationDTO>>(pointSUB["description"].ToString());
List<ContentGeoPoint> contentsSUB = new List<ContentGeoPoint>();
foreach (var imageSUB in pointSUB["images"])
{
ContentGeoPoint contentDTOSUB = new ContentGeoPoint();
contentDTOSUB.resourceType = ResourceType.Image; // ce n'est que des images..
contentDTOSUB.resourceId = (string)imageSUB["imageResourceId"];
contentDTOSUB.resourceUrl = (string)imageSUB["imageSource"];
contentsSUB.Add(contentDTOSUB);
}
pointDTOSUB.contents = contentsSUB;
geoPointsSUB.Add(pointDTOSUB);
}
mapDTOSUB.points = geoPointsSUB;
mapDTOSUB.categories = new List<CategorieDTO>();
section.Data = JsonConvert.SerializeObject(mapDTOSUB); // Include all info from specific section as JSON
break;
case SectionType.Slider:
var sliderDTOSUB = new SliderDTO();
JObject sliderSUB = JObject.Parse(sectionMenuu.data);
List<ContentDTO> newContentsSUB = new List<ContentDTO>();
foreach (var image in sliderSUB["images"])
{
ContentDTO newContentSUB = new ContentDTO();
int order = (int)image["order"];
string resourceId = (string)image["resourceId"];
string source = (string)image["source"]; // TODO REPLACE SOURCE.. UPLOAD TO FIREBASE WHEN UPLOAD RESSOURCE FROM JSON..
newContentSUB.order = order;
newContentSUB.resourceId = resourceId;
newContentSUB.resourceUrl = source;
newContentSUB.resourceType = ResourceType.Image; // ONLY IMAGE WAS POSSIBLE
newContentSUB.title = JsonConvert.DeserializeObject<List<TranslationDTO>>(image["title"].ToString());
newContentSUB.description = JsonConvert.DeserializeObject<List<TranslationDTO>>(image["description"].ToString());
newContentsSUB.Add(newContentSUB);
}
sliderDTOSUB.contents = newContentsSUB;
sectionMenuu.data = JsonConvert.SerializeObject(sliderDTOSUB);
break;
case SectionType.Video:
var sectionVideoSUB = JsonConvert.DeserializeObject<VideoDTO>(sectionMenuu.data);
VideoDTO videoDTOSUB = new VideoDTO();
videoDTOSUB.source = sectionVideoSUB.source;
section.Data = JsonConvert.SerializeObject(videoDTOSUB); // Include all info from specific section as JSON
break;
case SectionType.Web:
var sectionWebSUB = JsonConvert.DeserializeObject<WebDTO>(sectionMenuu.data);
WebDTO webDTOSUB = new WebDTO();
webDTOSUB.source = sectionWebSUB.source;
section.Data = JsonConvert.SerializeObject(webDTOSUB); // Include all info from specific section as JSON
break;
case SectionType.Quizz:
var sectionSUBQuizz = JsonConvert.DeserializeObject<QuizzDTO>(sectionMenuu.data);
var quizzSUBDTO = new QuizzDTO();
quizzSUBDTO.questions = sectionSUBQuizz.questions;
quizzSUBDTO.bad_level = sectionSUBQuizz.bad_level;
quizzSUBDTO.medium_level = sectionSUBQuizz.medium_level;
quizzSUBDTO.good_level = sectionSUBQuizz.medium_level;
quizzSUBDTO.great_level = sectionSUBQuizz.great_level;
sectionMenuu.data = JsonConvert.SerializeObject(quizzSUBDTO); // Include all info from specific section as JSON
break;
}
}
section.Data = JsonConvert.SerializeObject(menuDTO); // Include all info from specific section as JSON
break;
case SectionType.Quizz:
var sectionQuizz = JsonConvert.DeserializeObject<QuizzDTO>(sectionJSON.data);
QuizzDTO quizzDTO = new QuizzDTO();
quizzDTO.questions = sectionQuizz.questions;
quizzDTO.bad_level = sectionQuizz.bad_level;
quizzDTO.medium_level = sectionQuizz.medium_level;
quizzDTO.good_level = sectionQuizz.medium_level;
quizzDTO.great_level = sectionQuizz.great_level;
section.Data = JsonConvert.SerializeObject(quizzDTO); // Include all info from specific section as JSON
break;
// NEW CONTENTS AFTER MDLF
case SectionType.Article:
ArticleDTO articleDTO = new ArticleDTO();
articleDTO.contents = new List<ContentDTO>();
articleDTO.content = contentArticle;
//articleDTO.audioIds = LanguageInit.Init("Audio", languages, true);
section.Data = JsonConvert.SerializeObject(articleDTO); // Include all info from specific section as JSON
break;
case SectionType.PDF:
PdfDTO pdfDTO = new PdfDTO();
section.Data = JsonConvert.SerializeObject(pdfDTO); // Include all info from specific section as JSON
break;
case SectionType.Puzzle:
PuzzleDTO puzzleDTO = new PuzzleDTO();
section.Data = JsonConvert.SerializeObject(puzzleDTO); // Include all info from specific section as JSON
break;
case SectionType.Agenda:
AgendaDTO agendaDTO = new AgendaDTO();
section.Data = JsonConvert.SerializeObject(agendaDTO); // Include all info from specific section as JSON
break;
case SectionType.Weather:
WeatherDTO weatherDTO = new WeatherDTO();
section.Data = JsonConvert.SerializeObject(weatherDTO); // Include all info from specific section as JSON
break;
}
//Section sectionCreated = _sectionService.Create(section);
}
return new OkObjectResult(true);
}
catch (ArgumentNullException ex)
{
return new BadRequestObjectResult(ex.Message) { };
}
catch (InvalidOperationException ex)
{
return new ConflictObjectResult(ex.Message) { };
}
catch (Exception ex)
{
return new ObjectResult(ex.Message) { StatusCode = 500 };
}
}
/// <summary> /// <summary>
/// Useless, just to generate dto code /// Useless, just to generate dto code
/// </summary> /// </summary>
@ -1148,65 +606,5 @@ namespace ManagerService.Controllers
{ {
return new ObjectResult("PlayerMessageDTO") { StatusCode = 200 }; return new ObjectResult("PlayerMessageDTO") { StatusCode = 200 };
} }
/// <summary>
/// Useless, just to generate dto code
/// </summary>
[ProducesResponseType(typeof(QuizzDTO), 200)]
[HttpGet("QuizzDTO")]
public ObjectResult GetQuizzDTO()
{
return new ObjectResult("QuizzDTO") { StatusCode = 200 };
}
/// <summary>
/// Useless, just to generate dto code
/// </summary>
[ProducesResponseType(typeof(ArticleDTO), 200)]
[HttpGet("ArticleDTO")]
public ObjectResult GetArticleDTO()
{
return new ObjectResult("ArticleDTO") { StatusCode = 200 };
}
/// <summary>
/// Useless, just to generate dto code
/// </summary>
[ProducesResponseType(typeof(PdfDTO), 200)]
[HttpGet("PdfDTO")]
public ObjectResult GetPdfDTO()
{
return new ObjectResult("PdfDTO") { StatusCode = 200 };
}
/// <summary>
/// Useless, just to generate dto code
/// </summary>
[ProducesResponseType(typeof(PuzzleDTO), 200)]
[HttpGet("PuzzleDTO")]
public ObjectResult GetPuzzleDTO()
{
return new ObjectResult("PuzzleDTO") { StatusCode = 200 };
}
/// <summary>
/// Useless, just to generate dto code
/// </summary>
[ProducesResponseType(typeof(AgendaDTO), 200)]
[HttpGet("AgendaDTO")]
public ObjectResult GetAgendaDTO()
{
return new ObjectResult("AgendaDTO") { StatusCode = 200 };
}
/// <summary>
/// Useless, just to generate dto code
/// </summary>
[ProducesResponseType(typeof(WeatherDTO), 200)]
[HttpGet("WeatherDTO")]
public ObjectResult GetWeatherDTO()
{
return new ObjectResult("WeatherDTO") { StatusCode = 200 };
}
} }
} }

View File

@ -86,7 +86,7 @@ namespace ManagerService.Controllers
/// Create an user /// Create an user
/// </summary> /// </summary>
/// <param name="newUser">New user info</param> /// <param name="newUser">New user info</param>
//[AllowAnonymous] [AllowAnonymous]
[ProducesResponseType(typeof(UserDetailDTO), 200)] [ProducesResponseType(typeof(UserDetailDTO), 200)]
[ProducesResponseType(typeof(string), 400)] [ProducesResponseType(typeof(string), 400)]
[ProducesResponseType(typeof(string), 409)] [ProducesResponseType(typeof(string), 409)]
@ -99,9 +99,6 @@ namespace ManagerService.Controllers
if (newUser == null) if (newUser == null)
throw new ArgumentNullException("User param is null"); throw new ArgumentNullException("User param is null");
if (newUser.InstanceId == null)
throw new ArgumentNullException("InstanceId is null");
newUser.Token = _tokenService.GenerateToken(newUser.Email).ToString(); newUser.Token = _tokenService.GenerateToken(newUser.Email).ToString();
newUser.DateCreation = DateTime.Now; newUser.DateCreation = DateTime.Now;

View File

@ -1,25 +0,0 @@
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
RUN apt-get update && apt-get install -y apt-utils libgdiplus libc6-dev
WORKDIR /app
EXPOSE 80
VOLUME ["/etc/managerservice"]
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["ManagerService/ManagerService.csproj", "ManagerService/"]
COPY ["Manager.Interfaces/Manager.Interfaces.csproj", "Manager.Interfaces/"]
COPY ["Manager.Framework/Manager.Framework.csproj", "Manager.Framework/"]
RUN dotnet restore "ManagerService/ManagerService.csproj"
COPY . .
WORKDIR "/src/ManagerService"
RUN dotnet build "ManagerService.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "ManagerService.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "ManagerService.dll"]

View File

@ -27,9 +27,9 @@ namespace Mqtt.Client.AspNetCore.Services
public MqttClientService(IMqttClientOptions options) public MqttClientService(IMqttClientOptions options)
{ {
var server = "myinfomate.be"; var server = "localhost";
#if DEBUG #if DEBUG
server = "myinfomate.be";//"192.168.31.96"; server = "localhost";//"192.168.31.96";
#endif #endif
this.options = options; this.options = options;
this.options = new MqttClientOptionsBuilder() this.options = new MqttClientOptionsBuilder()
@ -141,7 +141,7 @@ namespace Mqtt.Client.AspNetCore.Services
.WithRetainFlag(false) .WithRetainFlag(false)
.Build(); .Build();
if (mqttClient != null && mqttClient.IsConnected) if (mqttClient.IsConnected)
await mqttClient.PublishAsync(mqttMessage); await mqttClient.PublishAsync(mqttMessage);
} }

View File

@ -1,125 +0,0 @@
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.IO;
namespace ManagerService.Helpers
{
public static class ImageHelper
{
public static Size ResizeKeepAspect(this Size src, int maxWidth, int maxHeight, bool enlarge = false)
{
maxWidth = enlarge ? maxWidth : Math.Min(maxWidth, src.Width);
maxHeight = enlarge ? maxHeight : Math.Min(maxHeight, src.Height);
decimal rnd = Math.Min(maxWidth / (decimal)src.Width, maxHeight / (decimal)src.Height);
return new Size((int)Math.Round(src.Width * rnd), (int)Math.Round(src.Height * rnd));
}
// TO Byte[] or Image type
public static dynamic ResizeImage(Image image,
/* note changed names */
int canvasWidth, int canvasHeight,
/* new */
int originalWidth, int originalHeight, bool isImage = false)
{
byte[] convertedToBytes;
System.Drawing.Image thumbnail =
new Bitmap(canvasWidth, canvasHeight); // changed parm names
System.Drawing.Graphics graphic =
System.Drawing.Graphics.FromImage(thumbnail);
graphic.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphic.SmoothingMode = SmoothingMode.HighQuality;
graphic.PixelOffsetMode = PixelOffsetMode.HighQuality;
graphic.CompositingQuality = CompositingQuality.HighQuality;
/* ------------------ new code --------------- */
// Figure out the ratio
double ratioX = (double)canvasWidth / (double)originalWidth;
double ratioY = (double)canvasHeight / (double)originalHeight;
// use whichever multiplier is smaller
double ratio = ratioX < ratioY ? ratioX : ratioY;
// now we can get the new height and width
int newHeight = Convert.ToInt32(originalHeight * ratio);
int newWidth = Convert.ToInt32(originalWidth * ratio);
// Now calculate the X,Y position of the upper-left corner
// (one of these will always be zero)
int posX = Convert.ToInt32((canvasWidth - (originalWidth * ratio)) / 2);
int posY = Convert.ToInt32((canvasHeight - (originalHeight * ratio)) / 2);
graphic.Clear(Color.White); // white padding
graphic.DrawImage(image, posX, posY, newWidth, newHeight);
/* ------------- end new code ---------------- */
System.Drawing.Imaging.ImageCodecInfo[] info =
ImageCodecInfo.GetImageEncoders();
EncoderParameters encoderParameters;
encoderParameters = new EncoderParameters(1);
encoderParameters.Param[0] = new EncoderParameter(Encoder.Quality,
100L);
if (isImage)
{
return thumbnail;
}
using (MemoryStream updatedImageMemorySteam = new MemoryStream())
{
thumbnail.Save(updatedImageMemorySteam, System.Drawing.Imaging.ImageFormat.Jpeg);
convertedToBytes = updatedImageMemorySteam.ToArray();
}
return convertedToBytes;
}
public static byte[] ResizeAndAddWatermark(Byte[] bytes, bool watermark, int maxWidth, int maxHeight)
{
byte[] convertedToBytes;
using (MemoryStream originalImageMemoryStream = new MemoryStream(bytes))
{
using (Image image = Image.FromStream(originalImageMemoryStream))
{
Image currentImage = image;
if (image.Width > maxWidth || image.Height > maxHeight)
{
Size newSize = ResizeKeepAspect(image.Size, maxWidth, maxHeight);
Image resizedImage = ImageHelper.ResizeImage(image, newSize.Width, newSize.Height, image.Width, image.Height, true);
currentImage = resizedImage;
}
if(watermark)
{
Font font = new Font("Arial", 25, FontStyle.Italic, GraphicsUnit.Pixel);
Color color = Color.DarkBlue;
Point point = new Point(currentImage.Width /2, (int)Math.Round(currentImage.Height - currentImage.Height * 0.1));
SolidBrush brush = new SolidBrush(color);
using (Graphics graphics = Graphics.FromImage(currentImage))
{
StringFormat stringFormat = new StringFormat();
stringFormat.Alignment = StringAlignment.Center;
stringFormat.LineAlignment = StringAlignment.Center;
graphics.DrawString("fortsaintheribert.be", font, brush, point, stringFormat);
}
}
using (MemoryStream updatedImageMemorySteam = new MemoryStream())
{
currentImage.Save(updatedImageMemorySteam, System.Drawing.Imaging.ImageFormat.Jpeg);
convertedToBytes = updatedImageMemorySteam.ToArray();
}
}
}
return convertedToBytes;
}
}
}

View File

@ -1,27 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Manager.Interfaces.DTO;
using Manager.Interfaces.Models;
using Microsoft.Extensions.Configuration;
using MongoDB.Driver;
namespace Manager.Helpers
{
public class LanguageInit
{
public static List<TranslationDTO> Init(string label, List<string> languages, bool toNull = false)
{
List<TranslationDTO> translations = new List<TranslationDTO>();
foreach (var language in languages)
{
var value = toNull ? null : $"{language} - {label}";
translations.Add(new TranslationDTO() { language = language.ToUpper(), value = value });
}
return translations;
}
}
}

View File

@ -1,22 +1,17 @@
<Project Sdk="Microsoft.NET.Sdk.Web"> <Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup> <PropertyGroup>
<TargetFramework>net6.0</TargetFramework> <TargetFramework>netcoreapp3.1</TargetFramework>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
<UserSecretsId>d2e1a747-e204-4b43-bf93-abbd19c46417</UserSecretsId>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="FirebaseAdmin" Version="3.0.0" /> <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="2.1.2" />
<PackageReference Include="FirebaseStorage.net" Version="1.0.3" /> <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.10.0" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="2.1.30" /> <PackageReference Include="MongoDB.Driver" Version="2.12.1" />
<PackageReference Include="Microsoft.IdentityModel.Tokens" Version="7.2.0" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.14.0" />
<PackageReference Include="MongoDB.Driver" Version="2.19.0" />
<PackageReference Include="MQTTnet.AspNetCore" Version="3.0.13" /> <PackageReference Include="MQTTnet.AspNetCore" Version="3.0.13" />
<PackageReference Include="NSwag.AspNetCore" Version="13.10.8" /> <PackageReference Include="NSwag.AspNetCore" Version="13.10.8" />
<PackageReference Include="System.Drawing.Common" Version="6.0.0" /> <PackageReference Include="System.Drawing.Common" Version="5.0.2" />
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="7.2.0" /> <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.10.0" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@ -1,21 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
This file is used by the publish/package process of your Web project. You can customize the behavior of this process
by editing this MSBuild file. In order to learn more about this please visit https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project>
<PropertyGroup>
<WebPublishMethod>Custom</WebPublishMethod>
<DockerPublish>true</DockerPublish>
<RegistryUrl>https://registry.unov.be</RegistryUrl>
<UserName>admin</UserName>
<PublishImageTag>version-2.0.0</PublishImageTag>
<PublishProvider>ContainerRegistry</PublishProvider>
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<ProjectGuid>042e0bc4-8dcf-4eec-8420-c71aa85d4d99</ProjectGuid>
<TargetFramework>net6.0</TargetFramework>
<RuntimeIdentifier>linux-x64</RuntimeIdentifier>
<SelfContained>false</SelfContained>
</PropertyGroup>
</Project>

View File

@ -1,18 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
This file is used by the publish/package process of your Web project. You can customize the behavior of this process
by editing this MSBuild file. In order to learn more about this please visit https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project>
<PropertyGroup>
<WebPublishMethod>Custom</WebPublishMethod>
<DockerPublish>true</DockerPublish>
<RegistryUrl>https://registry.unov.be</RegistryUrl>
<UserName />
<PublishImageTag>latest</PublishImageTag>
<PublishProvider>ContainerRegistry</PublishProvider>
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<ProjectGuid>042e0bc4-8dcf-4eec-8420-c71aa85d4d99</ProjectGuid>
</PropertyGroup>
</Project>

View File

@ -1,5 +1,4 @@
{ {
"$schema": "http://json.schemastore.org/launchsettings.json",
"iisSettings": { "iisSettings": {
"windowsAuthentication": false, "windowsAuthentication": false,
"anonymousAuthentication": true, "anonymousAuthentication": true,
@ -8,14 +7,15 @@
"sslPort": 0 "sslPort": 0
} }
}, },
"$schema": "http://json.schemastore.org/launchsettings.json",
"profiles": { "profiles": {
"IIS Express": { "IIS Express": {
"commandName": "IISExpress", "commandName": "IISExpress",
"launchBrowser": true, "launchBrowser": true,
"launchUrl": "swagger", "launchUrl": "swagger",
"environmentVariables": { "environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development", "ASPNETCORE_URLS": "http://*:5000/",
"ASPNETCORE_URLS": "http://*:5000/" "ASPNETCORE_ENVIRONMENT": "Development"
} }
}, },
"ManagerService": { "ManagerService": {
@ -26,22 +26,6 @@
"ASPNETCORE_ENVIRONMENT": "Development" "ASPNETCORE_ENVIRONMENT": "Development"
}, },
"applicationUrl": "https://localhost:5001;http://localhost:5000" "applicationUrl": "https://localhost:5001;http://localhost:5000"
},
"WSL": {
"commandName": "WSL2",
"launchBrowser": true,
"launchUrl": "https://localhost:5001/weatherforecast",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"ASPNETCORE_URLS": "https://localhost:5001;http://localhost:5000"
},
"distributionName": ""
},
"Docker": {
"commandName": "Docker",
"launchBrowser": true,
"launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}/swagger",
"publishAllPorts": true
} }
} }
} }

View File

@ -18,9 +18,9 @@ namespace Manager.Services
var database = client.GetDatabase("TabletDb"); var database = client.GetDatabase("TabletDb");
_Configurations = database.GetCollection<Configuration>("Configurations"); _Configurations = database.GetCollection<Configuration>("Configurations");
} }
public List<Configuration> GetAll(string instanceId) public List<Configuration> GetAll()
{ {
return _Configurations.Find(d => d.InstanceId == instanceId).ToList(); return _Configurations.Find(d => true).ToList();
} }
public Configuration GetById(string id) public Configuration GetById(string id)

View File

@ -19,9 +19,9 @@ namespace Manager.Services
_Devices = database.GetCollection<Device>("Devices"); _Devices = database.GetCollection<Device>("Devices");
} }
public List<Device> GetAll(string instanceId) public List<Device> GetAll()
{ {
return _Devices.Find(d => d.InstanceId == instanceId).ToList(); return _Devices.Find(d => true).ToList();
} }
public List<Device> GetAllConnected() public List<Device> GetAllConnected()

View File

@ -1,24 +0,0 @@
using FirebaseAdmin;
using Google.Apis.Auth.OAuth2;
namespace ManagerService.Services
{
public class FirebaseService
{
public FirebaseService()
{
// Remplace le chemin par le chemin vers ton fichier JSON
var pathToKey = "C:/Users/ThomasFransolet/Documents/Documents/Perso/MuseeDeLaFraise/mymuseum-3b97f-firebase-adminsdk-sdbbn-7ec3e24a91.json";
var check = FirebaseApp.DefaultInstance;
if (check == null)
{
FirebaseApp.Create(new AppOptions()
{
Credential = GoogleCredential.FromFile(pathToKey),
});
}
}
}
}

View File

@ -1,64 +0,0 @@
using Firebase.Storage;
using System;
using System.IO;
using System.Threading.Tasks;
namespace ManagerService.Services
{
public class FirebaseStorageService
{
private readonly FirebaseStorage _firebaseStorage;
public FirebaseStorageService()
{
// Remplace "your-project-id.appspot.com" par l'identifiant de ton bucket Firebase Storage
_firebaseStorage = new FirebaseStorage("mymuseum-3b97f.appspot.com");
}
public async Task<string> UploadFileAsync(Stream fileStream, string fileName, string instanceId)
{
// Téléversement du fichier dans le dossier "uploads"
var task = _firebaseStorage
.Child("pictures")
.Child(instanceId)
.Child(fileName)
.PutAsync(fileStream);
// Optionnel: Suivre la progression du téléversement
task.Progress.ProgressChanged += (s, e) => Console.WriteLine($"Progress: {e.Percentage} %");
// Attendre la fin du téléversement
var downloadUrl = await task;
return downloadUrl;
}
public async Task<string> UploadBase64Async(string base64String, string fileName, string instanceId)
{
// Convertir la chaîne base64 en un tableau de bytes
byte[] bytes = Convert.FromBase64String(base64String);
// Créer un flux de mémoire à partir des bytes
using (var stream = new MemoryStream(bytes))
{
// Téléversement du fichier dans le dossier "uploads"
var task = _firebaseStorage
.Child("pictures")
.Child(instanceId)
.Child(fileName)
.PutAsync(stream);
// Optionnel: Suivre la progression du téléversement
task.Progress.ProgressChanged += (s, e) => Console.WriteLine($"Progress: {e.Percentage} %");
// Attendre la fin du téléversement
var downloadUrl = await task;
return downloadUrl;
}
}
}
}

View File

@ -1,64 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Manager.Interfaces.Models;
using Microsoft.Extensions.Configuration;
using MongoDB.Driver;
namespace Manager.Services
{
public class InstanceDatabaseService
{
private readonly IMongoCollection<Instance> _Instances;
public InstanceDatabaseService(IConfiguration config)
{
var client = new MongoClient(config.GetConnectionString("TabletDb"));
var database = client.GetDatabase("TabletDb");
_Instances = database.GetCollection<Instance>("Instances");
}
public List<Instance> GetAll()
{
return _Instances.Find(m => true).ToList();
}
public Instance GetByName(string name)
{
return _Instances.Find<Instance>(i => i.Name == name).FirstOrDefault();
}
public Instance GetById(string id)
{
return _Instances.Find<Instance>(i => i.Id == id).FirstOrDefault();
}
public Instance GetByPinCode(int pinCode)
{
return _Instances.Find<Instance>(c => c.PinCode == pinCode).FirstOrDefault();
}
public bool IsExist(string id)
{
return _Instances.Find<Instance>(i => i.Id == id).FirstOrDefault() != null ? true : false;
}
public Instance Create(Instance instance)
{
_Instances.InsertOne(instance);
return instance;
}
public Instance Update(string id, Instance instanceIn)
{
_Instances.ReplaceOne(instance => instance.Id == id, instanceIn);
return instanceIn;
}
public void Remove(string id)
{
_Instances.DeleteOne(instance => instance.Id == id);
}
}
}

View File

@ -18,14 +18,14 @@ namespace Manager.Services
var database = client.GetDatabase("TabletDb"); var database = client.GetDatabase("TabletDb");
_Resources = database.GetCollection<Resource>("Resources"); _Resources = database.GetCollection<Resource>("Resources");
} }
public List<Resource> GetAll(string instanceId) public List<Resource> GetAll()
{ {
return _Resources.Find(r => r.InstanceId == instanceId).ToList(); return _Resources.Find(r => true).ToList();
} }
public List<Resource> GetAllByType(string instanceId, List<ResourceType> types) public Resource GetByType(ResourceType type)
{ {
return _Resources.Find<Resource>(r => r.InstanceId == instanceId && types.Contains(r.Type)).ToList(); return _Resources.Find<Resource>(r => r.Type == type).FirstOrDefault();
} }
public Resource GetById(string id) public Resource GetById(string id)

View File

@ -19,9 +19,9 @@ namespace Manager.Services
_Sections = database.GetCollection<Section>("Sections"); _Sections = database.GetCollection<Section>("Sections");
} }
public List<Section> GetAll(string instanceId) public List<Section> GetAll()
{ {
return _Sections.Find(s => !s.IsSubSection && s.InstanceId == instanceId).ToList(); return _Sections.Find(s => !s.IsSubSection).ToList();
} }
public List<Section> GetAllFromConfiguration(string configurationId) public List<Section> GetAllFromConfiguration(string configurationId)
@ -29,21 +29,6 @@ namespace Manager.Services
return _Sections.Find(s => !s.IsSubSection && s.ConfigurationId == configurationId).ToList(); return _Sections.Find(s => !s.IsSubSection && s.ConfigurationId == configurationId).ToList();
} }
public List<Section> GetAllFromConfigurationEvenSubsection(string configurationId)
{
return _Sections.Find(s => s.ConfigurationId == configurationId).ToList();
}
public List<string> GetAllIdsFromConfiguration(string configurationId)
{
return _Sections.Find(s => !s.IsSubSection && s.ConfigurationId == configurationId).ToList().Select(s => s.Id).ToList();
}
public List<Section> GetAllWeatherSectionsFromConfiguration(string configurationId)
{
return _Sections.Find(s => s.ConfigurationId == configurationId && s.Type == SectionType.Weather).ToList();
}
public List<Section> GetAllSubSection(string parentId) public List<Section> GetAllSubSection(string parentId)
{ {
return _Sections.Find(s => s.IsSubSection && s.ParentId == parentId).ToList(); return _Sections.Find(s => s.IsSubSection && s.ParentId == parentId).ToList();

View File

@ -13,7 +13,6 @@ using Microsoft.IdentityModel.Tokens;
using Manager.Framework.Business; using Manager.Framework.Business;
using Manager.Interfaces.DTO; using Manager.Interfaces.DTO;
using System.IdentityModel.Tokens.Jwt; using System.IdentityModel.Tokens.Jwt;
using Manager.Services;
namespace ManagerService.Service.Services namespace ManagerService.Service.Services
{ {
@ -25,7 +24,6 @@ namespace ManagerService.Service.Services
private readonly ILogger<TokensService> _logger; private readonly ILogger<TokensService> _logger;
private readonly TokensSettings _tokenSettings; private readonly TokensSettings _tokenSettings;
private readonly ProfileLogic _profileLogic; private readonly ProfileLogic _profileLogic;
private InstanceDatabaseService _instanceService;
private readonly SigningCredentials _signingCredentials; private readonly SigningCredentials _signingCredentials;
@ -37,12 +35,11 @@ namespace ManagerService.Service.Services
/// <param name="context">Database context</param> /// <param name="context">Database context</param>
/// <param name="profileLogic">Profile logic</param> /// <param name="profileLogic">Profile logic</param>
/// <param name="emailClient">Email client</param> /// <param name="emailClient">Email client</param>
public TokensService(ILogger<TokensService> logger, IOptions<TokensSettings> tokenSettings, ProfileLogic profileLogic, InstanceDatabaseService instanceService) public TokensService(ILogger<TokensService> logger, IOptions<TokensSettings> tokenSettings, ProfileLogic profileLogic)
{ {
_logger = logger; _logger = logger;
_tokenSettings = tokenSettings.Value; _tokenSettings = tokenSettings.Value;
_profileLogic = profileLogic; _profileLogic = profileLogic;
_instanceService = instanceService;
var key = Encoding.UTF8.GetBytes(_tokenSettings.Secret); var key = Encoding.UTF8.GetBytes(_tokenSettings.Secret);
_signingCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature); _signingCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature);
@ -54,16 +51,17 @@ namespace ManagerService.Service.Services
/// <param name="email">Email</param> /// <param name="email">Email</param>
/// <param name="password">Password</param> /// <param name="password">Password</param>
/// <returns>Token DTO in case of success</returns> /// <returns>Token DTO in case of success</returns>
public TokenDTO Authenticate(User user, string password) public TokenDTO Authenticate(string email, string password)
{ {
try try
{ {
var claims = new List<System.Security.Claims.Claim>(); var claims = new List<System.Security.Claims.Claim>();
var expiration = DateTime.UtcNow.AddMinutes(_tokenSettings.AccessTokenExpiration); var expiration = DateTime.UtcNow.AddMinutes(_tokenSettings.AccessTokenExpiration);
_profileLogic.TestPassword(user.Email, user.Password, password); // Todo nothing good here..
var profile = _profileLogic.Authenticate(email, password);
claims.Add(new Claim(ClaimTypes.Email, user.Email)); claims.Add(new Claim(ClaimTypes.Email, email));
// TODO: add refresh token support // TODO: add refresh token support
@ -76,34 +74,30 @@ namespace ManagerService.Service.Services
}; };
var token = tokenHandler.CreateToken(tokenDescriptor); var token = tokenHandler.CreateToken(tokenDescriptor);
var instance = _instanceService.GetById(user.InstanceId);
return new TokenDTO() return new TokenDTO()
{ {
access_token = tokenHandler.WriteToken(token), access_token = tokenHandler.WriteToken(token),
expires_in = _tokenSettings.AccessTokenExpiration * 60, expires_in = _tokenSettings.AccessTokenExpiration * 60,
expiration = new DateTimeOffset(token.ValidTo), expiration = new DateTimeOffset(token.ValidTo),
token_type = "Bearer", token_type = "Bearer",
scope = Security.Scope, scope = Security.Scope
instanceId = user.InstanceId,
pinCode = instance.PinCode
}; };
} }
catch (UnauthorizedAccessException ex) catch (UnauthorizedAccessException ex)
{ {
_logger?.LogError(ex, $"Authenticate error for user '{user.Email}': unauthorized access"); _logger?.LogError(ex, $"Authenticate error for user '{email}': unauthorized access");
throw; throw;
} }
catch (Exception ex) catch (Exception ex)
{ {
_logger?.LogError(ex, $"Authenticate error for user '{user.Email}': {ex.Message}"); _logger?.LogError(ex, $"Authenticate error for user '{email}': {ex.Message}");
throw; throw;
} }
} }
public object GenerateToken(string username) public object GenerateToken(string username)
{ {
var secretKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_tokenSettings.Secret)); // Put the secret in a file or something var secretKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("WVD[&vAwis9=#883bM$FRc0Mw8h")); // Put the secret in a file or something
var claims = new Claim[] { var claims = new Claim[] {
new Claim(ClaimTypes.Name, username), new Claim(ClaimTypes.Name, username),

View File

@ -20,27 +20,22 @@ namespace Manager.Services
} }
public List<User> GetAll() public List<User> GetAll()
{ {
return _Users.Find(u => true).ToList(); return _Users.Find(m => true).ToList();
} }
public User GetByEmail(string email) public User GetByEmail(string email)
{ {
return _Users.Find<User>(u => u.Email == email).FirstOrDefault(); return _Users.Find<User>(m => m.Email == email).FirstOrDefault();
} }
public User GetById(string id) public User GetById(string id)
{ {
return _Users.Find<User>(u => u.Id == id).FirstOrDefault(); return _Users.Find<User>(m => m.Id == id).FirstOrDefault();
}
public List<User> GetByInstanceId(string id)
{
return _Users.Find<User>(u => u.InstanceId == id).ToList();
} }
public bool IsExist(string id) public bool IsExist(string id)
{ {
return _Users.Find<User>(u => u.Id == id).FirstOrDefault() != null ? true : false; return _Users.Find<User>(d => d.Id == id).FirstOrDefault() != null ? true : false;
} }
public User Create(User user) public User Create(User user)

View File

@ -1,13 +1,10 @@
using Firebase.Storage;
using Manager.Framework.Business; using Manager.Framework.Business;
using Manager.Framework.Models; using Manager.Framework.Models;
using Manager.Helpers;
using Manager.Interfaces.Models; using Manager.Interfaces.Models;
using Manager.Services; using Manager.Services;
using ManagerService.Extensions; using ManagerService.Extensions;
using ManagerService.Service; using ManagerService.Service;
using ManagerService.Service.Services; using ManagerService.Service.Services;
using ManagerService.Services;
using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Diagnostics; using Microsoft.AspNetCore.Diagnostics;
@ -135,20 +132,14 @@ namespace ManagerService
}; };
}); });
#if RELEASE
services.AddMqttClientHostedService(); services.AddMqttClientHostedService();
#endif
services.AddScoped(typeof(ProfileLogic)); services.AddScoped(typeof(ProfileLogic));
services.AddScoped<TokensService>(); services.AddScoped<TokensService>();
services.AddScoped<UserDatabaseService>(); services.AddScoped<UserDatabaseService>();
services.AddScoped<SectionDatabaseService>(); services.AddScoped<SectionDatabaseService>();
services.AddScoped<ConfigurationDatabaseService>(); services.AddScoped<ConfigurationDatabaseService>();
services.AddScoped<ResourceDatabaseService>(); services.AddScoped<ResourceDatabaseService>();
services.AddScoped<LanguageInit>();
services.AddScoped<DeviceDatabaseService>(); services.AddScoped<DeviceDatabaseService>();
services.AddScoped<InstanceDatabaseService>();
services.AddScoped<FirebaseService>();
services.AddScoped<FirebaseStorageService>();
} }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
@ -160,12 +151,11 @@ namespace ManagerService
if (env.IsDevelopment()) if (env.IsDevelopment())
{ {
app.UseDeveloperExceptionPage(); //app.UseDeveloperExceptionPage();
app.UseExceptionHandler(HandleError);
} }
app.UseExceptionHandler(HandleError); app.UseHttpsRedirection();
//app.UseHttpsRedirection();
app.UseRouting(); app.UseRouting();
app.UseAuthentication(); app.UseAuthentication();

View File

@ -1,11 +1,8 @@
{ {
"ConnectionStrings": { "ConnectionStrings": {
//"TabletDb": "mongodb://admin:MioTech4ever!@localhost:27017" //DEV //"TabletDb": "mongodb://admin:MioTech4ever!@localhost:27017" //DEV
//"TabletDb": "mongodb://admin:MioTech4ever!@localhost:27017", //PROD - Thomas //"TabletDb": "mongodb://admin:MioTech4ever!@localhost:27017" //PROD - Thomas
//"TabletDb": "mongodb://admin:MioTech4ever!@192.168.31.140:27017" //PROD - Thomas "TabletDb": "mongodb://admin:mdlf2021!@localhost:27017" //PROD
//"TabletDb": "mongodb://admin:mdlf2021!@localhost:27017" //PROD MDLF
//"TabletDb": "mongodb://admin:MyMuseum2022!@51.77.222.154:27017", //PROD MyMuseum
"TabletDb": "mongodb://admin:MyInfoMate2023!@135.125.232.116:27017" //PROD MyInfoMate
}, },
"Logging": { "Logging": {
"LogLevel": { "LogLevel": {
@ -16,7 +13,7 @@
}, },
"AllowedHosts": "*", "AllowedHosts": "*",
"Tokens": { "Tokens": {
"Secret": "WVD[&vAwis9=#883bM$FRc0kdKJdfkkjlksd4554qsasadd54df875ds4fqsf5Mw8h", "Secret": "WVD[&vAwis9=#883bM$FRc0Mw8h",
"AccessTokenExpiration": 86400, "AccessTokenExpiration": 86400,
"RefreshTokenExpiration": 518400 "RefreshTokenExpiration": 518400
}, },
@ -33,10 +30,8 @@
}, },
"ClientSettings": { "ClientSettings": {
"Id": "ManagerService", "Id": "ManagerService",
"UserName": "user1", //admin "UserName": "admin",
"Password": "MyInfoMate2023!" //mdlf2021! "Password": "mdlf2021!"
}, },
"SupportedLanguages": [ "FR", "NL", "EN", "DE", "IT", "ES", "PL", "CN", "AR", "UK" ], "Urls": "http://localhost:5002"
"OpenWeatherApiKey": "d489973b4c09ddc5fb56bd7b9270bbef"
//"Urls": "http://[::]:80"
} }

4
README.json Normal file
View File

@ -0,0 +1,4 @@
# Publier sur docker
Publish via Visual studio, le docker file est à jour.
(registry.unov.be)

View File

@ -1 +0,0 @@
Ajout du quizz

File diff suppressed because it is too large Load Diff

View File

@ -1,8 +0,0 @@
{
"runtimeOptions": {
"additionalProbingPaths": [
"C:\\Users\\thoma\\.dotnet\\store\\|arch|\\|tfm|",
"C:\\Users\\thoma\\.nuget\\packages"
]
}
}

View File

@ -1,14 +0,0 @@
{
"runtimeOptions": {
"tfm": "netcoreapp3.1",
"framework": {
"name": "Microsoft.AspNetCore.App",
"version": "3.1.0"
},
"configProperties": {
"System.GC.Server": true,
"System.Reflection.Metadata.MetadataUpdater.IsSupported": false,
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
}
}
}

Some files were not shown because too many files have changed in this diff Show More