Skip to content

Commit ac2ee57

Browse files
committed
V14: Integrations (Dynamics)
- Update API - update dynamics form picker
1 parent 3aa204a commit ac2ee57

20 files changed

+402
-206
lines changed

src/Umbraco.Cms.Integrations.Crm.Dynamics/Api/Management/Controllers/CheckOAuthConfigurationController.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,14 @@ public CheckOAuthConfigurationController(IOptions<DynamicsSettings> options, Dyn
1818
{
1919
}
2020

21-
[HttpGet("check-oauth-configuration")]
21+
[HttpGet("oauth-configuration")]
2222
[ProducesResponseType(typeof(OAuthConfigurationDto), StatusCodes.Status200OK)]
23-
[ProducesResponseType(StatusCodes.Status404NotFound)]
2423
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
2524
public async Task<IActionResult> CheckOAuthConfiguration()
2625
{
2726
var oauthConfiguration = DynamicsConfigurationService.GetOAuthConfiguration();
2827

29-
if (oauthConfiguration == null) return NotFound(new OAuthConfigurationDto { Message = string.Empty });
28+
if (oauthConfiguration == null) return Unauthorized(new OAuthConfigurationDto { Message = string.Empty });
3029

3130
var identity = await DynamicsService.GetIdentity(oauthConfiguration.AccessToken);
3231

src/Umbraco.Cms.Integrations.Crm.Dynamics/Api/Management/Controllers/FormsControllerBase.cs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,6 @@ namespace Umbraco.Cms.Integrations.Crm.Dynamics.Api.Management.Controllers
2020
[Route($"{Constants.ManagementApi.RootPath}/v{{version:apiVersion}}/forms")]
2121
public class FormsControllerBase : DynamicsControllerBase
2222
{
23-
// Using a static HttpClient (see: https://www.aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/).
24-
//private readonly static HttpClient s_client = new HttpClient();
25-
26-
// Access to the client within the class is via ClientFactory(), allowing us to mock the responses in tests.
27-
//public static Func<HttpClient> ClientFactory = () => s_client;
28-
2923
protected readonly DynamicsSettings DynamicsSettings;
3024

3125
protected readonly IDynamicsAuthorizationService AuthorizationService;

src/Umbraco.Cms.Integrations.Crm.Dynamics/Api/Management/Controllers/GetAccessTokenController.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public GetAccessTokenController(IOptions<DynamicsSettings> options, DynamicsServ
1818
{
1919
}
2020

21-
[HttpPost("get-access-token")]
21+
[HttpPost("access-token")]
2222
[ProducesResponseType(typeof(string), StatusCodes.Status200OK)]
2323
public async Task<IActionResult> GetAccessToken([FromBody] OAuthRequestDto authRequestDto) =>
2424
Ok(await AuthorizationService.GetAccessTokenAsync(authRequestDto.Code));

src/Umbraco.Cms.Integrations.Crm.Dynamics/Api/Management/Controllers/GetEmbedCodeController.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public GetEmbedCodeController(IOptions<DynamicsSettings> options, DynamicsServic
1717
{
1818
}
1919

20-
[HttpGet("get-embed-code")]
20+
[HttpGet("embed-code")]
2121
[ProducesResponseType(typeof(Task<string>), StatusCodes.Status200OK)]
2222
public async Task<IActionResult> GetEmbedCode(string formId) => Ok(await DynamicsService.GetEmbedCode(formId));
2323
}

src/Umbraco.Cms.Integrations.Crm.Dynamics/Api/Management/Controllers/GetSystemUserFullNameController.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public GetSystemUserFullNameController(IOptions<DynamicsSettings> options, Dynam
1717
{
1818
}
1919

20-
[HttpGet("get-system-user-fullname")]
20+
[HttpGet("system-user-fullname")]
2121
[ProducesResponseType(typeof(string), StatusCodes.Status200OK)]
2222
public IActionResult GetSystemUserFullName() => Ok(DynamicsConfigurationService.GetSystemUserFullName());
2323
}

src/Umbraco.Cms.Integrations.Crm.Dynamics/Client/generated/services.gen.ts

Lines changed: 26 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import type { CancelablePromise } from './core/CancelablePromise';
44
import { OpenAPI } from './core/OpenAPI';
55
import { request as __request } from './core/request';
6-
import type { GetFormsData, GetFormsResponse, RevokeAccessTokenResponse, GetAuthorizationUrlResponse, CheckOauthConfigurationResponse, GetAccessTokenData, GetAccessTokenResponse, GetEmbedCodeData, GetEmbedCodeResponse, GetSystemUserFullNameResponse, OauthData, OauthResponse } from './types.gen';
6+
import type { GetFormsData, GetFormsResponse, GetAccessTokenData, GetAccessTokenResponse, GetAuthorizationUrlResponse, GetEmbedCodeData, GetEmbedCodeResponse, CheckOauthConfigurationResponse, RevokeAccessTokenResponse, GetSystemUserFullNameResponse, OauthData, OauthResponse } from './types.gen';
77

88
export class DynamicsService {
99
/**
@@ -23,13 +23,17 @@ export class DynamicsService {
2323
}
2424

2525
/**
26+
* @param data The data for the request.
27+
* @param data.requestBody
2628
* @returns string OK
2729
* @throws ApiError
2830
*/
29-
public static revokeAccessToken(): CancelablePromise<RevokeAccessTokenResponse> {
31+
public static getAccessToken(data: GetAccessTokenData = {}): CancelablePromise<GetAccessTokenResponse> {
3032
return __request(OpenAPI, {
31-
method: 'DELETE',
32-
url: '/dynamics/management/api/v1/forms'
33+
method: 'POST',
34+
url: '/dynamics/management/api/v1/forms/access-token',
35+
body: data.requestBody,
36+
mediaType: 'application/json'
3337
});
3438
}
3539

@@ -45,48 +49,43 @@ export class DynamicsService {
4549
}
4650

4751
/**
52+
* @param data The data for the request.
53+
* @param data.formId
4854
* @returns unknown OK
4955
* @throws ApiError
5056
*/
51-
public static checkOauthConfiguration(): CancelablePromise<CheckOauthConfigurationResponse> {
57+
public static getEmbedCode(data: GetEmbedCodeData = {}): CancelablePromise<GetEmbedCodeResponse> {
5258
return __request(OpenAPI, {
5359
method: 'GET',
54-
url: '/dynamics/management/api/v1/forms/check-oauth-configuration',
55-
errors: {
56-
401: 'Unauthorized',
57-
404: 'Not Found'
60+
url: '/dynamics/management/api/v1/forms/embed-code',
61+
query: {
62+
formId: data.formId
5863
}
5964
});
6065
}
6166

6267
/**
63-
* @param data The data for the request.
64-
* @param data.requestBody
65-
* @returns string OK
68+
* @returns unknown OK
6669
* @throws ApiError
6770
*/
68-
public static getAccessToken(data: GetAccessTokenData = {}): CancelablePromise<GetAccessTokenResponse> {
71+
public static checkOauthConfiguration(): CancelablePromise<CheckOauthConfigurationResponse> {
6972
return __request(OpenAPI, {
70-
method: 'POST',
71-
url: '/dynamics/management/api/v1/forms/get-access-token',
72-
body: data.requestBody,
73-
mediaType: 'application/json'
73+
method: 'GET',
74+
url: '/dynamics/management/api/v1/forms/oauth-configuration',
75+
errors: {
76+
401: 'Unauthorized'
77+
}
7478
});
7579
}
7680

7781
/**
78-
* @param data The data for the request.
79-
* @param data.formId
80-
* @returns unknown OK
82+
* @returns string OK
8183
* @throws ApiError
8284
*/
83-
public static getEmbedCode(data: GetEmbedCodeData = {}): CancelablePromise<GetEmbedCodeResponse> {
85+
public static revokeAccessToken(): CancelablePromise<RevokeAccessTokenResponse> {
8486
return __request(OpenAPI, {
85-
method: 'GET',
86-
url: '/dynamics/management/api/v1/forms/get-embed-code',
87-
query: {
88-
formId: data.formId
89-
}
87+
method: 'DELETE',
88+
url: '/dynamics/management/api/v1/forms/revoke-access-token'
9089
});
9190
}
9291

@@ -97,7 +96,7 @@ export class DynamicsService {
9796
public static getSystemUserFullName(): CancelablePromise<GetSystemUserFullNameResponse> {
9897
return __request(OpenAPI, {
9998
method: 'GET',
100-
url: '/dynamics/management/api/v1/forms/get-system-user-fullname'
99+
url: '/dynamics/management/api/v1/forms/system-user-fullname'
101100
});
102101
}
103102

src/Umbraco.Cms.Integrations.Crm.Dynamics/Client/generated/types.gen.ts

Lines changed: 24 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -749,24 +749,24 @@ export type GetFormsData = {
749749

750750
export type GetFormsResponse = Array<(FormDtoModel)>;
751751

752-
export type RevokeAccessTokenResponse = string;
753-
754-
export type GetAuthorizationUrlResponse = string;
755-
756-
export type CheckOauthConfigurationResponse = OAuthConfigurationDtoModel;
757-
758752
export type GetAccessTokenData = {
759753
requestBody?: OAuthRequestDtoModel;
760754
};
761755

762756
export type GetAccessTokenResponse = string;
763757

758+
export type GetAuthorizationUrlResponse = string;
759+
764760
export type GetEmbedCodeData = {
765761
formId?: string;
766762
};
767763

768764
export type GetEmbedCodeResponse = Task_1;
769765

766+
export type CheckOauthConfigurationResponse = OAuthConfigurationDtoModel;
767+
768+
export type RevokeAccessTokenResponse = string;
769+
770770
export type GetSystemUserFullNameResponse = string;
771771

772772
export type OauthData = {
@@ -786,7 +786,10 @@ export type $OpenApiTs = {
786786
200: Array<(FormDtoModel)>;
787787
};
788788
};
789-
delete: {
789+
};
790+
'/dynamics/management/api/v1/forms/access-token': {
791+
post: {
792+
req: GetAccessTokenData;
790793
res: {
791794
/**
792795
* OK
@@ -805,47 +808,42 @@ export type $OpenApiTs = {
805808
};
806809
};
807810
};
808-
'/dynamics/management/api/v1/forms/check-oauth-configuration': {
811+
'/dynamics/management/api/v1/forms/embed-code': {
809812
get: {
813+
req: GetEmbedCodeData;
810814
res: {
811815
/**
812816
* OK
813817
*/
814-
200: OAuthConfigurationDtoModel;
815-
/**
816-
* Unauthorized
817-
*/
818-
401: unknown;
819-
/**
820-
* Not Found
821-
*/
822-
404: unknown;
818+
200: Task_1;
823819
};
824820
};
825821
};
826-
'/dynamics/management/api/v1/forms/get-access-token': {
827-
post: {
828-
req: GetAccessTokenData;
822+
'/dynamics/management/api/v1/forms/oauth-configuration': {
823+
get: {
829824
res: {
830825
/**
831826
* OK
832827
*/
833-
200: string;
828+
200: OAuthConfigurationDtoModel;
829+
/**
830+
* Unauthorized
831+
*/
832+
401: unknown;
834833
};
835834
};
836835
};
837-
'/dynamics/management/api/v1/forms/get-embed-code': {
838-
get: {
839-
req: GetEmbedCodeData;
836+
'/dynamics/management/api/v1/forms/revoke-access-token': {
837+
delete: {
840838
res: {
841839
/**
842840
* OK
843841
*/
844-
200: Task_1;
842+
200: string;
845843
};
846844
};
847845
};
848-
'/dynamics/management/api/v1/forms/get-system-user-fullname': {
846+
'/dynamics/management/api/v1/forms/system-user-fullname': {
849847
get: {
850848
res: {
851849
/**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import { UmbElementMixin } from "@umbraco-cms/backoffice/element-api";
2+
import { LitElement, customElement, html, property, state, when } from "@umbraco-cms/backoffice/external/lit";
3+
4+
const elementName = "dynamics-authorization";
5+
6+
@customElement(elementName)
7+
export class DynamicsAuthorizationElement extends UmbElementMixin(LitElement){
8+
constructor() {
9+
super();
10+
11+
// this.consumeContext(SHOPIFY_CONTEXT_TOKEN, (context) => {
12+
// if (!context) return;
13+
// this.#shopifyContext = context;
14+
// this.observe(context.settingsModel, (settingsModel) => {
15+
// this.#settingsModel = settingsModel;
16+
// });
17+
// });
18+
}
19+
20+
async connectedCallback() {
21+
super.connectedCallback();
22+
}
23+
24+
render(){
25+
return html`
26+
<div>
27+
<p>Connected: Thanhnd</p>
28+
</div>
29+
<div>
30+
<uui-button
31+
look="primary"
32+
label="Connect"></uui-button>
33+
<uui-button
34+
color="danger"
35+
look="secondary"
36+
label="Revoke"></uui-button>
37+
</div>
38+
`;
39+
}
40+
}
41+
42+
export default DynamicsAuthorizationElement;
43+
44+
declare global {
45+
interface HTMLElementTagNameMap {
46+
[elementName]: DynamicsAuthorizationElement;
47+
}
48+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import type { ManifestPropertyEditorUi } from "@umbraco-cms/backoffice/extension-registry";
2+
3+
export const manifests : ManifestPropertyEditorUi = {
4+
type: 'propertyEditorUi',
5+
alias: 'Dynamics.PropertyEditorUi.Authorization',
6+
name: 'Dynamics Form Picker Authorization Setting',
7+
element: () => import('./authorization-property-editor.element.js'),
8+
meta: {
9+
label: 'Authorization',
10+
icon: 'icon-autofill',
11+
group: 'common',
12+
}
13+
}

src/Umbraco.Cms.Integrations.Crm.Dynamics/Client/src/index.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@ import type { UmbEntryPointOnInit } from "@umbraco-cms/backoffice/extension-api"
22
import { UMB_AUTH_CONTEXT } from "@umbraco-cms/backoffice/auth";
33
import { manifest as dynamicsContext } from "./context/manifests";
44
import { manifests as dynamicsFormPicker } from "./property-editor/manifests";
5+
import { manifest as dynamicsModal } from "./modal/manifests";
56
import { OpenAPI } from "@umbraco-integrations/dynamics/generated";
67

78
export const onInit: UmbEntryPointOnInit = (host, extensionRegistry) => {
89
extensionRegistry.registerMany([
910
dynamicsContext,
10-
...dynamicsFormPicker
11+
...dynamicsFormPicker,
12+
dynamicsModal
1113
]);
1214

1315
host.consumeContext(UMB_AUTH_CONTEXT, async (instance) => {

0 commit comments

Comments
 (0)