Compare commits
3 commits
6b4e52e7ce
...
8e2fd65b68
| Author | SHA1 | Date | |
|---|---|---|---|
|
8e2fd65b68 |
|||
|
0d784e919c |
|||
|
e788910826 |
7 changed files with 89 additions and 107 deletions
|
|
@ -10,6 +10,7 @@ using Yavsc.Abstract.Workflow;
|
|||
using Yavsc.Api.Client;
|
||||
using Yavsc.Models.Haircut;
|
||||
namespace PostIt.ViewModels.Commands;
|
||||
|
||||
public partial class BrushViewModel : RdvViewModel
|
||||
{
|
||||
public override string SupportMessage => "Choisissez une prestation coiffure puis postez la commande.";
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
|
|||
using Microsoft.AspNetCore.Localization;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Mvc.Razor;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Diagnostics;
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
|
|
@ -1282,10 +1283,52 @@ ADD COLUMN IF NOT EXISTS ""Moderated"" boolean NOT NULL DEFAULT FALSE;");
|
|||
|
||||
app.UseFileServer(Config.AvatarsOptions);
|
||||
|
||||
app.Use(async (context, next) =>
|
||||
{
|
||||
await next();
|
||||
|
||||
if (context.Response.StatusCode != StatusCodes.Status404NotFound
|
||||
|| context.Response.HasStarted
|
||||
|| !HttpMethods.IsGet(context.Request.Method)
|
||||
|| !context.Request.Path.StartsWithSegments(Constants.AvatarsPath, out var avatarFile))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var webHostEnvironment = app.ApplicationServices.GetRequiredService<IWebHostEnvironment>();
|
||||
var fallbackAsset = ResolveAvatarFallbackAsset(avatarFile);
|
||||
var fallbackFile = webHostEnvironment.WebRootFileProvider.GetFileInfo(fallbackAsset.TrimStart('/'));
|
||||
if (!fallbackFile.Exists)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
context.Response.StatusCode = StatusCodes.Status200OK;
|
||||
context.Response.ContentType = "image/png";
|
||||
await context.Response.SendFileAsync(fallbackFile);
|
||||
});
|
||||
|
||||
app.UseFileServer(Config.GitOptions);
|
||||
app.UseStaticFiles();
|
||||
return app;
|
||||
}
|
||||
|
||||
private static string ResolveAvatarFallbackAsset(PathString avatarFile)
|
||||
{
|
||||
var fileName = avatarFile.Value ?? string.Empty;
|
||||
|
||||
if (fileName.EndsWith(".xs.png", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
return "/images/Users/icon_user.xs.png";
|
||||
}
|
||||
|
||||
if (fileName.EndsWith(".s.png", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
return "/images/Users/icon_user.s.png";
|
||||
}
|
||||
|
||||
return Constants.DefaultAvatar;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,9 @@
|
|||
@using System.Security.Claims
|
||||
@{
|
||||
ViewBag.Title = "Manage your account";
|
||||
var avatarSrc = string.IsNullOrWhiteSpace(Model.UserName)
|
||||
? Yavsc.Constants.DefaultAvatar
|
||||
: $"{Yavsc.Constants.AvatarsPath}/{Model.UserName}.s.png";
|
||||
}
|
||||
|
||||
<h2>@ViewBag.Title</h2>
|
||||
|
|
@ -11,15 +14,15 @@
|
|||
<hr />
|
||||
<dl class="dl-horizontal">
|
||||
<dt>UserName:</dt>
|
||||
|
||||
<dd>
|
||||
|
||||
<dd>
|
||||
@Model.UserName
|
||||
<a asp-action="SetUserName">[modifier]</a>
|
||||
</dd>
|
||||
|
||||
<dt>E-mail</dt>
|
||||
|
||||
<dd>
|
||||
|
||||
<dd>
|
||||
@Model.EMail
|
||||
|
||||
@if (Model.EmailConfirmed) {
|
||||
|
|
@ -46,22 +49,22 @@
|
|||
|
||||
|
||||
<dt>FullName:</dt>
|
||||
<dd>
|
||||
@Html.DisplayFor(m=>m.FullName)
|
||||
<dd>
|
||||
@Html.DisplayFor(m=>m.FullName)
|
||||
<a asp-action="SetFullName">[modifier]</a>
|
||||
</dd>
|
||||
|
||||
@if (Model.Roles.Count()>0) {
|
||||
<dt>Roles:</dt>
|
||||
<dd>
|
||||
<dd>
|
||||
@string.Join(", ",Model.Roles)
|
||||
</dd>}
|
||||
<dt>Password:</dt>
|
||||
<dd>[@{if (Model.HasPassword)
|
||||
{<a asp-controller="Manage"
|
||||
{<a asp-controller="Manage"
|
||||
asp-action="ChangePassword">Change</a>}
|
||||
else
|
||||
{<a asp-controller="Manage"
|
||||
{<a asp-controller="Manage"
|
||||
asp-action="SetPassword">Create</a>}}]</dd>
|
||||
|
||||
<dt>External Logins:</dt>
|
||||
|
|
@ -76,19 +79,19 @@
|
|||
{
|
||||
Html.DisplayText("Set");
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
Html.DisplayText("Modify");
|
||||
}
|
||||
}
|
||||
</a>]
|
||||
</dd>
|
||||
|
||||
|
||||
<dt>Avatar:</dt>
|
||||
<dd>
|
||||
<img src="/Avatars/@(User.GetUserName()+".s").png" asp-append-version="true" class="smalltofhol" />
|
||||
<img src="@avatarSrc" asp-append-version="true" class="smalltofhol" />
|
||||
[<a asp-controller="Manage" asp-action="SetAvatar">Modify</a>]
|
||||
</dd>
|
||||
</dd>
|
||||
|
||||
<dt>Vos cercles</dt>
|
||||
<dd> (WIP) <a asp-action="Index" asp-controller="Circle">Ajouter suprimer des cercles</a>
|
||||
|
|
@ -115,8 +118,8 @@ Html.DisplayText("Modify");
|
|||
|
||||
<dt><a href="/Blog/@Model.UserName">Your posts:</a></dt>
|
||||
<dd>@Model.PostsCounter</dd>
|
||||
|
||||
<dt>TwoFactorAuthentication:</dt>
|
||||
|
||||
<dt>TwoFactorAuthentication:</dt>
|
||||
<dd>
|
||||
@if (Model.TwoFactor)
|
||||
{
|
||||
|
|
@ -139,19 +142,19 @@ Html.DisplayText("Modify");
|
|||
}
|
||||
}
|
||||
</dd>
|
||||
<dt>Calendar</dt>
|
||||
<dd>
|
||||
<dt>Calendar</dt>
|
||||
<dd>
|
||||
@Html.DisplayText(Model.HasDedicatedCalendar?"Yes":"No" )
|
||||
@{
|
||||
if (Model.HasDedicatedCalendar) {
|
||||
if (Model.HasDedicatedCalendar) {
|
||||
<text> : @Model.DedicatedCalendarId </text>
|
||||
}
|
||||
}
|
||||
[<a asp-action="SetGoogleCalendar">Select a Google calendar</a>]
|
||||
</dd>
|
||||
<environment names="Development">
|
||||
<dt>Credits:</dt>
|
||||
<dd>
|
||||
<dt>Credits:</dt>
|
||||
<dd>
|
||||
@(Model.Balance?.Credits ?? 0) €
|
||||
[<a asp-action="Credits">Manage</a>]
|
||||
</dd>
|
||||
|
|
@ -162,9 +165,9 @@ Html.DisplayText("Modify");
|
|||
@if (Model.DiskQuota>0)
|
||||
{
|
||||
<text>
|
||||
@(((double)Model.DiskUsage/Model.DiskQuota).ToString("%#0")) :
|
||||
@(((double)Model.DiskUsage/Model.DiskQuota).ToString("%#0")) :
|
||||
</text>
|
||||
}
|
||||
}
|
||||
<code>
|
||||
@(Model.DiskUsage.ToString("0,#")) / @(Model.DiskQuota.ToString("0,#"))
|
||||
</code>
|
||||
|
|
|
|||
|
|
@ -1,9 +1,14 @@
|
|||
@model PerformerProfile
|
||||
@{ ViewBag.Title = "Edit your avatar"; }
|
||||
@model PerformerProfile
|
||||
@{ ViewBag.Title = "Edit your avatar"; }
|
||||
@{
|
||||
var previewAvatarSrc = string.IsNullOrWhiteSpace(User?.Identity?.Name)
|
||||
? Yavsc.Constants.DefaultAvatar
|
||||
: $"{Yavsc.Constants.AvatarsPath}/{User.Identity.Name}.png";
|
||||
}
|
||||
@section header{
|
||||
<script src="https://unpkg.com/dropzone@5/dist/min/dropzone.min.js"></script>
|
||||
<link rel="stylesheet" href="https://unpkg.com/dropzone@5/dist/min/dropzone.min.css" type="text/css" />
|
||||
}
|
||||
}
|
||||
@section scripts{
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
|
|
@ -21,7 +26,7 @@ $(document).ready(function() {
|
|||
});
|
||||
</script>
|
||||
}
|
||||
<img src="~/avatars/@(User.Identity.Name).png">
|
||||
<img src="@previewAvatarSrc">
|
||||
|
||||
<form id="postavatar" action="/api/setavatar" class="dropzone" method="post" enctype="multipart/form-data">
|
||||
<div class="fallback">
|
||||
|
|
|
|||
|
|
@ -1,5 +1,13 @@
|
|||
@using Yavsc.Abstract.Identity
|
||||
@model ApplicationUser
|
||||
|
||||
@if (Model!=null) {
|
||||
<img src="/Avatars/@(Model.UserName+".xs").png" asp-append-version="true" class="smalltofhol" />
|
||||
@if (Model != null)
|
||||
{
|
||||
var avatarSrc = UserDisplayHelpers.AvatarSrc(Model);
|
||||
if (avatarSrc.EndsWith(".s.png", StringComparison.Ordinal))
|
||||
{
|
||||
avatarSrc = avatarSrc.Replace(".s.png", ".xs.png", StringComparison.Ordinal);
|
||||
}
|
||||
|
||||
<img src="@avatarSrc" asp-append-version="true" class="smalltofhol" />
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ if (Model ==null || Model.UserName==null)
|
|||
}
|
||||
}
|
||||
else {
|
||||
string avuri = "/Avatars/" + Model.UserName + ".s.png";
|
||||
string avuri = UserDisplayHelpers.AvatarSrc(Model);
|
||||
|
||||
<div class="userinfo">
|
||||
<a title="Posts" asp-controller="Blogspot" asp-action="Index" asp-route-id="@Model.UserName" class="btn btn-primary">
|
||||
|
|
|
|||
|
|
@ -9,84 +9,6 @@ namespace Yavsc.Server.Helpers
|
|||
/// </summary>
|
||||
public class RequestHelper
|
||||
{
|
||||
string WRPostMultipart(string url, Dictionary<string, object> parameters, string authorizationHeader = null)
|
||||
{
|
||||
|
||||
string boundary = "---------------------------" + DateTime.UtcNow.Ticks.ToString("x");
|
||||
byte[] boundaryBytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
|
||||
|
||||
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
|
||||
request.ContentType = "multipart/form-data; boundary=" + boundary;
|
||||
request.Method = "POST";
|
||||
request.KeepAlive = true;
|
||||
request.Credentials = System.Net.CredentialCache.DefaultCredentials;
|
||||
if (authorizationHeader != null)
|
||||
request.Headers["Authorization"] = authorizationHeader;
|
||||
if (parameters != null && parameters.Count > 0)
|
||||
{
|
||||
|
||||
using (Stream requestStream = request.GetRequestStream())
|
||||
{
|
||||
using (WebResponse response = request.GetResponse())
|
||||
{
|
||||
|
||||
|
||||
foreach (KeyValuePair<string, object> pair in parameters)
|
||||
{
|
||||
|
||||
requestStream.Write(boundaryBytes, 0, boundaryBytes.Length);
|
||||
if (pair.Value is FormFile)
|
||||
{
|
||||
FormFile file = pair.Value as FormFile;
|
||||
string header = "Content-Disposition: form-data; name=\"" + pair.Key + "\"; filename=\"" + file.Name + "\"\r\nContent-Type: " + file.ContentType + "\r\n\r\n";
|
||||
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(header);
|
||||
requestStream.Write(bytes, 0, bytes.Length);
|
||||
byte[] buffer = new byte[32768];
|
||||
int bytesRead;
|
||||
if (file.Stream == null)
|
||||
{
|
||||
// upload from file
|
||||
using (FileStream fileStream = File.OpenRead(file.FilePath))
|
||||
{
|
||||
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
|
||||
requestStream.Write(buffer, 0, bytesRead);
|
||||
fileStream.Close();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// upload from given stream
|
||||
while ((bytesRead = file.Stream.Read(buffer, 0, buffer.Length)) != 0)
|
||||
requestStream.Write(buffer, 0, bytesRead);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
string data = "Content-Disposition: form-data; name=\"" + pair.Key + "\"\r\n\r\n" + pair.Value;
|
||||
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(data);
|
||||
requestStream.Write(bytes, 0, bytes.Length);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
byte[] trailer = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n");
|
||||
requestStream.Write(trailer, 0, trailer.Length);
|
||||
requestStream.Close();
|
||||
|
||||
using (Stream responseStream = response.GetResponseStream())
|
||||
using (StreamReader reader = new StreamReader(responseStream))
|
||||
{
|
||||
return reader.ReadToEnd();
|
||||
}
|
||||
} // end WebResponse response
|
||||
|
||||
} // end using requestStream
|
||||
|
||||
}
|
||||
else throw new ArgumentOutOfRangeException("no parameter found ");
|
||||
|
||||
}
|
||||
|
||||
public static async Task<string> PostMultipart(string url, FormFile[] formFiles, string access_token = null)
|
||||
{
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue