Browse Source

Docs fixed, Type Names improved.

pull/107/head
Sebastian Stehle 8 years ago
parent
commit
10415cf360
  1. 1
      Squidex.ruleset
  2. 3
      Squidex.sln.DotSettings
  3. 2
      src/Squidex.Domain.Apps.Core/Schemas/AssetsFieldProperties.cs
  4. 2
      src/Squidex.Domain.Apps.Core/Schemas/BooleanFieldProperties.cs
  5. 2
      src/Squidex.Domain.Apps.Core/Schemas/DateTimeFieldProperties.cs
  6. 3
      src/Squidex.Domain.Apps.Core/Schemas/FieldRegistry.cs
  7. 2
      src/Squidex.Domain.Apps.Core/Schemas/GeolocationFieldProperties.cs
  8. 2
      src/Squidex.Domain.Apps.Core/Schemas/JsonFieldProperties.cs
  9. 2
      src/Squidex.Domain.Apps.Core/Schemas/NumberFieldProperties.cs
  10. 2
      src/Squidex.Domain.Apps.Core/Schemas/ReferencesFieldProperties.cs
  11. 2
      src/Squidex.Domain.Apps.Core/Schemas/StringFieldProperties.cs
  12. 4
      src/Squidex.Domain.Apps.Events/Apps/AppClientAttached.cs
  13. 4
      src/Squidex.Domain.Apps.Events/Apps/AppClientChanged.cs
  14. 4
      src/Squidex.Domain.Apps.Events/Apps/AppClientRenamed.cs
  15. 4
      src/Squidex.Domain.Apps.Events/Apps/AppClientRevoked.cs
  16. 4
      src/Squidex.Domain.Apps.Events/Apps/AppContributorAssigned.cs
  17. 4
      src/Squidex.Domain.Apps.Events/Apps/AppContributorRemoved.cs
  18. 4
      src/Squidex.Domain.Apps.Events/Apps/AppCreated.cs
  19. 3
      src/Squidex.Domain.Apps.Events/Apps/AppLanguageAdded.cs
  20. 3
      src/Squidex.Domain.Apps.Events/Apps/AppLanguageRemoved.cs
  21. 3
      src/Squidex.Domain.Apps.Events/Apps/AppMasterLanguageSet.cs
  22. 4
      src/Squidex.Domain.Apps.Events/Assets/AssetCreated.cs
  23. 4
      src/Squidex.Domain.Apps.Events/Assets/AssetDeleted.cs
  24. 4
      src/Squidex.Domain.Apps.Events/Assets/AssetRenamed.cs
  25. 4
      src/Squidex.Domain.Apps.Events/Contents/ContentCreated.cs
  26. 4
      src/Squidex.Domain.Apps.Events/Contents/ContentDeleted.cs
  27. 4
      src/Squidex.Domain.Apps.Events/Contents/ContentPublished.cs
  28. 4
      src/Squidex.Domain.Apps.Events/Contents/ContentUnpublished.cs
  29. 4
      src/Squidex.Domain.Apps.Events/Contents/ContentUpdated.cs
  30. 4
      src/Squidex.Domain.Apps.Events/Schemas/FieldAdded.cs
  31. 4
      src/Squidex.Domain.Apps.Events/Schemas/FieldDeleted.cs
  32. 4
      src/Squidex.Domain.Apps.Events/Schemas/FieldDisabled.cs
  33. 4
      src/Squidex.Domain.Apps.Events/Schemas/FieldEnabled.cs
  34. 4
      src/Squidex.Domain.Apps.Events/Schemas/FieldHidden.cs
  35. 4
      src/Squidex.Domain.Apps.Events/Schemas/FieldLocked.cs
  36. 4
      src/Squidex.Domain.Apps.Events/Schemas/FieldShown.cs
  37. 4
      src/Squidex.Domain.Apps.Events/Schemas/FieldUpdated.cs
  38. 4
      src/Squidex.Domain.Apps.Events/Schemas/Old/WebhookAdded.cs
  39. 4
      src/Squidex.Domain.Apps.Events/Schemas/Old/WebhookDeleted.cs
  40. 4
      src/Squidex.Domain.Apps.Events/Schemas/SchemaCreated.cs
  41. 4
      src/Squidex.Domain.Apps.Events/Schemas/SchemaDeleted.cs
  42. 4
      src/Squidex.Domain.Apps.Events/Schemas/SchemaFieldsReordered.cs
  43. 4
      src/Squidex.Domain.Apps.Events/Schemas/SchemaPublished.cs
  44. 4
      src/Squidex.Domain.Apps.Events/Schemas/SchemaUnpublished.cs
  45. 4
      src/Squidex.Domain.Apps.Events/Schemas/SchemaUpdated.cs
  46. 4
      src/Squidex.Domain.Apps.Events/Schemas/ScriptsConfigured.cs
  47. 4
      src/Squidex.Domain.Apps.Events/Webhooks/WebhookCreated.cs
  48. 3
      src/Squidex.Domain.Apps.Events/Webhooks/WebhookDeleted.cs
  49. 4
      src/Squidex.Domain.Apps.Events/Webhooks/WebhookUpdated.cs
  50. 26
      src/Squidex.Infrastructure/CQRS/Events/EventTypeAttribute.cs
  51. 2
      src/Squidex.Infrastructure/TypeNameAttribute.cs
  52. 25
      src/Squidex.Infrastructure/TypeNameRegistry.cs
  53. 4
      src/Squidex/Controllers/Api/Docs/DocsController.cs
  54. 5
      src/Squidex/Controllers/ContentApi/ContentSwaggerController.cs
  55. 15
      src/Squidex/Controllers/DocsVM.cs
  56. 15
      src/Squidex/Controllers/UI/Account/AccountController.cs
  57. 4
      src/Squidex/Controllers/UI/Profile/ProfileController.cs
  58. 5
      src/Squidex/Pipeline/AppApiAttribute.cs
  59. 18
      src/Squidex/Pipeline/AppApiFilter.cs
  60. 6
      src/Squidex/Views/Shared/Docs.cshtml
  61. 36
      tests/Squidex.Infrastructure.Tests/TypeNameRegistryTests.cs

1
Squidex.ruleset

@ -74,6 +74,7 @@
<Rule Id="RECS0154" Action="None" /> <Rule Id="RECS0154" Action="None" />
<Rule Id="RECS0146" Action="Error" /> <Rule Id="RECS0146" Action="Error" />
<Rule Id="RECS0026" Action="Error" /> <Rule Id="RECS0026" Action="Error" />
<Rule Id="RECS0145" Action="None" />
</Rules> </Rules>
<Rules AnalyzerId="Roslyn.Core" RuleNamespace="Roslyn.Core"> <Rules AnalyzerId="Roslyn.Core" RuleNamespace="Roslyn.Core">
<Rule Id="AD0001" Action="None" /> <Rule Id="AD0001" Action="None" />

3
Squidex.sln.DotSettings

@ -8,6 +8,5 @@
==========================================================================&#xD; ==========================================================================&#xD;
Copyright (c) Squidex Group&#xD; Copyright (c) Squidex Group&#xD;
All rights reserved.&#xD; All rights reserved.&#xD;
==========================================================================&#xD; ==========================================================================</s:String>
</s:String>
</wpf:ResourceDictionary> </wpf:ResourceDictionary>

2
src/Squidex.Domain.Apps.Core/Schemas/AssetsFieldProperties.cs

@ -12,7 +12,7 @@ using Squidex.Infrastructure;
namespace Squidex.Domain.Apps.Core.Schemas namespace Squidex.Domain.Apps.Core.Schemas
{ {
[TypeName("AssetsField")] [TypeName(nameof(AssetsField))]
public sealed class AssetsFieldProperties : FieldProperties public sealed class AssetsFieldProperties : FieldProperties
{ {
private int? minItems; private int? minItems;

2
src/Squidex.Domain.Apps.Core/Schemas/BooleanFieldProperties.cs

@ -12,7 +12,7 @@ using Squidex.Infrastructure;
namespace Squidex.Domain.Apps.Core.Schemas namespace Squidex.Domain.Apps.Core.Schemas
{ {
[TypeName("BooleanField")] [TypeName(nameof(BooleanField))]
public sealed class BooleanFieldProperties : FieldProperties public sealed class BooleanFieldProperties : FieldProperties
{ {
private BooleanFieldEditor editor; private BooleanFieldEditor editor;

2
src/Squidex.Domain.Apps.Core/Schemas/DateTimeFieldProperties.cs

@ -14,7 +14,7 @@ using Squidex.Infrastructure;
namespace Squidex.Domain.Apps.Core.Schemas namespace Squidex.Domain.Apps.Core.Schemas
{ {
[TypeName("DateTime")] [TypeName(nameof(DateTimeField))]
public sealed class DateTimeFieldProperties : FieldProperties public sealed class DateTimeFieldProperties : FieldProperties
{ {
private DateTimeFieldEditor editor; private DateTimeFieldEditor editor;

3
src/Squidex.Domain.Apps.Core/Schemas/FieldRegistry.cs

@ -78,6 +78,9 @@ namespace Squidex.Domain.Apps.Core.Schemas
Add<GeolocationFieldProperties>( Add<GeolocationFieldProperties>(
(id, name, partitioning, properties) => (id, name, partitioning, properties) =>
new GeolocationField(id, name, partitioning, (GeolocationFieldProperties)properties)); new GeolocationField(id, name, partitioning, (GeolocationFieldProperties)properties));
typeNameRegistry.MapObsolete(typeof(ReferencesFieldProperties), "DateTime");
typeNameRegistry.MapObsolete(typeof(DateTimeFieldProperties), "References");
} }
private void Add<TFieldProperties>(FactoryFunction fieldFactory) private void Add<TFieldProperties>(FactoryFunction fieldFactory)

2
src/Squidex.Domain.Apps.Core/Schemas/GeolocationFieldProperties.cs

@ -12,7 +12,7 @@ using Squidex.Infrastructure;
namespace Squidex.Domain.Apps.Core.Schemas namespace Squidex.Domain.Apps.Core.Schemas
{ {
[TypeName("GeolocationField")] [TypeName(nameof(GeolocationField))]
public sealed class GeolocationFieldProperties : FieldProperties public sealed class GeolocationFieldProperties : FieldProperties
{ {
private GeolocationFieldEditor editor; private GeolocationFieldEditor editor;

2
src/Squidex.Domain.Apps.Core/Schemas/JsonFieldProperties.cs

@ -12,7 +12,7 @@ using Squidex.Infrastructure;
namespace Squidex.Domain.Apps.Core.Schemas namespace Squidex.Domain.Apps.Core.Schemas
{ {
[TypeName("JsonField")] [TypeName(nameof(JsonField))]
public sealed class JsonFieldProperties : FieldProperties public sealed class JsonFieldProperties : FieldProperties
{ {
public override JToken GetDefaultValue() public override JToken GetDefaultValue()

2
src/Squidex.Domain.Apps.Core/Schemas/NumberFieldProperties.cs

@ -13,7 +13,7 @@ using Squidex.Infrastructure;
namespace Squidex.Domain.Apps.Core.Schemas namespace Squidex.Domain.Apps.Core.Schemas
{ {
[TypeName("NumberField")] [TypeName(nameof(NumberField))]
public sealed class NumberFieldProperties : FieldProperties public sealed class NumberFieldProperties : FieldProperties
{ {
private double? maxValue; private double? maxValue;

2
src/Squidex.Domain.Apps.Core/Schemas/ReferencesFieldProperties.cs

@ -13,7 +13,7 @@ using Squidex.Infrastructure;
namespace Squidex.Domain.Apps.Core.Schemas namespace Squidex.Domain.Apps.Core.Schemas
{ {
[TypeName("References")] [TypeName(nameof(ReferencesField))]
public sealed class ReferencesFieldProperties : FieldProperties public sealed class ReferencesFieldProperties : FieldProperties
{ {
private int? minItems; private int? minItems;

2
src/Squidex.Domain.Apps.Core/Schemas/StringFieldProperties.cs

@ -13,7 +13,7 @@ using Squidex.Infrastructure;
namespace Squidex.Domain.Apps.Core.Schemas namespace Squidex.Domain.Apps.Core.Schemas
{ {
[TypeName("StringField")] [TypeName(nameof(StringField))]
public sealed class StringFieldProperties : FieldProperties public sealed class StringFieldProperties : FieldProperties
{ {
private int? minLength; private int? minLength;

4
src/Squidex.Domain.Apps.Events/Apps/AppClientAttached.cs

@ -6,11 +6,11 @@
// All rights reserved. // All rights reserved.
// ========================================================================== // ==========================================================================
using Squidex.Infrastructure; using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Apps namespace Squidex.Domain.Apps.Events.Apps
{ {
[TypeName("AppClientAttachedEvent")] [EventType(nameof(AppClientAttached))]
public sealed class AppClientAttached : AppEvent public sealed class AppClientAttached : AppEvent
{ {
public string Id { get; set; } public string Id { get; set; }

4
src/Squidex.Domain.Apps.Events/Apps/AppClientChanged.cs

@ -6,11 +6,11 @@
// All rights reserved. // All rights reserved.
// ========================================================================== // ==========================================================================
using Squidex.Infrastructure; using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Apps namespace Squidex.Domain.Apps.Events.Apps
{ {
[TypeName("AppClientChangedEvent")] [EventType(nameof(AppClientChanged))]
public sealed class AppClientChanged : AppEvent public sealed class AppClientChanged : AppEvent
{ {
public string Id { get; set; } public string Id { get; set; }

4
src/Squidex.Domain.Apps.Events/Apps/AppClientRenamed.cs

@ -6,11 +6,11 @@
// All rights reserved. // All rights reserved.
// ========================================================================== // ==========================================================================
using Squidex.Infrastructure; using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Apps namespace Squidex.Domain.Apps.Events.Apps
{ {
[TypeName("AppClientRenamedEvent")] [EventType(nameof(AppClientRenamed))]
public sealed class AppClientRenamed : AppEvent public sealed class AppClientRenamed : AppEvent
{ {
public string Id { get; set; } public string Id { get; set; }

4
src/Squidex.Domain.Apps.Events/Apps/AppClientRevoked.cs

@ -6,11 +6,11 @@
// All rights reserved. // All rights reserved.
// ========================================================================== // ==========================================================================
using Squidex.Infrastructure; using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Apps namespace Squidex.Domain.Apps.Events.Apps
{ {
[TypeName("AppClientRevokedEvent")] [EventType(nameof(AppClientRevoked))]
public sealed class AppClientRevoked : AppEvent public sealed class AppClientRevoked : AppEvent
{ {
public string Id { get; set; } public string Id { get; set; }

4
src/Squidex.Domain.Apps.Events/Apps/AppContributorAssigned.cs

@ -7,11 +7,11 @@
// ========================================================================== // ==========================================================================
using Squidex.Domain.Apps.Core.Apps; using Squidex.Domain.Apps.Core.Apps;
using Squidex.Infrastructure; using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Apps namespace Squidex.Domain.Apps.Events.Apps
{ {
[TypeName("AppContributorAssignedEvent")] [EventType(nameof(AppContributorAssigned))]
public sealed class AppContributorAssigned : AppEvent public sealed class AppContributorAssigned : AppEvent
{ {
public string ContributorId { get; set; } public string ContributorId { get; set; }

4
src/Squidex.Domain.Apps.Events/Apps/AppContributorRemoved.cs

@ -6,11 +6,11 @@
// All rights reserved. // All rights reserved.
// ========================================================================== // ==========================================================================
using Squidex.Infrastructure; using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Apps namespace Squidex.Domain.Apps.Events.Apps
{ {
[TypeName("AppContributorRemovedEvent")] [EventType(nameof(AppContributorRemoved))]
public sealed class AppContributorRemoved : AppEvent public sealed class AppContributorRemoved : AppEvent
{ {
public string ContributorId { get; set; } public string ContributorId { get; set; }

4
src/Squidex.Domain.Apps.Events/Apps/AppCreated.cs

@ -6,11 +6,11 @@
// All rights reserved. // All rights reserved.
// ========================================================================== // ==========================================================================
using Squidex.Infrastructure; using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Apps namespace Squidex.Domain.Apps.Events.Apps
{ {
[TypeName("AppCreatedEvent")] [EventType(nameof(AppCreated))]
public sealed class AppCreated : AppEvent public sealed class AppCreated : AppEvent
{ {
public string Name { get; set; } public string Name { get; set; }

3
src/Squidex.Domain.Apps.Events/Apps/AppLanguageAdded.cs

@ -7,10 +7,11 @@
// ========================================================================== // ==========================================================================
using Squidex.Infrastructure; using Squidex.Infrastructure;
using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Apps namespace Squidex.Domain.Apps.Events.Apps
{ {
[TypeName("AppLanguageAddedEvent")] [EventType(nameof(AppLanguageAdded))]
public sealed class AppLanguageAdded : AppEvent public sealed class AppLanguageAdded : AppEvent
{ {
public Language Language { get; set; } public Language Language { get; set; }

3
src/Squidex.Domain.Apps.Events/Apps/AppLanguageRemoved.cs

@ -7,10 +7,11 @@
// ========================================================================== // ==========================================================================
using Squidex.Infrastructure; using Squidex.Infrastructure;
using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Apps namespace Squidex.Domain.Apps.Events.Apps
{ {
[TypeName("AppLanguageRemovedEvent")] [EventType(nameof(AppLanguageRemoved))]
public sealed class AppLanguageRemoved : AppEvent public sealed class AppLanguageRemoved : AppEvent
{ {
public Language Language { get; set; } public Language Language { get; set; }

3
src/Squidex.Domain.Apps.Events/Apps/AppMasterLanguageSet.cs

@ -7,10 +7,11 @@
// ========================================================================== // ==========================================================================
using Squidex.Infrastructure; using Squidex.Infrastructure;
using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Apps namespace Squidex.Domain.Apps.Events.Apps
{ {
[TypeName("AppMasterLanguageSetEvent")] [EventType(nameof(AppMasterLanguageSet))]
public sealed class AppMasterLanguageSet : AppEvent public sealed class AppMasterLanguageSet : AppEvent
{ {
public Language Language { get; set; } public Language Language { get; set; }

4
src/Squidex.Domain.Apps.Events/Assets/AssetCreated.cs

@ -6,11 +6,11 @@
// All rights reserved. // All rights reserved.
// ========================================================================== // ==========================================================================
using Squidex.Infrastructure; using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Assets namespace Squidex.Domain.Apps.Events.Assets
{ {
[TypeName("AssetCreatedEvent")] [EventType(nameof(AssetCreated))]
public sealed class AssetCreated : AssetEvent public sealed class AssetCreated : AssetEvent
{ {
public string FileName { get; set; } public string FileName { get; set; }

4
src/Squidex.Domain.Apps.Events/Assets/AssetDeleted.cs

@ -6,11 +6,11 @@
// All rights reserved. // All rights reserved.
// ========================================================================== // ==========================================================================
using Squidex.Infrastructure; using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Assets namespace Squidex.Domain.Apps.Events.Assets
{ {
[TypeName("AssetDeletedEvent")] [EventType(nameof(AssetDeleted))]
public sealed class AssetDeleted : AssetEvent public sealed class AssetDeleted : AssetEvent
{ {
public long DeletedSize { get; set; } public long DeletedSize { get; set; }

4
src/Squidex.Domain.Apps.Events/Assets/AssetRenamed.cs

@ -6,11 +6,11 @@
// All rights reserved. // All rights reserved.
// ========================================================================== // ==========================================================================
using Squidex.Infrastructure; using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Assets namespace Squidex.Domain.Apps.Events.Assets
{ {
[TypeName("AssetRenamedEvent")] [EventType(nameof(AssetRenamed))]
public sealed class AssetRenamed : AssetEvent public sealed class AssetRenamed : AssetEvent
{ {
public string FileName { get; set; } public string FileName { get; set; }

4
src/Squidex.Domain.Apps.Events/Contents/ContentCreated.cs

@ -7,11 +7,11 @@
// ========================================================================== // ==========================================================================
using Squidex.Domain.Apps.Core.Contents; using Squidex.Domain.Apps.Core.Contents;
using Squidex.Infrastructure; using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Contents namespace Squidex.Domain.Apps.Events.Contents
{ {
[TypeName("ContentCreatedEvent")] [EventType(nameof(ContentCreated))]
public sealed class ContentCreated : ContentEvent public sealed class ContentCreated : ContentEvent
{ {
public NamedContentData Data { get; set; } public NamedContentData Data { get; set; }

4
src/Squidex.Domain.Apps.Events/Contents/ContentDeleted.cs

@ -6,11 +6,11 @@
// All rights reserved. // All rights reserved.
// ========================================================================== // ==========================================================================
using Squidex.Infrastructure; using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Contents namespace Squidex.Domain.Apps.Events.Contents
{ {
[TypeName("ContentDeletedEvent")] [EventType(nameof(ContentDeleted))]
public sealed class ContentDeleted : ContentEvent public sealed class ContentDeleted : ContentEvent
{ {
} }

4
src/Squidex.Domain.Apps.Events/Contents/ContentPublished.cs

@ -6,11 +6,11 @@
// All rights reserved. // All rights reserved.
// ========================================================================== // ==========================================================================
using Squidex.Infrastructure; using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Contents namespace Squidex.Domain.Apps.Events.Contents
{ {
[TypeName("ContentPublishedEvent")] [EventType(nameof(ContentPublished))]
public sealed class ContentPublished : ContentEvent public sealed class ContentPublished : ContentEvent
{ {
} }

4
src/Squidex.Domain.Apps.Events/Contents/ContentUnpublished.cs

@ -6,11 +6,11 @@
// All rights reserved. // All rights reserved.
// ========================================================================== // ==========================================================================
using Squidex.Infrastructure; using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Contents namespace Squidex.Domain.Apps.Events.Contents
{ {
[TypeName("ContentUnpublishedEvent")] [EventType(nameof(ContentUnpublished))]
public sealed class ContentUnpublished : ContentEvent public sealed class ContentUnpublished : ContentEvent
{ {
} }

4
src/Squidex.Domain.Apps.Events/Contents/ContentUpdated.cs

@ -7,11 +7,11 @@
// ========================================================================== // ==========================================================================
using Squidex.Domain.Apps.Core.Contents; using Squidex.Domain.Apps.Core.Contents;
using Squidex.Infrastructure; using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Contents namespace Squidex.Domain.Apps.Events.Contents
{ {
[TypeName("ContentUpdatedEvent")] [EventType(nameof(ContentUpdated))]
public sealed class ContentUpdated : ContentEvent public sealed class ContentUpdated : ContentEvent
{ {
public NamedContentData Data { get; set; } public NamedContentData Data { get; set; }

4
src/Squidex.Domain.Apps.Events/Schemas/FieldAdded.cs

@ -7,11 +7,11 @@
// ========================================================================== // ==========================================================================
using Squidex.Domain.Apps.Core.Schemas; using Squidex.Domain.Apps.Core.Schemas;
using Squidex.Infrastructure; using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Schemas namespace Squidex.Domain.Apps.Events.Schemas
{ {
[TypeName("FieldAddedEvent")] [EventType(nameof(FieldAdded))]
public sealed class FieldAdded : FieldEvent public sealed class FieldAdded : FieldEvent
{ {
public string Name { get; set; } public string Name { get; set; }

4
src/Squidex.Domain.Apps.Events/Schemas/FieldDeleted.cs

@ -6,11 +6,11 @@
// All rights reserved. // All rights reserved.
// ========================================================================== // ==========================================================================
using Squidex.Infrastructure; using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Schemas namespace Squidex.Domain.Apps.Events.Schemas
{ {
[TypeName("FieldDeletedEvent")] [EventType(nameof(FieldDeleted))]
public sealed class FieldDeleted : FieldEvent public sealed class FieldDeleted : FieldEvent
{ {
} }

4
src/Squidex.Domain.Apps.Events/Schemas/FieldDisabled.cs

@ -6,11 +6,11 @@
// All rights reserved. // All rights reserved.
// ========================================================================== // ==========================================================================
using Squidex.Infrastructure; using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Schemas namespace Squidex.Domain.Apps.Events.Schemas
{ {
[TypeName("FieldDisabledEvent")] [EventType(nameof(FieldDisabled))]
public sealed class FieldDisabled : FieldEvent public sealed class FieldDisabled : FieldEvent
{ {
} }

4
src/Squidex.Domain.Apps.Events/Schemas/FieldEnabled.cs

@ -6,11 +6,11 @@
// All rights reserved. // All rights reserved.
// ========================================================================== // ==========================================================================
using Squidex.Infrastructure; using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Schemas namespace Squidex.Domain.Apps.Events.Schemas
{ {
[TypeName("FieldEnabledEvent")] [EventType(nameof(FieldEnabled))]
public sealed class FieldEnabled : FieldEvent public sealed class FieldEnabled : FieldEvent
{ {
} }

4
src/Squidex.Domain.Apps.Events/Schemas/FieldHidden.cs

@ -6,11 +6,11 @@
// All rights reserved. // All rights reserved.
// ========================================================================== // ==========================================================================
using Squidex.Infrastructure; using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Schemas namespace Squidex.Domain.Apps.Events.Schemas
{ {
[TypeName("FieldHiddenEvent")] [EventType(nameof(FieldHidden))]
public sealed class FieldHidden : FieldEvent public sealed class FieldHidden : FieldEvent
{ {
} }

4
src/Squidex.Domain.Apps.Events/Schemas/FieldLocked.cs

@ -6,11 +6,11 @@
// All rights reserved. // All rights reserved.
// ========================================================================== // ==========================================================================
using Squidex.Infrastructure; using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Schemas namespace Squidex.Domain.Apps.Events.Schemas
{ {
[TypeName("FieldLockedEvent")] [EventType(nameof(FieldLocked))]
public sealed class FieldLocked : FieldEvent public sealed class FieldLocked : FieldEvent
{ {
} }

4
src/Squidex.Domain.Apps.Events/Schemas/FieldShown.cs

@ -6,11 +6,11 @@
// All rights reserved. // All rights reserved.
// ========================================================================== // ==========================================================================
using Squidex.Infrastructure; using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Schemas namespace Squidex.Domain.Apps.Events.Schemas
{ {
[TypeName("FieldShownEvent")] [EventType(nameof(FieldShown))]
public sealed class FieldShown : FieldEvent public sealed class FieldShown : FieldEvent
{ {
} }

4
src/Squidex.Domain.Apps.Events/Schemas/FieldUpdated.cs

@ -7,11 +7,11 @@
// ========================================================================== // ==========================================================================
using Squidex.Domain.Apps.Core.Schemas; using Squidex.Domain.Apps.Core.Schemas;
using Squidex.Infrastructure; using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Schemas namespace Squidex.Domain.Apps.Events.Schemas
{ {
[TypeName("FieldUpdatedEvent")] [EventType(nameof(FieldUpdated))]
public sealed class FieldUpdated : FieldEvent public sealed class FieldUpdated : FieldEvent
{ {
public FieldProperties Properties { get; set; } public FieldProperties Properties { get; set; }

4
src/Squidex.Domain.Apps.Events/Schemas/Old/WebhookAdded.cs

@ -7,11 +7,11 @@
// ========================================================================== // ==========================================================================
using System; using System;
using Squidex.Infrastructure; using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Schemas.Old namespace Squidex.Domain.Apps.Events.Schemas.Old
{ {
[TypeName("WebhookAddedEvent")] [EventType(nameof(WebhookAdded))]
[Obsolete] [Obsolete]
public sealed class WebhookAdded : SchemaEvent public sealed class WebhookAdded : SchemaEvent
{ {

4
src/Squidex.Domain.Apps.Events/Schemas/Old/WebhookDeleted.cs

@ -7,11 +7,11 @@
// ========================================================================== // ==========================================================================
using System; using System;
using Squidex.Infrastructure; using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Schemas.Old namespace Squidex.Domain.Apps.Events.Schemas.Old
{ {
[TypeName("WebhookDeletedEvent")] [EventType(nameof(WebhookDeleted))]
[Obsolete] [Obsolete]
public sealed class WebhookDeleted : SchemaEvent public sealed class WebhookDeleted : SchemaEvent
{ {

4
src/Squidex.Domain.Apps.Events/Schemas/SchemaCreated.cs

@ -7,12 +7,12 @@
// ========================================================================== // ==========================================================================
using Squidex.Domain.Apps.Core.Schemas; using Squidex.Domain.Apps.Core.Schemas;
using Squidex.Infrastructure; using Squidex.Infrastructure.CQRS.Events;
using SchemaFields = System.Collections.Generic.List<Squidex.Domain.Apps.Events.Schemas.SchemaCreatedField>; using SchemaFields = System.Collections.Generic.List<Squidex.Domain.Apps.Events.Schemas.SchemaCreatedField>;
namespace Squidex.Domain.Apps.Events.Schemas namespace Squidex.Domain.Apps.Events.Schemas
{ {
[TypeName("SchemaCreatedEvent")] [EventType(nameof(SchemaCreated))]
public sealed class SchemaCreated : SchemaEvent public sealed class SchemaCreated : SchemaEvent
{ {
public string Name { get; set; } public string Name { get; set; }

4
src/Squidex.Domain.Apps.Events/Schemas/SchemaDeleted.cs

@ -6,11 +6,11 @@
// All rights reserved. // All rights reserved.
// ========================================================================== // ==========================================================================
using Squidex.Infrastructure; using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Schemas namespace Squidex.Domain.Apps.Events.Schemas
{ {
[TypeName("SchemaDeletedEvent")] [EventType(nameof(SchemaDeleted))]
public sealed class SchemaDeleted : SchemaEvent public sealed class SchemaDeleted : SchemaEvent
{ {
} }

4
src/Squidex.Domain.Apps.Events/Schemas/SchemaFieldsReordered.cs

@ -7,11 +7,11 @@
// ========================================================================== // ==========================================================================
using System.Collections.Generic; using System.Collections.Generic;
using Squidex.Infrastructure; using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Schemas namespace Squidex.Domain.Apps.Events.Schemas
{ {
[TypeName("SchemaFieldsReorderedEvent")] [EventType(nameof(SchemaFieldsReordered))]
public sealed class SchemaFieldsReordered : SchemaEvent public sealed class SchemaFieldsReordered : SchemaEvent
{ {
public List<long> FieldIds { get; set; } public List<long> FieldIds { get; set; }

4
src/Squidex.Domain.Apps.Events/Schemas/SchemaPublished.cs

@ -6,11 +6,11 @@
// All rights reserved. // All rights reserved.
// ========================================================================== // ==========================================================================
using Squidex.Infrastructure; using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Schemas namespace Squidex.Domain.Apps.Events.Schemas
{ {
[TypeName("SchemaPublishedEvent")] [EventType(nameof(SchemaPublished))]
public sealed class SchemaPublished : SchemaEvent public sealed class SchemaPublished : SchemaEvent
{ {
} }

4
src/Squidex.Domain.Apps.Events/Schemas/SchemaUnpublished.cs

@ -6,11 +6,11 @@
// All rights reserved. // All rights reserved.
// ========================================================================== // ==========================================================================
using Squidex.Infrastructure; using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Schemas namespace Squidex.Domain.Apps.Events.Schemas
{ {
[TypeName("SchemaUnpublishedEvent")] [EventType(nameof(SchemaUnpublished))]
public sealed class SchemaUnpublished : SchemaEvent public sealed class SchemaUnpublished : SchemaEvent
{ {
} }

4
src/Squidex.Domain.Apps.Events/Schemas/SchemaUpdated.cs

@ -7,11 +7,11 @@
// ========================================================================== // ==========================================================================
using Squidex.Domain.Apps.Core.Schemas; using Squidex.Domain.Apps.Core.Schemas;
using Squidex.Infrastructure; using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Schemas namespace Squidex.Domain.Apps.Events.Schemas
{ {
[TypeName("SchemaUpdatedEvent")] [EventType(nameof(SchemaUpdated))]
public sealed class SchemaUpdated : SchemaEvent public sealed class SchemaUpdated : SchemaEvent
{ {
public SchemaProperties Properties { get; set; } public SchemaProperties Properties { get; set; }

4
src/Squidex.Domain.Apps.Events/Schemas/ScriptsConfigured.cs

@ -6,11 +6,11 @@
// All rights reserved. // All rights reserved.
// ========================================================================== // ==========================================================================
using Squidex.Infrastructure; using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Schemas namespace Squidex.Domain.Apps.Events.Schemas
{ {
[TypeName("ScriptsConfiguredEvent")] [EventType(nameof(ScriptsConfigured))]
public sealed class ScriptsConfigured : SchemaEvent public sealed class ScriptsConfigured : SchemaEvent
{ {
public string ScriptQuery { get; set; } public string ScriptQuery { get; set; }

4
src/Squidex.Domain.Apps.Events/Webhooks/WebhookCreated.cs

@ -6,11 +6,11 @@
// All rights reserved. // All rights reserved.
// ========================================================================== // ==========================================================================
using Squidex.Infrastructure; using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Webhooks namespace Squidex.Domain.Apps.Events.Webhooks
{ {
[TypeName("WebhookCreatedEvent")] [EventType(nameof(WebhookCreated))]
public sealed class WebhookCreated : WebhookEditEvent public sealed class WebhookCreated : WebhookEditEvent
{ {
public string SharedSecret { get; set; } public string SharedSecret { get; set; }

3
src/Squidex.Domain.Apps.Events/Webhooks/WebhookDeleted.cs

@ -7,10 +7,11 @@
// ========================================================================== // ==========================================================================
using Squidex.Infrastructure; using Squidex.Infrastructure;
using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Webhooks namespace Squidex.Domain.Apps.Events.Webhooks
{ {
[TypeName("WebhookDeletedEventV2")] [EventType(nameof(WebhookUpdated), 2)]
public sealed class WebhookDeleted : WebhookEvent public sealed class WebhookDeleted : WebhookEvent
{ {
} }

4
src/Squidex.Domain.Apps.Events/Webhooks/WebhookUpdated.cs

@ -6,11 +6,11 @@
// All rights reserved. // All rights reserved.
// ========================================================================== // ==========================================================================
using Squidex.Infrastructure; using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Webhooks namespace Squidex.Domain.Apps.Events.Webhooks
{ {
[TypeName("WebhookUpdatedEvent")] [EventType(nameof(WebhookUpdated))]
public sealed class WebhookUpdated : WebhookEditEvent public sealed class WebhookUpdated : WebhookEditEvent
{ {
} }

26
src/Squidex.Infrastructure/CQRS/Events/EventTypeAttribute.cs

@ -0,0 +1,26 @@
// ==========================================================================
// EventTypeAttribute.cs
// Squidex Headless CMS
// ==========================================================================
// Copyright (c) Squidex Group
// All rights reserved.
// ==========================================================================
using System;
namespace Squidex.Infrastructure.CQRS.Events
{
[AttributeUsage(AttributeTargets.Class, Inherited = false)]
public sealed class EventTypeAttribute : TypeNameAttribute
{
public EventTypeAttribute(string typeName, int version = 1)
: base(CreateTypeName(typeName, version))
{
}
private static string CreateTypeName(string typeName, int version)
{
return $"{typeName}Event" + (version > 1 ? $"V{version}" : string.Empty);
}
}
}

2
src/Squidex.Infrastructure/TypeNameAttribute.cs

@ -11,7 +11,7 @@ using System;
namespace Squidex.Infrastructure namespace Squidex.Infrastructure
{ {
[AttributeUsage(AttributeTargets.Class, Inherited = false)] [AttributeUsage(AttributeTargets.Class, Inherited = false)]
public sealed class TypeNameAttribute : Attribute public class TypeNameAttribute : Attribute
{ {
public string TypeName { get; } public string TypeName { get; }

25
src/Squidex.Infrastructure/TypeNameRegistry.cs

@ -31,6 +31,31 @@ namespace Squidex.Infrastructure
return this; return this;
} }
public TypeNameRegistry MapObsolete(Type type, string name)
{
Guard.NotNull(type, nameof(type));
Guard.NotNull(name, nameof(name));
lock (namesByType)
{
try
{
typesByName.Add(name, type);
}
catch (ArgumentException)
{
if (typesByName[name] != type)
{
var message = $"The name '{name}' is already registered with type '{typesByName[name]}'";
throw new ArgumentException(message, nameof(type));
}
}
}
return this;
}
public TypeNameRegistry Map(Type type, string name) public TypeNameRegistry Map(Type type, string name)
{ {
Guard.NotNull(type, nameof(type)); Guard.NotNull(type, nameof(type));

4
src/Squidex/Controllers/Api/Docs/DocsController.cs

@ -20,9 +20,9 @@ namespace Squidex.Controllers.Api.Docs
[ApiCosts(0)] [ApiCosts(0)]
public IActionResult Docs() public IActionResult Docs()
{ {
ViewBag.Specification = "~/swagger/v1/swagger.json"; var vm = new DocsVM { Specification = "~/swagger/v1/swagger.json" };
return View("Docs"); return View(nameof(Docs), vm);
} }
} }
} }

5
src/Squidex/Controllers/ContentApi/ContentSwaggerController.cs

@ -17,6 +17,7 @@ using Squidex.Pipeline;
namespace Squidex.Controllers.ContentApi namespace Squidex.Controllers.ContentApi
{ {
[ApiExceptionFilter] [ApiExceptionFilter]
[AppApi(false)]
[SwaggerIgnore] [SwaggerIgnore]
public sealed class ContentSwaggerController : ControllerBase public sealed class ContentSwaggerController : ControllerBase
{ {
@ -35,9 +36,9 @@ namespace Squidex.Controllers.ContentApi
[ApiCosts(0)] [ApiCosts(0)]
public IActionResult Docs(string app) public IActionResult Docs(string app)
{ {
ViewBag.Specification = $"~/content/{app}/swagger/v1/swagger.json"; var vm = new DocsVM { Specification = $"~/content/{app}/swagger/v1/swagger.json" };
return View("Docs"); return View(nameof(Docs), vm);
} }
[HttpGet] [HttpGet]

15
src/Squidex/Controllers/DocsVM.cs

@ -0,0 +1,15 @@
// ==========================================================================
// DocsVM.cs
// Squidex Headless CMS
// ==========================================================================
// Copyright (c) Squidex Group
// All rights reserved.
// ==========================================================================
namespace Squidex.Controllers
{
public sealed class DocsVM
{
public string Specification { get; set; }
}
}

15
src/Squidex/Controllers/UI/Account/AccountController.cs

@ -79,11 +79,18 @@ namespace Squidex.Controllers.UI.Account
throw new SecurityException("User is not allowed to login."); throw new SecurityException("User is not allowed to login.");
} }
[HttpGet]
[Route("account/lockedout")]
public IActionResult LockedOut()
{
return View();
}
[HttpGet] [HttpGet]
[Route("account/accessdenied")] [Route("account/accessdenied")]
public IActionResult AccessDenied() public IActionResult AccessDenied()
{ {
return View("AccessDenied"); return View();
} }
[HttpGet] [HttpGet]
@ -177,7 +184,7 @@ namespace Squidex.Controllers.UI.Account
ReturnUrl = returnUrl ReturnUrl = returnUrl
}; };
return View("Login", vm); return View(nameof(Login), vm);
} }
[HttpPost] [HttpPost]
@ -206,7 +213,7 @@ namespace Squidex.Controllers.UI.Account
if (!result.Succeeded && result.IsLockedOut) if (!result.Succeeded && result.IsLockedOut)
{ {
return View("LockedOut"); return View(nameof(LockedOut));
} }
var isLoggedIn = result.Succeeded; var isLoggedIn = result.Succeeded;
@ -238,7 +245,7 @@ namespace Squidex.Controllers.UI.Account
if (user.IsLocked) if (user.IsLocked)
{ {
return View("LockedOut"); return View(nameof(LockedOut));
} }
} }
} }

4
src/Squidex/Controllers/UI/Profile/ProfileController.cs

@ -155,7 +155,7 @@ namespace Squidex.Controllers.UI.Profile
if (!ModelState.IsValid) if (!ModelState.IsValid)
{ {
return View("Profile", await GetProfileVM(user, model)); return View(nameof(Profile), await GetProfileVM(user, model));
} }
string errorMessage; string errorMessage;
@ -177,7 +177,7 @@ namespace Squidex.Controllers.UI.Profile
errorMessage = "An unexpected exception occurred."; errorMessage = "An unexpected exception occurred.";
} }
return View("Profile", await GetProfileVM(user, model, errorMessage)); return View(nameof(Profile), await GetProfileVM(user, model, errorMessage));
} }
private async Task<ProfileVM> GetProfileVM(IUser user, ChangeProfileModel model = null, string errorMessage = null, string successMessage = null) private async Task<ProfileVM> GetProfileVM(IUser user, ChangeProfileModel model = null, string errorMessage = null, string successMessage = null)

5
src/Squidex/Pipeline/AppApiAttribute.cs

@ -12,9 +12,12 @@ namespace Squidex.Pipeline
{ {
public sealed class AppApiAttribute : ServiceFilterAttribute public sealed class AppApiAttribute : ServiceFilterAttribute
{ {
public AppApiAttribute() public bool CheckPermissions { get; }
public AppApiAttribute(bool checkPermissions = true)
: base(typeof(AppApiFilter)) : base(typeof(AppApiFilter))
{ {
CheckPermissions = checkPermissions;
} }
} }
} }

18
src/Squidex/Pipeline/AppApiFilter.cs

@ -21,12 +21,22 @@ using Squidex.Shared.Identity;
namespace Squidex.Pipeline namespace Squidex.Pipeline
{ {
public sealed class AppApiFilter : IAsyncAuthorizationFilter public sealed class AppApiFilter : IAsyncAuthorizationFilter, IFilterContainer
{ {
private readonly IAppProvider appProvider; private readonly IAppProvider appProvider;
private readonly IAppPlansProvider appPlanProvider; private readonly IAppPlansProvider appPlanProvider;
private readonly IUsageTracker usageTracker; private readonly IUsageTracker usageTracker;
IFilterMetadata IFilterContainer.FilterDefinition { get; set; }
public AppApiAttribute FilterDefinition
{
get
{
return (AppApiAttribute)((IFilterContainer)this).FilterDefinition;
}
}
public AppApiFilter(IAppProvider appProvider, IAppPlansProvider appPlanProvider, IUsageTracker usageTracker) public AppApiFilter(IAppProvider appProvider, IAppPlansProvider appPlanProvider, IUsageTracker usageTracker)
{ {
this.appProvider = appProvider; this.appProvider = appProvider;
@ -49,6 +59,12 @@ namespace Squidex.Pipeline
return; return;
} }
if (!FilterDefinition.CheckPermissions)
{
context.HttpContext.Features.Set<IAppFeature>(new AppFeature(app));
return;
}
var user = context.HttpContext.User; var user = context.HttpContext.User;
var permission = var permission =

6
src/Squidex/Views/Shared/Docs.cshtml

@ -1,4 +1,6 @@
@{ @model Squidex.Controllers.DocsVM
@{
Layout = null; Layout = null;
} }
@ -31,7 +33,7 @@
</style> </style>
</head> </head>
<body> <body>
<redoc spec-url="@Url.Content(ViewBag.Specification)"></redoc> <redoc spec-url="@Url.Content(Model.Specification)"></redoc>
<script src="/scripts/redoc.min.js"></script> <script src="/scripts/redoc.min.js"></script>
</body> </body>

36
tests/Squidex.Infrastructure.Tests/TypeNameRegistryTests.cs

@ -8,6 +8,7 @@
using System; using System;
using System.Reflection; using System.Reflection;
using Squidex.Infrastructure.CQRS.Events;
using Xunit; using Xunit;
namespace Squidex.Infrastructure namespace Squidex.Infrastructure
@ -21,6 +22,11 @@ namespace Squidex.Infrastructure
{ {
} }
[EventType(nameof(MyAdded), 2)]
public sealed class MyAdded
{
}
[Fact] [Fact]
public void Should_register_and_retrieve_types() public void Should_register_and_retrieve_types()
{ {
@ -57,6 +63,28 @@ namespace Squidex.Infrastructure
Assert.Equal(typeof(MyType), sut.GetType("My")); Assert.Equal(typeof(MyType), sut.GetType("My"));
} }
[Fact]
public void Should_register_event_type_from_assembly()
{
sut.Map(typeof(TypeNameRegistryTests).GetTypeInfo().Assembly);
Assert.Equal("MyAddedEventV2", sut.GetName<MyAdded>());
Assert.Equal("MyAddedEventV2", sut.GetName(typeof(MyAdded)));
Assert.Equal(typeof(MyAdded), sut.GetType("myAddedEventV2"));
Assert.Equal(typeof(MyAdded), sut.GetType("MyAddedEventV2"));
}
[Fact]
public void Should_register_fallback_name()
{
sut.Map(typeof(MyType));
sut.MapObsolete(typeof(MyType), "my-old");
Assert.Equal(typeof(MyType), sut.GetType("my"));
Assert.Equal(typeof(MyType), sut.GetType("my-old"));
}
[Fact] [Fact]
public void Should_not_throw_exception_if_type_is_already_registered_with_same_name() public void Should_not_throw_exception_if_type_is_already_registered_with_same_name()
{ {
@ -80,6 +108,14 @@ namespace Squidex.Infrastructure
Assert.Throws<ArgumentException>(() => sut.Map(typeof(byte), "short")); Assert.Throws<ArgumentException>(() => sut.Map(typeof(byte), "short"));
} }
[Fact]
public void Should_throw_exception_if_obsolete_name_is_already_registered()
{
sut.MapObsolete(typeof(short), "short2");
Assert.Throws<ArgumentException>(() => sut.MapObsolete(typeof(byte), "short2"));
}
[Fact] [Fact]
public void Should_throw_exception_if_name_is_not_supported() public void Should_throw_exception_if_name_is_not_supported()
{ {

Loading…
Cancel
Save