Browse Source

Compiler fixes.

pull/282/head
Sebastian Stehle 8 years ago
parent
commit
8c86a80438
  1. 38
      src/Squidex.Domain.Users.MongoDb/MongoUserStore.cs
  2. 3
      src/Squidex.Shared/Users/IUserResolver.cs
  3. 8
      src/Squidex/Areas/Api/Controllers/Users/Models/UserDto.cs
  4. 10
      src/Squidex/Areas/Api/Controllers/Users/UserManagementController.cs
  5. 105
      src/Squidex/Areas/Api/Controllers/Users/UsersController.cs
  6. 2
      src/Squidex/app/features/content/pages/content/content-field.component.html
  7. 4
      src/Squidex/app/features/content/pages/contents/contents-page.component.html

38
src/Squidex.Domain.Users.MongoDb/MongoUserStore.cs

@ -73,18 +73,6 @@ namespace Squidex.Domain.Users.MongoDb
return new MongoUser { Email = email, UserName = email };
}
public async Task<IUser> FindByIdOrEmailAsync(string id)
{
if (ObjectId.TryParse(id, out var parsed))
{
return await Collection.Find(x => x.Id == id).FirstOrDefaultAsync();
}
else
{
return await Collection.Find(x => x.NormalizedEmail == id.ToUpperInvariant()).FirstOrDefaultAsync();
}
}
public async Task<IUser> FindByIdAsync(string userId, CancellationToken cancellationToken)
{
return await Collection.Find(x => x.Id == userId).FirstOrDefaultAsync(cancellationToken);
@ -396,5 +384,31 @@ namespace Squidex.Domain.Users.MongoDb
return TaskHelper.Done;
}
public async Task<IUser> FindByIdOrEmailAsync(string id)
{
if (ObjectId.TryParse(id, out var parsed))
{
return await Collection.Find(x => x.Id == id).FirstOrDefaultAsync();
}
else
{
return await Collection.Find(x => x.NormalizedEmail == id.ToUpperInvariant()).FirstOrDefaultAsync();
}
}
public Task<List<IUser>> QueryByEmailAsync(string email)
{
var result = Users;
if (!string.IsNullOrWhiteSpace(email))
{
var normalizedEmail = email.ToUpperInvariant();
result = result.Where(x => x.NormalizedEmail.Contains(normalizedEmail));
}
return Task.FromResult(result.Select(x => x).ToList());
}
}
}

3
src/Squidex.Shared/Users/IUserResolver.cs

@ -5,6 +5,7 @@
// All rights reserved. Licensed under the MIT license.
// ==========================================================================
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Squidex.Shared.Users
@ -12,5 +13,7 @@ namespace Squidex.Shared.Users
public interface IUserResolver
{
Task<IUser> FindByIdOrEmailAsync(string idOrEmail);
Task<List<IUser>> QueryByEmailAsync(string email);
}
}

8
src/Squidex/Areas/Api/Controllers/Users/Models/UserDto.cs

@ -6,6 +6,9 @@
// ==========================================================================
using System.ComponentModel.DataAnnotations;
using Squidex.Domain.Users;
using Squidex.Infrastructure.Reflection;
using Squidex.Shared.Users;
namespace Squidex.Areas.Api.Controllers.Users.Models
{
@ -34,5 +37,10 @@ namespace Squidex.Areas.Api.Controllers.Users.Models
/// </summary>
[Required]
public bool IsLocked { get; set; }
public static UserDto FromUser(IUser user)
{
return SimpleMapper.Map(user, new UserDto { DisplayName = user.DisplayName() });
}
}
}

10
src/Squidex/Areas/Api/Controllers/Users/UserManagementController.cs

@ -15,7 +15,6 @@ using Squidex.Areas.Api.Controllers.Users.Models;
using Squidex.Domain.Users;
using Squidex.Infrastructure;
using Squidex.Infrastructure.Commands;
using Squidex.Infrastructure.Reflection;
using Squidex.Infrastructure.Security;
using Squidex.Pipeline;
using Squidex.Shared.Users;
@ -52,7 +51,7 @@ namespace Squidex.Areas.Api.Controllers.Users
var response = new UsersDto
{
Total = taskForCount.Result,
Items = taskForItems.Result.Select(Map).ToArray()
Items = taskForItems.Result.Select(UserDto.FromUser).ToArray()
};
return Ok(response);
@ -70,7 +69,7 @@ namespace Squidex.Areas.Api.Controllers.Users
return NotFound();
}
var response = Map(entity);
var response = UserDto.FromUser(entity);
return Ok(response);
}
@ -127,11 +126,6 @@ namespace Squidex.Areas.Api.Controllers.Users
return NoContent();
}
private static UserDto Map(IUser user)
{
return SimpleMapper.Map(user, new UserDto { DisplayName = user.DisplayName() });
}
private bool IsSelf(string id)
{
var subject = User.OpenIdSubject();

105
src/Squidex/Areas/Api/Controllers/Users/UsersController.cs

@ -5,18 +5,18 @@
// All rights reserved. Licensed under the MIT license.
// ==========================================================================
using System;
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Reflection;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using NSwag.Annotations;
using Squidex.Areas.Api.Controllers.Users.Models;
using Squidex.Domain.Users;
using Squidex.Infrastructure.Commands;
using Squidex.Infrastructure.Reflection;
using Squidex.Infrastructure.Log;
using Squidex.Pipeline;
using Squidex.Shared.Users;
@ -30,8 +30,9 @@ namespace Squidex.Areas.Api.Controllers.Users
public sealed class UsersController : ApiController
{
private static readonly byte[] AvatarBytes;
private readonly UserManager<IUser> userManager;
private readonly IUserPictureStore userPictureStore;
private readonly IUserResolver userResolver;
private readonly ISemanticLog log;
static UsersController()
{
@ -45,11 +46,17 @@ namespace Squidex.Areas.Api.Controllers.Users
}
}
public UsersController(ICommandBus commandBus, UserManager<IUser> userManager, IUserPictureStore userPictureStore)
public UsersController(
ICommandBus commandBus,
IUserPictureStore userPictureStore,
IUserResolver userResolver,
ISemanticLog log)
: base(commandBus)
{
this.userManager = userManager;
this.userPictureStore = userPictureStore;
this.userResolver = userResolver;
this.log = log;
}
/// <summary>
@ -68,11 +75,22 @@ namespace Squidex.Areas.Api.Controllers.Users
[ProducesResponseType(typeof(PublicUserDto[]), 200)]
public async Task<IActionResult> GetUsers(string query)
{
var entities = await userManager.QueryByEmailAsync(query ?? string.Empty);
try
{
var entities = await userResolver.QueryByEmailAsync(query);
var models = entities.Where(x => !x.IsHidden()).Select(UserDto.FromUser).ToArray();
var models = entities.Where(x => !x.IsHidden()).Select(x => SimpleMapper.Map(x, new UserDto { DisplayName = x.DisplayName() })).ToArray();
return Ok(models);
}
catch (Exception ex)
{
log.LogError(ex, w => w
.WriteProperty("action", nameof(GetUsers))
.WriteProperty("status", "Failed"));
}
return Ok(models);
return Ok(new UserDto[0]);
}
/// <summary>
@ -89,16 +107,25 @@ namespace Squidex.Areas.Api.Controllers.Users
[ProducesResponseType(typeof(PublicUserDto), 200)]
public async Task<IActionResult> GetUser(string id)
{
var entity = await userManager.FindByIdAsync(id);
try
{
var entity = await userResolver.FindByIdOrEmailAsync(id);
if (entity != null)
{
var response = UserDto.FromUser(entity);
if (entity == null)
return Ok(response);
}
}
catch (Exception ex)
{
return NotFound();
log.LogError(ex, w => w
.WriteProperty("action", nameof(GetUser))
.WriteProperty("status", "Failed"));
}
var response = SimpleMapper.Map(entity, new UserDto { DisplayName = entity.DisplayName() });
return Ok(response);
return NotFound();
}
/// <summary>
@ -114,41 +141,41 @@ namespace Squidex.Areas.Api.Controllers.Users
[ProducesResponseType(200)]
public async Task<IActionResult> GetUserPicture(string id)
{
var entity = await userManager.FindByIdAsync(id);
if (entity == null)
{
return NotFound();
}
try
{
if (entity.IsPictureUrlStored())
{
return new FileStreamResult(await userPictureStore.DownloadAsync(entity.Id), "image/png");
}
}
catch
{
return new FileStreamResult(new MemoryStream(AvatarBytes), "image/png");
}
var entity = await userResolver.FindByIdOrEmailAsync(id);
using (var client = new HttpClient())
{
var url = entity.PictureNormalizedUrl();
if (!string.IsNullOrWhiteSpace(url))
if (entity != null)
{
var response = await client.GetAsync(url);
if (entity.IsPictureUrlStored())
{
return new FileStreamResult(await userPictureStore.DownloadAsync(entity.Id), "image/png");
}
if (response.IsSuccessStatusCode)
using (var client = new HttpClient())
{
var contentType = response.Content.Headers.ContentType.ToString();
var url = entity.PictureNormalizedUrl();
if (!string.IsNullOrWhiteSpace(url))
{
var response = await client.GetAsync(url);
return new FileStreamResult(await response.Content.ReadAsStreamAsync(), contentType);
if (response.IsSuccessStatusCode)
{
var contentType = response.Content.Headers.ContentType.ToString();
return new FileStreamResult(await response.Content.ReadAsStreamAsync(), contentType);
}
}
}
}
}
catch (Exception ex)
{
log.LogError(ex, w => w
.WriteProperty("action", nameof(GetUser))
.WriteProperty("status", "Failed"));
}
return new FileStreamResult(new MemoryStream(AvatarBytes), "image/png");
}

2
src/Squidex/app/features/content/pages/content/content-field.component.html

@ -117,6 +117,6 @@
</div>
<small class="form-text text-muted" *ngIf="field.properties['hints'] && field.properties['hints'].length > 0">
{{field.properties.hints}}
{{field.properties['hints']}}
</small>
</div>

4
src/Squidex/app/features/content/pages/contents/contents-page.component.html

@ -42,7 +42,7 @@
<table class="table table-items table-fixed">
<thead>
<tr>
<th class="cell-select" *ngIf="!isReadOnly">
<th class="cell-select">
<input type="checkbox" class="form-control" [ngModel]="isAllSelected" (ngModelChange)="selectAll($event)" />
</th>
<th class="cell-auto" *ngFor="let field of schema.listFields">
@ -54,7 +54,7 @@
<th class="cell-user">
By
</th>
<th class="cell-actions" *ngIf="!isReadOnly">
<th class="cell-actions">
Actions
</th>
</tr>

Loading…
Cancel
Save