test
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
using Unity.Plastic.Newtonsoft.Json;
|
||||
using PlasticGui.WebApi.Responses;
|
||||
|
||||
namespace Unity.PlasticSCM.Editor.WebApi
|
||||
{
|
||||
public class ChangesetFromCollabCommitResponse
|
||||
{
|
||||
/// <summary>
|
||||
/// Error caused by the request.
|
||||
/// </summary>
|
||||
[JsonProperty("error")]
|
||||
public ErrorResponse.ErrorFields Error { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The repository ID
|
||||
/// </summary>
|
||||
[JsonProperty("repId")]
|
||||
public uint RepId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The repository module ID
|
||||
/// </summary>
|
||||
[JsonProperty("repModuleId")]
|
||||
public uint RepModuleId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The changeset ID
|
||||
/// </summary>
|
||||
[JsonProperty("changesetId")]
|
||||
public long ChangesetId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The branch ID
|
||||
/// </summary>
|
||||
[JsonProperty("branchId")]
|
||||
public long BranchId { get; set; }
|
||||
}
|
||||
}
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 695128a7ff590df4dace9f813fa962bd
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,61 @@
|
||||
using Unity.Plastic.Newtonsoft.Json;
|
||||
|
||||
using PlasticGui.WebApi.Responses;
|
||||
|
||||
namespace Unity.PlasticSCM.Editor.WebApi
|
||||
{
|
||||
/// <summary>
|
||||
/// Response to credentials request.
|
||||
/// </summary>
|
||||
public class CredentialsResponse
|
||||
{
|
||||
/// <summary>
|
||||
/// Error caused by the request.
|
||||
/// </summary>
|
||||
[JsonProperty("error")]
|
||||
public ErrorResponse.ErrorFields Error { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Type of the token.
|
||||
/// </summary>
|
||||
public enum TokenType : int
|
||||
{
|
||||
/// <summary>
|
||||
/// Password token.
|
||||
/// </summary>
|
||||
Password = 0,
|
||||
|
||||
/// <summary>
|
||||
/// Bearer token.
|
||||
/// </summary>
|
||||
Bearer = 1,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get the type of the token.
|
||||
/// </summary>
|
||||
[JsonIgnore]
|
||||
public TokenType Type
|
||||
{
|
||||
get { return (TokenType)TokenTypeValue; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The user's email.
|
||||
/// </summary>
|
||||
[JsonProperty("email")]
|
||||
public string Email;
|
||||
|
||||
/// <summary>
|
||||
/// The credential's token.
|
||||
/// </summary>
|
||||
[JsonProperty("token")]
|
||||
public string Token;
|
||||
|
||||
/// <summary>
|
||||
/// The token type represented as an integer.
|
||||
/// </summary>
|
||||
[JsonProperty("tokenTypeValue")]
|
||||
public int TokenTypeValue;
|
||||
}
|
||||
}
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d1c46ccb760d06146a24b7e265e19566
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,26 @@
|
||||
using System.Reflection;
|
||||
|
||||
using Unity.Plastic.Newtonsoft.Json;
|
||||
|
||||
using PlasticGui.WebApi.Responses;
|
||||
|
||||
namespace Unity.PlasticSCM.Editor.WebApi
|
||||
{
|
||||
/// <summary>
|
||||
/// Response to current user admin check request.
|
||||
/// </summary>
|
||||
public class CurrentUserAdminCheckResponse
|
||||
{
|
||||
/// <summary>
|
||||
/// Error caused by the request.
|
||||
/// </summary>
|
||||
[JsonProperty("error")]
|
||||
public ErrorResponse.ErrorFields Error { get; set; }
|
||||
|
||||
[JsonProperty("isCurrentUserAdmin")]
|
||||
public bool IsCurrentUserAdmin { get; set; }
|
||||
|
||||
[JsonProperty("organizationName")]
|
||||
public string OrganizationName { get; set; }
|
||||
}
|
||||
}
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 363c1190d7979084c84a0421cedb3a51
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,23 @@
|
||||
using Unity.Plastic.Newtonsoft.Json;
|
||||
using PlasticGui.WebApi.Responses;
|
||||
|
||||
namespace Unity.PlasticSCM.Editor.WebApi
|
||||
{
|
||||
public class IsCollabProjectMigratedResponse
|
||||
{
|
||||
[JsonProperty("error")]
|
||||
public ErrorResponse.ErrorFields Error { get; set; }
|
||||
|
||||
[JsonProperty("IsMigrated")]
|
||||
public bool IsMigrated { get; set; }
|
||||
|
||||
[JsonProperty("WebServerUri")]
|
||||
public string WebServerUri { get; set; }
|
||||
|
||||
[JsonProperty("PlasticCloudOrganizationName")]
|
||||
public string PlasticCloudOrganizationName { get; set; }
|
||||
|
||||
[JsonProperty("Credentials")]
|
||||
public CredentialsResponse Credentials { get; set; }
|
||||
}
|
||||
}
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b07e99e8ef4ff5c4c8c14b165e09f822
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,11 @@
|
||||
using Unity.Plastic.Newtonsoft.Json;
|
||||
|
||||
public class OrganizationCredentials
|
||||
{
|
||||
[JsonProperty("user")]
|
||||
public string User { get; set; }
|
||||
|
||||
[JsonProperty("password")]
|
||||
public string Password { get; set; }
|
||||
}
|
||||
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a3542876e68f11e4aa6c063e4c8e76db
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,37 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
using Unity.Plastic.Newtonsoft.Json;
|
||||
|
||||
namespace Unity.PlasticSCM.Editor.WebApi
|
||||
{
|
||||
public class SubscriptionDetailsResponse
|
||||
{
|
||||
[JsonProperty("createdAt")]
|
||||
public DateTime CreatedAt { get; set; }
|
||||
|
||||
[JsonProperty("subscriptionType")]
|
||||
public string ProductType { get; set; }
|
||||
|
||||
[JsonProperty("subscriptionSource")]
|
||||
public string OrderSource { get; set; }
|
||||
|
||||
[JsonProperty("genesisOrgId")]
|
||||
public string GenesisOrgId { get; set; }
|
||||
|
||||
[JsonProperty("plasticOrganizationName")]
|
||||
public string OrganizationName { get; set; }
|
||||
|
||||
[JsonProperty("readonlyStatus")]
|
||||
public string ReadonlyStatus { get; set; }
|
||||
|
||||
[JsonProperty("isAdmin")]
|
||||
public bool IsAdmin { get; set; }
|
||||
|
||||
[JsonProperty("isOwner")]
|
||||
public bool IsOwner { get; set; }
|
||||
|
||||
[JsonProperty("extraData")]
|
||||
public Dictionary<string, object> ExtraData { get; set; }
|
||||
}
|
||||
}
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 63860c9f5f91cbb4ea813deafa1327a0
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,35 @@
|
||||
using Unity.Plastic.Newtonsoft.Json;
|
||||
using PlasticGui.WebApi.Responses;
|
||||
|
||||
namespace Unity.PlasticSCM.Editor.WebApi
|
||||
{
|
||||
/// <summary>
|
||||
/// Response to token exchange request.
|
||||
/// </summary>
|
||||
public class TokenExchangeResponse
|
||||
{
|
||||
/// <summary>
|
||||
/// Error caused by the request.
|
||||
/// </summary>
|
||||
[JsonProperty("error")]
|
||||
public ErrorResponse.ErrorFields Error { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The user's username.
|
||||
/// </summary>
|
||||
[JsonProperty("user")]
|
||||
public string User { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The access token.
|
||||
/// </summary>
|
||||
[JsonProperty("accessToken")]
|
||||
public string AccessToken { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The refresh token.
|
||||
/// </summary>
|
||||
[JsonProperty("refreshToken")]
|
||||
public string RefreshToken { get; set; }
|
||||
}
|
||||
}
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4932f8b3d8c26804bb16dc5cb5b766ce
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,311 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
|
||||
using Unity.Plastic.Newtonsoft.Json;
|
||||
|
||||
using Codice.Client.Common.WebApi;
|
||||
using Codice.CM.Common;
|
||||
using Codice.LogWrapper;
|
||||
using PlasticGui.WebApi.Responses;
|
||||
|
||||
namespace Unity.PlasticSCM.Editor.WebApi
|
||||
{
|
||||
internal static class WebRestApiClient
|
||||
{
|
||||
internal static class PlasticScm
|
||||
{
|
||||
internal static TokenExchangeResponse TokenExchange(string unityAccessToken)
|
||||
{
|
||||
Uri endpoint = mWebApiUris.GetFullUri(
|
||||
string.Format(TokenExchangeEndpoint, unityAccessToken));
|
||||
|
||||
try
|
||||
{
|
||||
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(endpoint);
|
||||
request.Method = "GET";
|
||||
request.ContentType = "application/json";
|
||||
return GetResponse<TokenExchangeResponse>(request);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
mLog.ErrorFormat(
|
||||
"Unable to exchange tokens '{0}': {1}",
|
||||
endpoint.ToString(), ex.Message);
|
||||
|
||||
mLog.DebugFormat(
|
||||
"StackTrace:{0}{1}",
|
||||
Environment.NewLine, ex.StackTrace);
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
internal static IsCollabProjectMigratedResponse IsCollabProjectMigrated(string bearerToken, string projectId)
|
||||
{
|
||||
Uri endpoint = mWebApiUris.GetFullUri(string.Format(
|
||||
IsCollabProjectMigratedEndpoint, projectId));
|
||||
|
||||
try
|
||||
{
|
||||
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(endpoint);
|
||||
request.Method = "GET";
|
||||
request.ContentType = "application/json";
|
||||
request.Headers.Add(
|
||||
HttpRequestHeader.Authorization,
|
||||
string.Format("Bearer {0}", bearerToken));
|
||||
|
||||
return GetResponse<IsCollabProjectMigratedResponse>(request);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
mLog.ErrorFormat(
|
||||
"Unable to retrieve is collab migrated '{0}': {1}",
|
||||
endpoint.ToString(), ex.Message);
|
||||
|
||||
mLog.DebugFormat(
|
||||
"StackTrace:{0}{1}",
|
||||
Environment.NewLine, ex.StackTrace);
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
internal static NewVersionResponse GetLastVersion(Edition plasticEdition)
|
||||
{
|
||||
Uri endpoint = mWebApiUris.GetFullUri(
|
||||
WebApiEndpoints.LastVersion.NewVersion,
|
||||
"9.0.0.0",
|
||||
WebApiEndpoints.LastVersion.GetEditionString(plasticEdition),
|
||||
WebApiEndpoints.LastVersion.GetPlatformString());
|
||||
|
||||
try
|
||||
{
|
||||
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(endpoint);
|
||||
request.Method = "GET";
|
||||
request.ContentType = "application/json";
|
||||
|
||||
return GetResponse<NewVersionResponse>(request);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
mLog.ErrorFormat(
|
||||
"Unable to retrieve new versions from '{0}': {1}",
|
||||
endpoint.ToString(), ex.Message);
|
||||
|
||||
mLog.DebugFormat(
|
||||
"StackTrace:{0}{1}",
|
||||
Environment.NewLine, ex.StackTrace);
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
internal static CurrentUserAdminCheckResponse IsUserAdmin(
|
||||
string organizationName,
|
||||
string authToken)
|
||||
{
|
||||
Uri endpoint = mWebApiUris.GetFullUri(
|
||||
IsUserAdminEnpoint,
|
||||
organizationName);
|
||||
|
||||
try
|
||||
{
|
||||
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(endpoint);
|
||||
request.Method = "GET";
|
||||
request.ContentType = "application/json";
|
||||
|
||||
string authenticationToken = "Basic " + authToken;
|
||||
|
||||
request.Headers.Add(
|
||||
HttpRequestHeader.Authorization, authenticationToken);
|
||||
|
||||
return GetResponse<CurrentUserAdminCheckResponse>(request);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
mLog.ErrorFormat(
|
||||
"Unable to retrieve is user admin '{0}': {1}",
|
||||
endpoint.ToString(), ex.Message);
|
||||
|
||||
mLog.DebugFormat(
|
||||
"StackTrace:{0}{1}",
|
||||
Environment.NewLine, ex.StackTrace);
|
||||
|
||||
return new CurrentUserAdminCheckResponse
|
||||
{
|
||||
Error = BuildLoggedErrorFields(ex, endpoint)
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
internal static SubscriptionDetailsResponse GetSubscriptionDetails(
|
||||
string organizationName,
|
||||
string authToken)
|
||||
{
|
||||
Uri endpoint = mWebApiUris.GetFullUri(
|
||||
SubscriptionDetailsEndpoint,
|
||||
organizationName);
|
||||
|
||||
try
|
||||
{
|
||||
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(endpoint);
|
||||
request.Method = "GET";
|
||||
request.ContentType = "application/json";
|
||||
|
||||
string authenticationToken = "Basic " + authToken;
|
||||
|
||||
request.Headers.Add(
|
||||
HttpRequestHeader.Authorization, authenticationToken);
|
||||
|
||||
return GetResponse<SubscriptionDetailsResponse>(request);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
mLog.ErrorFormat(
|
||||
"Unable to retrieve subscription details '{0}': {1}",
|
||||
endpoint.ToString(), ex.Message);
|
||||
|
||||
mLog.DebugFormat(
|
||||
"StackTrace:{0}{1}",
|
||||
Environment.NewLine, ex.StackTrace);
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
const string IsBetaEnabledEndpoint = "api/unity-package/beta/is-enabled";
|
||||
const string TokenExchangeEndpoint = "api/oauth/unityid/exchange/{0}";
|
||||
const string IsCollabProjectMigratedEndpoint = "api/cloud/unity/projects/{0}/is-migrated";
|
||||
const string IsUserAdminEnpoint = "api/cloud/organizations/{0}/is-user-admin";
|
||||
const string SubscriptionDetailsEndpoint = "api/cloud/organizations/{0}/subscription-details";
|
||||
|
||||
static readonly PlasticWebApiUris mWebApiUris = PlasticWebApiUris.BuildDefault();
|
||||
}
|
||||
|
||||
internal static class CloudServer
|
||||
{
|
||||
internal static string WebLogin(
|
||||
string webServerUri,
|
||||
string organizationName,
|
||||
OrganizationCredentials credentials)
|
||||
{
|
||||
Uri endpoint = new Uri(
|
||||
new Uri(webServerUri),
|
||||
string.Format(WebLoginEndPoint, organizationName));
|
||||
|
||||
try
|
||||
{
|
||||
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(endpoint);
|
||||
request.Method = "POST";
|
||||
request.ContentType = "application/json";
|
||||
request.Timeout = 5000;
|
||||
|
||||
WriteBody(request, credentials);
|
||||
|
||||
return GetResponse<string>(request);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
mLog.ErrorFormat(
|
||||
"Unable to retrieve the organization login '{0}': {1}",
|
||||
endpoint.ToString(), ex.Message);
|
||||
|
||||
mLog.DebugFormat(
|
||||
"StackTrace:{0}{1}",
|
||||
Environment.NewLine, ex.StackTrace);
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
internal static ChangesetFromCollabCommitResponse GetChangesetFromCollabCommit(
|
||||
string webServerUri,
|
||||
string organizationName,
|
||||
string webLoginAccessToken,
|
||||
string projectId,
|
||||
string commitSha)
|
||||
{
|
||||
Uri endpoint = new Uri(
|
||||
new Uri(webServerUri),
|
||||
string.Format(GetChangesetFromCollabCommitEndpoint,
|
||||
organizationName, projectId, commitSha));
|
||||
|
||||
try
|
||||
{
|
||||
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(endpoint);
|
||||
request.Method = "GET";
|
||||
request.ContentType = "application/json";
|
||||
request.Headers.Add(
|
||||
HttpRequestHeader.Authorization,
|
||||
string.Format("Bearer {0}", webLoginAccessToken));
|
||||
|
||||
return GetResponse<ChangesetFromCollabCommitResponse>(request);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
mLog.ErrorFormat(
|
||||
"Unable to retrieve the changeset from collab commit '{0}': {1}",
|
||||
endpoint.ToString(), ex.Message);
|
||||
|
||||
mLog.DebugFormat(
|
||||
"StackTrace:{0}{1}",
|
||||
Environment.NewLine, ex.StackTrace);
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
const string WebLoginEndPoint = "api/v1/organizations/{0}/login/accesstoken";
|
||||
const string GetChangesetFromCollabCommitEndpoint = "cloudapi/v1/organizations/{0}/repos/{1}/collabcommit/{2}/changeset";
|
||||
}
|
||||
|
||||
static void WriteBody(WebRequest request, object body)
|
||||
{
|
||||
using (Stream st = request.GetRequestStream())
|
||||
using (StreamWriter writer = new StreamWriter(st))
|
||||
{
|
||||
writer.Write(JsonConvert.SerializeObject(body));
|
||||
}
|
||||
}
|
||||
|
||||
static TRes GetResponse<TRes>(WebRequest request)
|
||||
{
|
||||
using (WebResponse response = request.GetResponse())
|
||||
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
|
||||
{
|
||||
string json = reader.ReadToEnd();
|
||||
|
||||
if (string.IsNullOrEmpty(json))
|
||||
return default(TRes);
|
||||
|
||||
return JsonConvert.DeserializeObject<TRes>(json);
|
||||
}
|
||||
}
|
||||
|
||||
static ErrorResponse.ErrorFields BuildLoggedErrorFields(
|
||||
Exception ex, Uri endpoint)
|
||||
{
|
||||
LogException(ex, endpoint);
|
||||
|
||||
return new ErrorResponse.ErrorFields
|
||||
{
|
||||
ErrorCode = ErrorCodes.ClientError,
|
||||
Message = ex.Message
|
||||
};
|
||||
}
|
||||
|
||||
static void LogException(Exception ex, Uri endpoint)
|
||||
{
|
||||
mLog.ErrorFormat(
|
||||
"There was an error while calling '{0}': {1}",
|
||||
endpoint.ToString(), ex.Message);
|
||||
|
||||
mLog.DebugFormat(
|
||||
"StackTrace:{0}{1}",
|
||||
Environment.NewLine, ex.StackTrace);
|
||||
}
|
||||
|
||||
static readonly ILog mLog = PlasticApp.GetLogger("WebRestApiClient");
|
||||
}
|
||||
}
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e57a1c5d3e1c8844eb3893fed51c9727
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Reference in New Issue
Block a user