diff --git a/.gitignore b/.gitignore
index 19c8cad1..b7aaf0e9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,7 +7,7 @@
.paket/
.vscode/
.vs/
-.dnx/
+.sass-cache/
bin
obj
diff --git a/README.md b/README.md
index f781fdfc..251ac1bc 100644
--- a/README.md
+++ b/README.md
@@ -15,11 +15,10 @@ C'est une application mettant en oeuvre une prise de contact entre un demandeur
dotnet build
```
-
et, pour execution en environement de développement
```
- [monoperso] ~/workspace/yavsc/Yavsc @ ASPNETCORE_ENV=Development dotnet run
+ ~/workspace/yavsc/Yavsc @ ASPNETCORE_ENV=Development dotnet run
```
## Tests
diff --git a/TODO.md b/TODO.md
index 819a514b..62046ca4 100644
--- a/TODO.md
+++ b/TODO.md
@@ -6,7 +6,6 @@ Ceci est une grosse liste de fonctionnalités, existantes, ou à implémenter, o
## Jalon 1
- ☐ Redirection vers la Page d'accueil à la validation du second facteur (evitera l'erreur Anti-forgery token)
☐ Des spécifications détaillées du coeur de l'application
✔ Acces (publique) aux Blogs. @done (August 13th 2016, 0:51)
✔ Accès aux profiles des intervenants. @done (August 13th 2016, 0:57)
diff --git a/src/Yavsc/Helpers/AsciiDocHelpers.cs b/src/Yavsc/Helpers/AsciiDocHelpers.cs
index af312872..76b890d8 100644
--- a/src/Yavsc/Helpers/AsciiDocHelpers.cs
+++ b/src/Yavsc/Helpers/AsciiDocHelpers.cs
@@ -60,6 +60,14 @@ namespace Yavsc.Helpers
}
}
+ public static string GetValidHRef(this Link link)
+ {
+ if (link.Href.StartsWith("link:\\"))
+ return link.Href.Substring(7);
+ if (link.Href.StartsWith("link:"))
+ return link.Href.Substring(5);
+ return link.Href;
+ }
static void ToHtml(this IInlineElement elt, IHtmlContentBuilder sb)
{
@@ -67,11 +75,26 @@ namespace Yavsc.Helpers
{
case "AsciiDocNet.Link":
Link link = (Link)elt;
- sb.AppendFormat("{1} ", link.Href, link.Text);
+ Uri uri;
+ if (Uri.TryCreate(link.Href,
+ UriKind.RelativeOrAbsolute
+ , out uri))
+ {
+ if (string.IsNullOrEmpty(link.Text))
+ {
+ link.Text = $"{uri.Host}({uri.LocalPath})";
+ }
+ }
+ sb.AppendFormat("{1} ", link.GetValidHRef(), link.Text);
break;
case "AsciiDocNet.TextLiteral":
- sb.Append(elt.ToString());
+ var tl = elt as TextLiteral;
+ if (tl.Attributes.Anchor!=null)
+ {
+ sb.AppendFormat("{1} ", tl.Attributes.Anchor.Id, tl.Attributes.Anchor.XRefLabel);
+ }
+ sb.Append(tl.Text);
break;
case "AsciiDocNet.Emphasis":
@@ -90,6 +113,10 @@ namespace Yavsc.Helpers
}
sb.AppendHtml("");
break;
+ case "AsciiDocNet.InternalAnchor":
+ InternalAnchor a = (InternalAnchor) elt;
+ sb.AppendFormat("{1} ", a.Id, a.XRefLabel);
+ break;
default:
string unsupportedType = elt.GetType().FullName;
diff --git a/src/Yavsc/Helpers/AsciiDocTagHelper.cs b/src/Yavsc/Helpers/AsciiDocTagHelper.cs
index f001c584..803a84b8 100644
--- a/src/Yavsc/Helpers/AsciiDocTagHelper.cs
+++ b/src/Yavsc/Helpers/AsciiDocTagHelper.cs
@@ -8,14 +8,16 @@ namespace Yavsc.Helpers
{
public override async Task ProcessAsync (TagHelperContext context, TagHelperOutput output)
{
+ await base.ProcessAsync(context, output);
var content = await output.GetChildContentAsync();
string text = content.GetContent();
if (string.IsNullOrWhiteSpace(text)) return;
Document document = Document.Parse(text);
- var html = document.ToHtml(4);
+ var html = document.ToHtml(2);
using var stringWriter = new StringWriter();
html.WriteTo(stringWriter, HtmlEncoder.Default);
- output.Content.AppendHtml(stringWriter.ToString());
+ var processedHere = stringWriter.ToString();
+ output.Content.AppendHtml(processedHere);
}
}
}
diff --git a/src/Yavsc/Helpers/ListItemHelpers.cs b/src/Yavsc/Helpers/ListItemHelpers.cs
index e7fb98a0..4455ee1a 100644
--- a/src/Yavsc/Helpers/ListItemHelpers.cs
+++ b/src/Yavsc/Helpers/ListItemHelpers.cs
@@ -11,9 +11,11 @@ namespace Yavsc.Helpers {
public static List ActivityItems(
this ApplicationDbContext _dbContext, List activity)
{
+ var activities = activity.ToArray();
+
List items = _dbContext.Activities.Select(
x=> new SelectListItem() {
- Value = x.Code, Text = x.Name, Selected = activity.Any(a=>a.DoesCode == x.Code)
+ Value = x.Code, Text = x.Name, Selected = activities.Any(a=>a.DoesCode == x.Code)
} ).ToList();
return items;
diff --git a/src/Yavsc/Helpers/UserHelpers.cs b/src/Yavsc/Helpers/UserHelpers.cs
index 7fba20b8..391cbf6c 100644
--- a/src/Yavsc/Helpers/UserHelpers.cs
+++ b/src/Yavsc/Helpers/UserHelpers.cs
@@ -12,7 +12,7 @@ namespace Yavsc.Helpers
public static string GetUserId(this ClaimsPrincipal user)
{
- return user.FindFirstValue(ClaimTypes.NameIdentifier);
+ return user.FindFirstValue("sub");
}
public static string GetUserName(this ClaimsPrincipal user)
diff --git a/src/Yavsc/HostingExtensions.cs b/src/Yavsc/HostingExtensions.cs
index b54bef2b..11641d31 100644
--- a/src/Yavsc/HostingExtensions.cs
+++ b/src/Yavsc/HostingExtensions.cs
@@ -149,9 +149,13 @@ internal static class HostingExtensions
Config.GServiceAccount = JsonConvert.DeserializeObject(safile.OpenText().ReadToEnd());
}
-var services = builder.Services;
+ var services = builder.Services;
services.AddRazorPages();
+ services.AddSignalR(o =>
+ {
+ o.EnableDetailedErrors = true;
+ });
services.AddDbContext(options =>
options.UseNpgsql(builder.Configuration.GetConnectionString("Default")));
@@ -218,8 +222,6 @@ var services = builder.Services;
};
});
- services.AddSignalR();
-
services.AddOptions();
_ = services.AddCors(options =>
@@ -312,12 +314,15 @@ var services = builder.Services;
app.UseStaticFiles();
app.UseRouting();
app.UseIdentityServer();
+ //app.UseSignalR();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.MapRazorPages()
.RequireAuthorization();
+ app.MapHub("/chatHub");
+ app.MapAreaControllerRoute("api", "api", "~/api/{controller}/{action}/{id?}");
ConfigureWorkflow();
var services = app.Services;
ILoggerFactory loggerFactory = services.GetRequiredService();
diff --git a/src/Yavsc/Hubs/ChatHub.cs b/src/Yavsc/Hubs/ChatHub.cs
index 056c06e0..85a2330b 100644
--- a/src/Yavsc/Hubs/ChatHub.cs
+++ b/src/Yavsc/Hubs/ChatHub.cs
@@ -68,7 +68,7 @@ namespace Yavsc
public override async Task OnConnectedAsync()
{
- bool isAuth = (Context.User != null);
+ bool isAuth = Context.User?.Identity?.IsAuthenticated ?? false;
bool isCop = false;
string userName = setUserName();
if (isAuth)
@@ -80,7 +80,7 @@ namespace Yavsc
await Groups.AddToGroupAsync(Context.ConnectionId, group);
_logger.LogInformation(_localizer.GetString(ChatHubConstants.LabAuthChatUser));
- var userId = _dbContext.Users.First(u => u.UserName == userName).Id;
+ var userId = _dbContext.Users.First(u => u.UserName == Context.User.Identity.Name).Id;
await Clients.Group(ChatHubConstants.HubGroupFollowingPrefix + userId).SendAsync("notifyUser", NotificationTypes.Connected, userName, null);
isCop = Context.User.IsInRole(Constants.AdminGroupName) ;
@@ -111,8 +111,6 @@ namespace Yavsc
return Context.User.Identity.Name;
}
anonymousSequence++;
-
-
var aname = $"{ChatHubConstants.AnonymousUserNamePrefix}{queryUname}{anonymousSequence}";
SetUserName(Context.ConnectionId, aname);
return aname;
@@ -180,6 +178,7 @@ namespace Yavsc
}
_logger.LogInformation($"returning chan info");
+ await Clients.Caller.SendAsync("joint", chanInfo);
return chanInfo;
}
@@ -313,7 +312,9 @@ namespace Yavsc
NotifyUserInRoom(NotificationTypes.Error, roomName, notSentMsg);
return;
}
- await Clients.Group(groupname).SendAsync("addMessage", userName, roomName, message);
+ var group = Clients.Group(groupname);
+ var msg = new { Name = userName, Room = roomName, Message = message};
+ await group.SendAsync("ReceiveMessage", msg);
}
async Task NotifyUser(string type, string targetId, string message)
@@ -385,6 +386,5 @@ namespace Yavsc
await cli.SendAsync("addStreamInfo", sender, streamId, message);
}
-
}
}
diff --git a/src/Yavsc/Pages/Shared/_Layout.cshtml b/src/Yavsc/Pages/Shared/_Layout.cshtml
index 102e1ec5..c2a97694 100644
--- a/src/Yavsc/Pages/Shared/_Layout.cshtml
+++ b/src/Yavsc/Pages/Shared/_Layout.cshtml
@@ -10,7 +10,7 @@
-
+
diff --git a/src/Yavsc/Pages/Shared/_Nav.cshtml b/src/Yavsc/Pages/Shared/_Nav.cshtml
index 083feaa3..d4a147c1 100644
--- a/src/Yavsc/Pages/Shared/_Nav.cshtml
+++ b/src/Yavsc/Pages/Shared/_Nav.cshtml
@@ -11,7 +11,9 @@
-