Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 12 additions & 16 deletions src/cls/GitHub/API.cls
Original file line number Diff line number Diff line change
Expand Up @@ -13,24 +13,21 @@ Parameter Accept = "application/vnd.github.v3+json";

Parameter Directory = "C:/temp/mirror/";

Parameter Username;

Parameter Password;
Parameter Token;

Property Request As %Net.HttpRequest [ Internal ];

Method %OnNew(Username As %String = {..#Username}, Password As %String = {..#Password}) As %Status [ Private, ServerOnly = 1 ]
Method %OnNew(Token As %String = {..#Token}) As %Status [ Private, ServerOnly = 1 ]
{
Quit ..CreateRequest(Username,Password)
Quit ..CreateRequest(Token)
}

/// This methd is called automatically on object creation.<br>
/// <var>Username</var> - GitHub user, who has access to repository. Optional for public repositories.<br>
/// <var>Password</var> - GitHub password, corresponding to Username. Optional for public repositories.<br>
/// Note, that with Username, you can make up to 5,000 requests per hour.
/// <var>Token</var> - GitHub user Auth token
/// Note, that with Token, you can make up to 5,000 requests per hour.
/// For unauthenticated requests, the rate limit allows to make up to 60 requests per hour.
/// Unauthenticated requests are associated with an IP address.<br>
Method CreateRequest(Username As %String, Password As %String) As %Status
Method CreateRequest(Token As %String) As %Status
{
New $Namespace
Set SSLConfig = ..#SSLConfig
Expand All @@ -44,9 +41,8 @@ Method CreateRequest(Username As %String, Password As %String) As %Status
Set ..Request.Server= ..#Server
Do ..Request.SetHeader("Accept",..#Accept) // we want 3rd version of api

If ($d(Username) && $d(Password) && (Username'="") && (Password'="")) { // supply Username and Passwor, if both are provided. GitHub accept Basic Auth
Set ..Request.Username = Username // https://developer.github.com/v3/auth/
Set ..Request.Password = Password
If ($d(Token) && (Token'="")) { // SSO SAML token Auth
Do ..Request.SetHeader("Authorization", "token "_Token)
}

Return $$$OK
Expand Down Expand Up @@ -508,9 +504,9 @@ Method UploadAsset(Owner As %String, Repo As %String, ReleaseId As %Integer, Ass

// do ##class(GitHub.API).UpdateMirrors()

ClassMethod UpdateMirrors(Username As %String = {..#Username}, Password As %String = {..#Password}, Directory As %String = {..#Directory}) As %Status
ClassMethod UpdateMirrors(Token As %String = {..#Token}, Directory As %String = {..#Directory}) As %Status
{
Set apiUM = ##class(GitHub.API).%New(Username, Password)
Set apiUM = ##class(GitHub.API).%New(Token)

Set stream = ##class(%Stream.FileCharacter).%New()
Set st = stream.LinkToFile(Directory_"repos.json")
Expand Down Expand Up @@ -558,9 +554,9 @@ ClassMethod UpdateMirrorReposInDirectory(Directory As %String = {..#Directory})

/// ArchiveFormat - Can be either tarball or zipball. Default: tarball
/// Ref - A valid Git reference. Default: the repository’s default branch (usually master)
ClassMethod GetArchive(Owner As %String, Repo As %String, ArchiveFormat As %String = "tarball", Ref As %String = "master", Filename As %String, Username As %String = {..#Username}, Password As %String = {..#Password}) As %Status
ClassMethod GetArchive(Owner As %String, Repo As %String, ArchiveFormat As %String = "tarball", Ref As %String = "master", Filename As %String, Token As %String = {..#Token}) As %Status
{
Set apiUM = ..%New(Username, Password)
Set apiUM = ..%New(Token)

Set apiUM.Request.Location = "/repos/"_Owner_"/"_Repo_"/"_ArchiveFormat_"/"_Ref

Expand Down
5 changes: 2 additions & 3 deletions src/cls/GitHub/Utils.cls
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,11 @@ Class GitHub.Utils
/// Do ##class(GitHub.Utils).Test(10)
ClassMethod Test(Count As %Integer(MINVAL=1) = 10)
{
Set username = $Get(^GHAPI("user"))
Set password = $Get(^GHAPI("pass"))
Set token = $Get(^GHAPI("token"))
Set owner = "intersystems-ru"
Set repository = "highlight.js"

Set obj = ##class(GitHub.API).%New(username,password)
Set obj = ##class(GitHub.API).%New(token)
Set start = $Now()
For i=1:1:Count {
Do obj.GetLastCommit(owner, repository,,.commit)
Expand Down
14 changes: 6 additions & 8 deletions src/cls/GitHub/Workflows.cls
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,10 @@ Class GitHub.Workflows

/// Protect default branches in organization.<br>
/// <var>Org</var> - name of Organization<br>
/// <var>Username</var> - GitHub user, whois organisation owner<br>
/// <var>Password</var> - GitHub password, corresponding to Username.<br>
ClassMethod ProtectDefaultBranches(Org As %String, Username As %String, Password As %String)
/// <var>Token</var> - GitHub user token, whois organisation owner<br>
ClassMethod ProtectDefaultBranches(Org As %String, Token As %String)
{
Set api = ##class(GitHub.API).%New(Username,Password)
Set api = ##class(GitHub.API).%New(Token)
#dim repos As List of %ZEN.proxyObject
Set st = api.GetOrgRepos(Org, "public", .repos)
Write $System.Status.GetErrorText(st)
Expand All @@ -22,11 +21,10 @@ ClassMethod ProtectDefaultBranches(Org As %String, Username As %String, Password
/// Add team to all organization repositories<br>
/// <var>Org</var> - name of Organization<br>
/// <var>TeamId</var> - Id of a team<br>
/// <var>Username</var> - GitHub user, whois organisation owner<br>
/// <var>Password</var> - GitHub password, corresponding to Username.<br>
ClassMethod AddTeamToAllOrgRepos(Org As %String, TeamId As %String, Username As %String, Password As %String)
/// <var>Token</var> - GitHub user token, whois organisation owner<br>
ClassMethod AddTeamToAllOrgRepos(Org As %String, TeamId As %String, Token As %String)
{
Set api = ##class(GitHub.API).%New(Username,Password)
Set api = ##class(GitHub.API).%New(Token)
#dim orgrepos,teamrepos As %ListOfDataTypes

Set st = api.GetOrgReposNames(Org, "public", .orgrepos)
Expand Down