Browse Source

Simplify fluid usage.

pull/537/head
Sebastian 6 years ago
parent
commit
b508e3c569
  1. 26
      backend/src/Squidex.Domain.Apps.Core.Operations/Templates/Extensions/UserFluidExtension.cs
  2. 75
      backend/src/Squidex.Domain.Apps.Core.Operations/Templates/Extensions/UserFluidValue.cs

26
backend/src/Squidex.Domain.Apps.Core.Operations/Templates/Extensions/UserFluidExtension.cs

@ -5,6 +5,8 @@
// All rights reserved. Licensed under the MIT license.
// ==========================================================================
using System;
using System.Linq;
using Fluid;
using Fluid.Values;
using Squidex.Shared.Users;
@ -15,7 +17,29 @@ namespace Squidex.Domain.Apps.Core.Templates.Extensions
{
public void RegisterGlobalTypes(IMemberAccessStrategy memberAccessStrategy)
{
FluidValue.SetTypeMapping<IUser>(x => new UserFluidValue(x));
memberAccessStrategy.Register<IUser, FluidValue>((user, name) =>
{
switch (name)
{
case "id":
return new StringValue(user.Id);
case "email":
return new StringValue(user.Email);
case "name":
return new StringValue(user.DisplayName());
default:
{
var claim = user.Claims.FirstOrDefault(x => string.Equals(name, x.Type, StringComparison.OrdinalIgnoreCase));
if (claim != null)
{
return new StringValue(claim.Value);
}
return NilValue.Instance;
}
}
});
}
}
}

75
backend/src/Squidex.Domain.Apps.Core.Operations/Templates/Extensions/UserFluidValue.cs

@ -1,75 +0,0 @@
// ==========================================================================
// Squidex Headless CMS
// ==========================================================================
// Copyright (c) Squidex UG (haftungsbeschraenkt)
// All rights reserved. Licensed under the MIT license.
// ==========================================================================
using System;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text.Encodings.Web;
using Fluid;
using Fluid.Values;
using Squidex.Shared.Users;
namespace Squidex.Domain.Apps.Core.Templates.Extensions
{
public sealed class UserFluidValue : FluidValue
{
private readonly IUser value;
public override FluidValues Type { get; } = FluidValues.Object;
public UserFluidValue(IUser value)
{
this.value = value;
}
protected override FluidValue GetValue(string name, TemplateContext context)
{
switch (name)
{
case "id":
return Create(value.Id);
case "email":
return Create(value.Email);
case "name":
return Create(value.DisplayName());
default:
return Create(value.Claims.FirstOrDefault(x => string.Equals(name, x.Type, StringComparison.OrdinalIgnoreCase))?.Value);
}
}
public override bool Equals(FluidValue other)
{
return other is UserFluidValue user && user.value.Id == value.Id;
}
public override bool ToBooleanValue()
{
return true;
}
public override decimal ToNumberValue()
{
return 0;
}
public override object ToObjectValue()
{
return new UserFluidValue(value);
}
public override string ToStringValue()
{
return value.Id;
}
public override void WriteTo(TextWriter writer, TextEncoder encoder, CultureInfo cultureInfo)
{
writer.Write(value.Id);
}
}
}
Loading…
Cancel
Save