Explorar el Código

Share files page (Index) done with design TODO: uploading files not working.

master
radivoje.milutinovic hace 3 años
padre
commit
bc804f3d0f

+ 0
- 13
SecureSharing/Areas/Identity/IdentityHostingStartup.cs Ver fichero

@@ -1,13 +0,0 @@
using SecureSharing.Areas.Identity;

[assembly: HostingStartup(typeof(IdentityHostingStartup))]

namespace SecureSharing.Areas.Identity;

public sealed class IdentityHostingStartup : IHostingStartup
{
public void Configure(IWebHostBuilder builder)
{
builder.ConfigureServices((context, services) => { });
}
}

+ 0
- 85
SecureSharing/Areas/Identity/Pages/Account/Login.cshtml Ver fichero

@@ -1,85 +0,0 @@
@page
@model LoginModel

@{
ViewData["Title"] = "Log in";
}

<h1>@ViewData["Title"]</h1>
<div class="row">
<div class="col-md-4">
<section>
<form id="account" method="post">
<h4>Use a local account to log in.</h4>
<hr/>
<div asp-validation-summary="All" class="text-danger"></div>
<div class="form-group">
<label asp-for="Input.Email"></label>
<input asp-for="Input.Email" class="form-control"/>
<span asp-validation-for="Input.Email" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Input.Password"></label>
<input asp-for="Input.Password" class="form-control"/>
<span asp-validation-for="Input.Password" class="text-danger"></span>
</div>
<div class="form-group">
<div class="checkbox">
<label asp-for="Input.RememberMe">
<input asp-for="Input.RememberMe"/>
@Html.DisplayNameFor(m => m.Input.RememberMe)
</label>
</div>
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary">Log in</button>
</div>
<div class="form-group">
<p>
<a id="forgot-password" asp-page="./ForgotPassword">Forgot your password?</a>
</p>
<p>
<a asp-page="./Register" asp-route-returnUrl="@Model.ReturnUrl">Register as a new user</a>
</p>
<p>
<a id="resend-confirmation" asp-page="./ResendEmailConfirmation">Resend email confirmation</a>
</p>
</div>
</form>
</section>
</div>
<div class="col-md-6 col-md-offset-2">
<section>
<h4>Use another service to log in.</h4>
<hr/>
@{
if ((Model.ExternalLogins?.Count ?? 0) == 0)
{
<div>
<p>
There are no external authentication services configured. See <a href="https://go.microsoft.com/fwlink/?LinkID=532715">this article</a>
for details on setting up this ASP.NET application to support logging in via external services.
</p>
</div>
}
else
{
<form id="external-account" asp-page="./ExternalLogin" asp-route-returnUrl="@Model.ReturnUrl" method="post" class="form-horizontal">
<div>
<p>
@foreach (var provider in Model.ExternalLogins)
{
<button type="submit" class="btn btn-primary" name="provider" value="@provider.Name" title="Log in using your @provider.DisplayName account">@provider.DisplayName</button>
}
</p>
</div>
</form>
}
}
</section>
</div>
</div>

@section Scripts {
<partial name="_ValidationScriptsPartial"/>
}

+ 0
- 91
SecureSharing/Areas/Identity/Pages/Account/Login.cshtml.cs Ver fichero

@@ -1,91 +0,0 @@
using System.ComponentModel.DataAnnotations;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace SecureSharing.Areas.Identity.Pages.Account;

[AllowAnonymous]
public sealed class LoginModel : PageModel
{
private readonly ILogger<LoginModel> _logger;
private readonly SignInManager<IdentityUser> _signInManager;
private readonly UserManager<IdentityUser> _userManager;

public LoginModel(SignInManager<IdentityUser> signInManager,
ILogger<LoginModel> logger,
UserManager<IdentityUser> userManager)
{
_userManager = userManager;
_signInManager = signInManager;
_logger = logger;
}

[BindProperty] public InputModel Input { get; set; }

public IList<AuthenticationScheme> ExternalLogins { get; set; }

public string ReturnUrl { get; set; }

[TempData] public string ErrorMessage { get; set; }

public async Task OnGetAsync(string returnUrl = null)
{
if (!string.IsNullOrEmpty(ErrorMessage)) ModelState.AddModelError(string.Empty, ErrorMessage);

returnUrl ??= Url.Content("~/");

// Clear the existing external cookie to ensure a clean login process
await HttpContext.SignOutAsync(IdentityConstants.ExternalScheme);

ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();

ReturnUrl = returnUrl;
}

public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
returnUrl ??= Url.Content("~/");

ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();

if (ModelState.IsValid)
{
// This doesn't count login failures towards account lockout
// To enable password failures to trigger account lockout, set lockoutOnFailure: true
var result = await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, false);
if (result.Succeeded)
{
_logger.LogInformation("User logged in.");
return LocalRedirect(returnUrl);
}

if (result.RequiresTwoFactor)
return RedirectToPage("./LoginWith2fa", new { ReturnUrl = returnUrl, Input.RememberMe });
if (result.IsLockedOut)
{
_logger.LogWarning("User account locked out.");
return RedirectToPage("./Lockout");
}

ModelState.AddModelError(string.Empty, "Invalid login attempt.");
return Page();
}

// If we got this far, something failed, redisplay form
return Page();
}

public sealed class InputModel
{
[Required] [EmailAddress] public string Email { get; set; }

[Required]
[DataType(DataType.Password)]
public string Password { get; set; }

[Display(Name = "Remember me?")] public bool RememberMe { get; set; }
}
}

+ 0
- 67
SecureSharing/Areas/Identity/Pages/Account/Register.cshtml Ver fichero

@@ -1,67 +0,0 @@
@page
@model RegisterModel
@{
ViewData["Title"] = "Register";
}

<h1>@ViewData["Title"]</h1>

<div class="row">
<div class="col-md-4">
<form asp-route-returnUrl="@Model.ReturnUrl" method="post">
<h4>Create a new account.</h4>
<hr/>
<div asp-validation-summary="All" class="text-danger"></div>
<div class="form-group">
<label asp-for="Input.Email"></label>
<input asp-for="Input.Email" class="form-control"/>
<span asp-validation-for="Input.Email" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Input.Password"></label>
<input asp-for="Input.Password" class="form-control"/>
<span asp-validation-for="Input.Password" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Input.ConfirmPassword"></label>
<input asp-for="Input.ConfirmPassword" class="form-control"/>
<span asp-validation-for="Input.ConfirmPassword" class="text-danger"></span>
</div>
<button type="submit" class="btn btn-primary">Register</button>
</form>
</div>
<div class="col-md-6 col-md-offset-2">
<section>
<h4>Use another service to register.</h4>
<hr/>
@{
if ((Model.ExternalLogins?.Count ?? 0) == 0)
{
<div>
<p>
There are no external authentication services configured. See <a href="https://go.microsoft.com/fwlink/?LinkID=532715">this article</a>
for details on setting up this ASP.NET application to support logging in via external services.
</p>
</div>
}
else
{
<form id="external-account" asp-page="./ExternalLogin" asp-route-returnUrl="@Model.ReturnUrl" method="post" class="form-horizontal">
<div>
<p>
@foreach (var provider in Model.ExternalLogins)
{
<button type="submit" class="btn btn-primary" name="provider" value="@provider.Name" title="Log in using your @provider.DisplayName account">@provider.DisplayName</button>
}
</p>
</div>
</form>
}
}
</section>
</div>
</div>

@section Scripts {
<partial name="_ValidationScriptsPartial"/>
}

+ 0
- 102
SecureSharing/Areas/Identity/Pages/Account/Register.cshtml.cs Ver fichero

@@ -1,102 +0,0 @@
using System.ComponentModel.DataAnnotations;
using System.Text;
using System.Text.Encodings.Web;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.UI.Services;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.WebUtilities;

namespace SecureSharing.Areas.Identity.Pages.Account;

[AllowAnonymous]
public sealed class RegisterModel : PageModel
{
private readonly IEmailSender _emailSender;
private readonly ILogger<RegisterModel> _logger;
private readonly SignInManager<IdentityUser> _signInManager;
private readonly UserManager<IdentityUser> _userManager;

public RegisterModel(
UserManager<IdentityUser> userManager,
SignInManager<IdentityUser> signInManager,
ILogger<RegisterModel> logger,
IEmailSender emailSender)
{
_userManager = userManager;
_signInManager = signInManager;
_logger = logger;
_emailSender = emailSender;
}

[BindProperty] public InputModel Input { get; set; }

public string ReturnUrl { get; set; }

public IList<AuthenticationScheme> ExternalLogins { get; set; }

public async Task OnGetAsync(string returnUrl = null)
{
ReturnUrl = returnUrl;
ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();
}

public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
returnUrl ??= Url.Content("~/");
ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();
if (ModelState.IsValid)
{
var user = new IdentityUser { UserName = Input.Email, Email = Input.Email };
var result = await _userManager.CreateAsync(user, Input.Password);
if (result.Succeeded)
{
_logger.LogInformation("User created a new account with password.");

var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);
code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
var callbackUrl = Url.Page(
"/Account/ConfirmEmail",
null,
new { area = "Identity", userId = user.Id, code, returnUrl },
Request.Scheme);

await _emailSender.SendEmailAsync(Input.Email, "Confirm your email",
$"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>.");

if (_userManager.Options.SignIn.RequireConfirmedAccount)
return RedirectToPage("RegisterConfirmation", new { email = Input.Email, returnUrl });

await _signInManager.SignInAsync(user, false);
return LocalRedirect(returnUrl);
}

foreach (var error in result.Errors) ModelState.AddModelError(string.Empty, error.Description);
}

// If we got this far, something failed, redisplay form
return Page();
}

public sealed class InputModel
{
[Required]
[EmailAddress]
[Display(Name = "Email")]
public string Email { get; set; }

[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.",
MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }

[DataType(DataType.Password)]
[Display(Name = "Confirm password")]
[Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }
}
}

+ 0
- 37
SecureSharing/Areas/Identity/Pages/Account/ResetPassword.cshtml Ver fichero

@@ -1,37 +0,0 @@
@page
@model ResetPasswordModel
@{
ViewData["Title"] = "Reset password";
}

<h1>@ViewData["Title"]</h1>
<h4>Reset your password.</h4>
<hr/>
<div class="row">
<div class="col-md-4">
<form method="post">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<input asp-for="Input.Code" type="hidden"/>
<div class="form-group">
<label asp-for="Input.Email"></label>
<input asp-for="Input.Email" class="form-control"/>
<span asp-validation-for="Input.Email" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Input.Password"></label>
<input asp-for="Input.Password" class="form-control"/>
<span asp-validation-for="Input.Password" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Input.ConfirmPassword"></label>
<input asp-for="Input.ConfirmPassword" class="form-control"/>
<span asp-validation-for="Input.ConfirmPassword" class="text-danger"></span>
</div>
<button type="submit" class="btn btn-primary">Reset</button>
</form>
</div>
</div>

@section Scripts {
<partial name="_ValidationScriptsPartial"/>
}

+ 0
- 65
SecureSharing/Areas/Identity/Pages/Account/ResetPassword.cshtml.cs Ver fichero

@@ -1,65 +0,0 @@
using System.ComponentModel.DataAnnotations;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace SecureSharing.Areas.Identity.Pages.Account;

[AllowAnonymous]
public sealed class ResetPasswordModel : PageModel
{
private readonly UserManager<IdentityUser> _userManager;

public ResetPasswordModel(UserManager<IdentityUser> userManager)
{
_userManager = userManager;
}

[BindProperty] public InputModel Input { get; set; }

public IActionResult OnGet(string code = null)
{
if (code is null) return BadRequest("A code must be supplied for password reset.");

Input = new InputModel
{
Code = code
};
return Page();
}

public async Task<IActionResult> OnPostAsync()
{
if (!ModelState.IsValid) return Page();

var user = await _userManager.FindByEmailAsync(Input.Email);
if (user is null)
// Don't reveal that the user does not exist
return RedirectToPage("./ResetPasswordConfirmation");

var result = await _userManager.ResetPasswordAsync(user, Input.Code, Input.Password);
if (result.Succeeded) return RedirectToPage("./ResetPasswordConfirmation");

foreach (var error in result.Errors) ModelState.AddModelError(string.Empty, error.Description);
return Page();
}

public sealed class InputModel
{
[Required] [EmailAddress] public string Email { get; set; }

[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.",
MinimumLength = 6)]
[DataType(DataType.Password)]
public string Password { get; set; }

[DataType(DataType.Password)]
[Display(Name = "Confirm password")]
[Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }

public string Code { get; set; }
}
}

+ 0
- 1
SecureSharing/Areas/Identity/Pages/Account/_ViewImports.cshtml Ver fichero

@@ -1 +0,0 @@
@using SecureSharing.Areas.Identity.Pages.Account

+ 0
- 18
SecureSharing/Areas/Identity/Pages/_ValidationScriptsPartial.cshtml Ver fichero

@@ -1,18 +0,0 @@
<environment include="Development">
<script src="~/Identity/lib/jquery-validation/dist/jquery.validate.js"></script>
<script src="~/Identity/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js"></script>
</environment>
<environment exclude="Development">
<script src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.17.0/jquery.validate.min.js"
asp-fallback-src="~/Identity/lib/jquery-validation/dist/jquery.validate.min.js"
asp-fallback-test="window.jQuery && window.jQuery.validator"
crossorigin="anonymous"
integrity="sha384-rZfj/ogBloos6wzLGpPkkOr/gpkBNLZ6b6yLy4o+ok+t/SAKlL5mvXLr0OXNi1Hp">
</script>
<script src="https://ajax.aspnetcdn.com/ajax/jquery.validation.unobtrusive/3.2.9/jquery.validate.unobtrusive.min.js"
asp-fallback-src="~/Identity/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"
asp-fallback-test="window.jQuery && window.jQuery.validator && window.jQuery.validator.unobtrusive"
crossorigin="anonymous"
integrity="sha384-ifv0TYDWxBHzvAk2Z0n8R434FL1Rlv/Av18DXE43N/1rvHyOG4izKst0f2iSLdds">
</script>
</environment>

+ 0
- 4
SecureSharing/Areas/Identity/Pages/_ViewImports.cshtml Ver fichero

@@ -1,4 +0,0 @@
@using Microsoft.AspNetCore.Identity
@using SecureSharing.Areas.Identity
@using SecureSharing.Areas.Identity.Pages
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

+ 0
- 3
SecureSharing/Areas/Identity/Pages/_ViewStart.cshtml Ver fichero

@@ -1,3 +0,0 @@
@{
Layout = "/Views/Shared/_Layout.cshtml";
}

+ 1
- 1
SecureSharing/Properties/launchSettings.json Ver fichero

@@ -20,7 +20,7 @@
"commandName": "Project",
"dotnetRunMessages": "true",
"launchBrowser": true,
"applicationUrl": "https://localhost:5001;http://localhost:5000",
"applicationUrl": "https://localhost:44336;http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation"

+ 11
- 0
SecureSharing/SecureSharing.csproj Ver fichero

@@ -35,4 +35,15 @@
<Folder Include="AppData\Errors\" />
</ItemGroup>

<ItemGroup>
<_ContentIncludedByDefault Remove="Areas\Identity\Pages\Account\Login.cshtml" />
<_ContentIncludedByDefault Remove="Areas\Identity\Pages\Account\LoginTestbe.cshtml" />
<_ContentIncludedByDefault Remove="Areas\Identity\Pages\Account\Register.cshtml" />
<_ContentIncludedByDefault Remove="Areas\Identity\Pages\Account\ResetPassword.cshtml" />
<_ContentIncludedByDefault Remove="Areas\Identity\Pages\Account\_ViewImports.cshtml" />
<_ContentIncludedByDefault Remove="Areas\Identity\Pages\_ValidationScriptsPartial.cshtml" />
<_ContentIncludedByDefault Remove="Areas\Identity\Pages\_ViewImports.cshtml" />
<_ContentIncludedByDefault Remove="Areas\Identity\Pages\_ViewStart.cshtml" />
</ItemGroup>

</Project>

+ 36
- 22
SecureSharing/Views/Home/Index.cshtml Ver fichero

@@ -4,27 +4,41 @@
@using SecureSharing.Business.Infrastructure
@model MessageModel

<div class="text-center">
<form method="post" asp-controller="Home" asp-action="CreateMessage">
<input asp-for="Text"/>
<div class="modal-content modal">
<div class="share-files">
<div class="image-logo">
<img src="img/logo.png" alt=""/>
</div>
<h1>Share files</h1>
<form method="post" asp-controller="Home" asp-action="CreateMessage" class="share-files-form">
<label class="label-text">Sharing link avaliability</label>
<div class="button-box col-lg-12">
<div class="single-button-input">
<input id="OneTime" class="radio-input" type="radio" asp-for="ChosenPeriod" value="@PeriodOfValidity.ONE_TIME">
<label for="OneTime" class="label-available">One Time</label>
</input>
</div>
<div class="single-button-input">
<input id="OneHour" class="radio-input" type="radio" asp-for="ChosenPeriod" value="@PeriodOfValidity.ONE_HOUR"/> <label for="OneHour" class="label-available">1 hour</label>
</div>
<div class="single-button-input">
<input id="OneDay" class="radio-input" type="radio" asp-for="ChosenPeriod" value="@PeriodOfValidity.ONE_DAY"/> <label for="OneDay" class="label-available">1 day</label>
</div>
<div class="single-button-input">
<input id="SevenDays" class="radio-input" type="radio" asp-for="ChosenPeriod" value="@PeriodOfValidity.ONE_WEEK"/> <label for="SevenDays" class="label-available">7 days</label>
</div>
</div>
<label class="label-text">Message (optional)</label>
<textarea asp-for="Text" class="input-message"></textarea>
<label class="label-text">Upload files</label>
<div class="drop-here">
<div class="default-text">
<img src="img/file-upload-image.png" alt=""/>
<p>Drag and drop files here or <span style="color: dodgerblue">browse</span></p>
</div>
</div>
<button class=" btn btn-light share-button" type="submit">Share</button>
</form>
<br>


<input type="radio" asp-for="ChosenPeriod" value="@PeriodOfValidity.ONE_TIME"/> ONE TIME
<br>

<input type="radio" asp-for="ChosenPeriod" value="@PeriodOfValidity.ONE_HOUR"/> ONE HOUR
<br>

<input type="radio" asp-for="ChosenPeriod" value="@PeriodOfValidity.ONE_DAY"/> ONE DAY
<br>

<input type="radio" asp-for="ChosenPeriod" value="@PeriodOfValidity.ONE_WEEK"/> SEVEN DAYS
<br>

<button class=" btn btn-light" type="submit">Send</button>
</form>
<br>


</div>
</div>

+ 0
- 3
SecureSharing/Views/Home/Link.cshtml Ver fichero

@@ -4,7 +4,6 @@
@model LinkModel

<div class="text-center">

@if (!Model.IsValid)
{
<p>This link has expired</p>
@@ -36,8 +35,6 @@
}
</div>
}


<div>
Message: @Model.message.Text
</div>

+ 10
- 28
SecureSharing/Views/Shared/_Layout.cshtml Ver fichero

@@ -28,11 +28,8 @@
<link rel="stylesheet" href="~/plugins/daterangepicker/daterangepicker.css">
<!-- summernote -->
<link rel="stylesheet" href="~/plugins/summernote/summernote-bs4.min.css">


<link href="~/lib/jquery-confirm/jquery-confirm.min.css" rel="stylesheet"/>


<link rel="stylesheet" href="~/css/site.css">
</head>
<body class="hold-transition layout-fixed">
@@ -40,30 +37,8 @@
<p>Your browser does not support JavaScript. You need it enabled to do testing.</p>
</noscript>

<div class="wrapper">
@RenderBody()

<div class="content-wrapper default-layout">
<section class="content">
<main role="main" class="pb-3">
<div class="content-fluid">
<div>&nbsp;</div>
<div class="card">
<div class="card-body">
@RenderBody()
</div>
</div>
</div>
</main>
</section>
</div>
<footer class="main-footer ml-0">
<strong>Copyright &copy; 2021 <a href="https://dilig.net/">Diligent Software</a>.</strong>
All rights reserved.
<div class="float-right d-none d-sm-inline-block">
<b>Version</b> 1.0.0-alpha
</div>
</footer>
</div>
<!-- jQuery -->
<script src="~/plugins/jquery/jquery.min.js"></script>
<!-- jQuery UI 1.11.4 -->
@@ -101,10 +76,17 @@
<script src="~/lib/alertifyjs/alertify.min.js"></script>
<script src="~/lib/blockUI/jquery.blockUI.js"></script>


<script src="~/js/site.js" asp-append-version="true"></script>

@await RenderSectionAsync("Scripts", false)

</body>
@* *@
@* <footer class="main-footer ml-0 footer"> *@
@* <strong>Copyright &copy; @DateTime.Now.Year <a href="https://dilig.net/">Diligent Software</a>.</strong> *@
@* All rights reserved. *@
@* <div class="float-right d-none d-sm-inline-block"> *@
@* <b>Version</b> 1.0.0-alpha *@
@* </div> *@
@* </footer> *@
</html>

+ 831
- 282
SecureSharing/obj/project.assets.json
La diferencia del archivo ha sido suprimido porque es demasiado grande
Ver fichero


+ 1
- 1
SecureSharing/obj/project.nuget.cache Ver fichero

@@ -1,6 +1,6 @@
{
"version": 2,
"dgSpecHash": "adKPXrIJhbnKPr7vG5AIpNksfnOS2+IaKLAekWC9oodhh4hpQFsvvqpp8XJLKbqj4sypMHdwYqk11uEZ6q6Odg==",
"dgSpecHash": "Sm0OUd2oFeRQfP2x9Hc316VrFwOciAM1sd50sI0THzjwNojg57Kg5f6UuNyby8YR0g6WtFdJlVtr9+uxdyhJBw==",
"success": true,
"projectFilePath": "D:\\secure-sharing\\SecureSharing\\SecureSharing.csproj",
"expectedPackageFiles": [

+ 156
- 0
SecureSharing/wwwroot/css/site.css Ver fichero

@@ -42,4 +42,160 @@
.wrong.answered {
background-color: rgb(247, 247, 247);
border-color: rgb(255, 0, 0);
}

body{
background: url('../img/gradient.png') no-repeat center center fixed;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
size: 16px;
font-weight: bold;
}

.image-logo {
margin-top: 0;
margin-bottom: 25px;
align-items: center;
justify-content: center;
display: flex;
}

.modal {
display: flex;
flex-direction: column;
/*justify-content: center;*/
/*align-items: center;*/
padding: 32px;
gap: 24px;

position: absolute;
width: 600px;
height: 800px;
left: calc(50vw - 300px);
top: calc(50vh - 400px);
overflow-y: auto;
scrollbar-width: thin;
scrollbar-color: #ddd;
background-color: #FFFFFF;
color: #0D1C52;
box-shadow: 0 44px 64px rgba(69, 25, 160, 0.1);
border-radius: 32px;
}
.modal::-webkit-scrollbar {
width: 5px;
}
.modal::-webkit-scrollbar-track {
background: #ddd;

}
.modal::-webkit-scrollbar-thumb {
background: #777;
}

.share-files {
text-align: left !important;
align-items: initial;
color: #0D1C52;
width: 100%;
}

.share-files-form {
color: #0D1C52;
width: 100%;
}
.button-box {
text-align:center;
margin-top:10px;
margin-bottom: 15px;
display: flex;
flex-direction: row;
justify-content: space-between;
gap: 8px;
padding: 0;
}
.single-button-input {
flex: 1;
}

.radio-input {
display: none;
color: #B9CFE4;
}

.label-available {
cursor: pointer;
border: 1px solid #0D1C52;
border-radius: 5px;
width: 100%;
height: 55px;
padding-top: 15px;
}

.label-text {
font-size: 23px;
}

.radio-input:checked ~ .label-available {
background-color: #FFA463 !important;
}
.share-button {
/* Auto layout */

display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
padding: 32px;
gap: 10px;

width: 100%;
height: 94px;
margin-top: 14px;
background: #90278F;
border-radius: 30px;

/* Inside auto layout */

flex: none;
order: 2;
align-self: stretch;
flex-grow: 0;
color: #FFFFFF;
font-size: 40px;
}

.input-message {
box-sizing: border-box;

width: 100%;
height: 90px;

/* white */

background: #FFFFFF;
border: 1px solid #8F9DCE;
border-radius: 4px;
}

.drop-here {
box-sizing: border-box;

width: 100%;
height: 90px;

/* white */

background: #FFFFFF;
border: 1px dashed #8F9DCE;
border-radius: 4px;
display: inline-block; /* [4] */
vertical-align: middle;
text-align: center;
}
.default-text {
margin-top: 15px;
height: 100%;
/*text-align: center;*/
}

BIN
SecureSharing/wwwroot/img/file-upload-image.png Ver fichero


BIN
SecureSharing/wwwroot/img/gradient.png Ver fichero


BIN
SecureSharing/wwwroot/img/logo.png Ver fichero


Cargando…
Cancelar
Guardar