Skip to content

Commit 62fc583

Browse files
authoredMar 4, 2025··
DYN-7925: make access token accessible to all package authors using static method (#15868)
1 parent 31c80a8 commit 62fc583

File tree

7 files changed

+126
-7
lines changed

7 files changed

+126
-7
lines changed
 

‎src/DynamoCore/Configuration/ExecutionSession.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using System;
1+
using System;
22
using System.Collections.Generic;
33
using System.IO;
44
using Dynamo.Interfaces;

‎src/DynamoCore/Models/DynamoModel.cs

+15
Original file line numberDiff line numberDiff line change
@@ -991,6 +991,11 @@ protected DynamoModel(IStartConfiguration config)
991991

992992
LogWarningMessageEvents.LogWarningMessage += LogWarningMessage;
993993
LogWarningMessageEvents.LogInfoMessage += LogInfoMessage;
994+
995+
#pragma warning disable AUTH_SERVICES
996+
AuthServices.RequestAuthProvider += AuthServicesEvents_AuthProviderRequested;
997+
#pragma warning restore AUTH_SERVICES
998+
994999
DynamoConsoleLogger.LogMessageToDynamoConsole += LogMessageWrapper;
9951000
DynamoConsoleLogger.LogErrorToDynamoConsole += LogErrorMessageWrapper;
9961001
if (!IsServiceMode)
@@ -1020,6 +1025,11 @@ protected DynamoModel(IStartConfiguration config)
10201025
DynamoReady(new ReadyParams(this));
10211026
}
10221027

1028+
private void AuthServicesEvents_AuthProviderRequested(RequestAuthProviderEventArgs args)
1029+
{
1030+
args.AuthProvider = AuthenticationManager.AuthProvider;
1031+
}
1032+
10231033
/// <summary>
10241034
/// When feature flags received, handle them and make changes
10251035
/// </summary>
@@ -1461,6 +1471,11 @@ public void Dispose()
14611471

14621472
LogWarningMessageEvents.LogWarningMessage -= LogWarningMessage;
14631473
LogWarningMessageEvents.LogInfoMessage -= LogInfoMessage;
1474+
1475+
#pragma warning disable AUTH_SERVICES
1476+
AuthServices.RequestAuthProvider -= AuthServicesEvents_AuthProviderRequested;
1477+
#pragma warning restore AUTH_SERVICES
1478+
14641479
DynamoConsoleLogger.LogMessageToDynamoConsole -= LogMessageWrapper;
14651480
DynamoConsoleLogger.LogErrorToDynamoConsole -= LogErrorMessageWrapper;
14661481
foreach (var ws in _workspaces)

‎src/NodeServices/AuthServices.cs

+62
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Text;
4+
5+
namespace DynamoServices
6+
{
7+
8+
/// <summary>
9+
/// Event arguments for the RequestAuthProvider event.
10+
/// </summary>
11+
internal class RequestAuthProviderEventArgs : EventArgs
12+
{
13+
/// <summary>
14+
/// Gets or sets the found auth provider, if one is found. It's possible that
15+
/// this willl be null.
16+
/// </summary>
17+
internal object AuthProvider { get; set; }
18+
}
19+
20+
/// <summary>
21+
/// Delegate for handling the RequestAuthProvider event.
22+
/// </summary>
23+
/// <param name="args">The event arguments.</param>
24+
internal delegate void RequestAuthProviderEventHandler(RequestAuthProviderEventArgs args);
25+
26+
27+
/// <summary>
28+
/// Static class containing authentication service events. Useful if you want to make authenticated requests from your nodes.
29+
/// </summary>
30+
#if NET8_0_OR_GREATER
31+
[System.Diagnostics.CodeAnalysis.Experimental("AUTH_SERVICES")]
32+
#else
33+
[Obsolete("This method is for evaluation purposes only and is subject to change or removal in future updates.")]
34+
#endif
35+
public static class AuthServices
36+
{
37+
/// <summary>
38+
/// Event triggered to request an authentication provider.
39+
/// </summary>
40+
internal static event RequestAuthProviderEventHandler RequestAuthProvider;
41+
42+
/// <summary>
43+
/// Returns the active DynamoModel's AuthProvider.
44+
/// </summary>
45+
/// <returns>The IOAuth2AccessTokenProvider associated with the active DynamoModel.
46+
/// It's possible this property might be null.</returns>
47+
#if NET8_0_OR_GREATER
48+
[System.Diagnostics.CodeAnalysis.Experimental("REQUEST_AUTHPROVIDER")]
49+
#else
50+
[Obsolete("This property is for evaluation purposes only and is subject to change or removal in future updates.")]
51+
#endif
52+
public static object AuthProvider
53+
{
54+
get
55+
{
56+
var args = new RequestAuthProviderEventArgs();
57+
RequestAuthProvider?.Invoke(args);
58+
return args.AuthProvider;
59+
}
60+
}
61+
}
62+
}

‎src/NodeServices/DynamoServices.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
<RootNamespace>DynamoServices</RootNamespace>
1212
<AssemblyName>DynamoServices</AssemblyName>
1313
<DocumentationFile>$(OutputPath)\DynamoServices.XML</DocumentationFile>
14-
<TargetFramework>netstandard2.0</TargetFramework>
14+
<TargetFrameworks>netstandard2.0;net8.0</TargetFrameworks>
1515
</PropertyGroup>
1616
<PropertyGroup>
1717
<NoWarn>MSB3539;CS1591;NUnit2005;NUnit2007;CS0618;CS0612;CS0672</NoWarn>

‎src/NodeServices/ExecutionSession.cs

-1
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,5 @@ public class ParameterKeys
8181
/// The return value is an ILogger
8282
/// </summary>
8383
public static readonly string Logger = nameof(Logger);
84-
8584
}
8685
}

‎test/DynamoCoreTests/AuthenticationManagerTests.cs

+41-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
using Dynamo.Core;
2-
2+
using Dynamo.Interfaces;
3+
using Dynamo.Models;
4+
using Dynamo.Scheduler;
5+
using DynamoServices;
36
using Greg;
4-
7+
using Greg.AuthProviders;
58
using Moq;
69

710
using NUnit.Framework;
@@ -31,7 +34,7 @@ public void Logout_CausesLogoutMethodToBeInvokedOnAuthProvider()
3134

3235
Assert.IsTrue(logoutCalled);
3336
}
34-
37+
3538
#endregion
3639

3740
#region Login
@@ -118,4 +121,39 @@ public void Property_LoginState()
118121

119122
#endregion
120123
}
124+
125+
[TestFixture]
126+
public class AuthServicesTests : DynamoModelTestBase
127+
{
128+
129+
protected override DynamoModel.IStartConfiguration CreateStartConfiguration(IPreferences settings)
130+
{
131+
var authProviderMock = new Mock<IAuthProvider>();
132+
authProviderMock.Setup(x => x.LoginState).Returns(LoginState.LoggedIn);
133+
authProviderMock.As<IOAuth2AccessTokenProvider>().Setup(x => x.GetAccessToken()).Returns("faketoken");
134+
135+
136+
return new DynamoModel.DefaultStartConfiguration()
137+
{
138+
PathResolver = pathResolver,
139+
StartInTestMode = true,
140+
GeometryFactoryPath = preloader.GeometryFactoryPath,
141+
Preferences = settings,
142+
ProcessMode = TaskProcessMode.Synchronous,
143+
AuthProvider = authProviderMock.Object
144+
};
145+
}
146+
147+
[Test]
148+
public void Test_OnRequestAuthProvider_FindsAuthProvider()
149+
{
150+
#pragma warning disable AUTH_SERVICES
151+
#pragma warning disable REQUEST_AUTHPROVIDER
152+
var result = AuthServices.AuthProvider;
153+
#pragma warning restore REQUEST_AUTHPROVIDER
154+
#pragma warning restore AUTH_SERVICES
155+
156+
Assert.AreEqual((result as IOAuth2AccessTokenProvider).GetAccessToken(), "faketoken");
157+
}
158+
}
121159
}

‎tools/NuGet/template-nuget/DynamoVisualProgramming.DynamoServices.nuspec

+6-1
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,13 @@
2525
</dependencies>
2626
</metadata>
2727
<files>
28-
<file src="DynamoServices.dll" target="lib\netstandard2.0" />
28+
<file src="..\..\..\src\NodeServices\obj\netstandard2.0\DynamoServices.dll" target="lib\netstandard2.0" />
2929
<file src="DynamoServices.xml" target="lib\netstandard2.0" />
30+
31+
<file src="..\..\..\src\NodeServices\obj\net8.0\DynamoServices.dll" target="lib\net8.0" />
32+
<file src="DynamoServices.xml" target="lib\net8.0" />
33+
34+
3035
<file src="..\..\..\doc\distrib\Images\logo_square_32x32.png" target="content\images\logo.png" />
3136
</files>
3237
</package>

0 commit comments

Comments
 (0)
Please sign in to comment.