Skip to content

Commit a59c3d4

Browse files
committed
fix checkowner
1 parent 597bd77 commit a59c3d4

File tree

2 files changed

+39
-25
lines changed

2 files changed

+39
-25
lines changed

src/cls/ZPM/Owner.cls

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@ ClassMethod IsAuth() As %Status
66
{
77
If ($Username="UnknownUser") {
88
Return $$$ERROR($$$GeneralError, "Authentification required")
9-
}
9+
}
1010
Return $$$OK
1111
}
1212

13-
ClassMethod IsOwner(packageName As %String) As %Status
13+
ClassMethod IsOwner(packageName As %String, action As %String = "") As %Status
1414
{
1515
Set owner = ""
1616
&sql(SELECT TOP 1 owner INTO :owner FROM ZPM.Package WHERE name = :packageName ORDER BY publishTS)

src/cls/ZPM/Registry.cls

Lines changed: 37 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -10,22 +10,22 @@ XData UrlMap [ XMLNamespace = "http://www.intersystems.com/urlmap" ]
1010
<!-- Server Info -->
1111
<Route Url="/" Method="GET" Call="GetInfo" Cors="true"/>
1212
<Route Url="/_ping" Method="GET" Call="Ping" Cors="true"/>
13-
13+
1414
<!-- Reset registry for debug purposes, limited access -->
1515
<Route Url="/_reset" Method="GET" Call="Reset" Cors="true"/>
16-
16+
1717
<!-- Swagger specs -->
1818
<Route Url="/_spec" Method="GET" Call="SwaggerSpec" Cors="true"/>
19-
19+
2020
<!-- All packages -->
2121
<Route Url="/packages/-/all" Method="GET" Call="AllPackages" Cors="true" />
22-
22+
2323
<!-- Package manifest -->
2424
<Route Url="/packages/:package/:version/:platformVersion/manifest" Method="GET" Call="PackageManifest" Cors="true" />
2525
<Route Url="/packages/:package/:version/manifest" Method="GET" Call="PackageManifest" Cors="true" />
2626
<!-- Package installer -->
2727
<Route Url="/packages/:package/:version/installer" Method="GET" Call="PackageInstaller" Cors="true" />
28-
28+
2929
<!-- Package information -->
3030
<Route Url="/packages/:package/?" Method="GET" Call="Package" Cors="true" />
3131
<!-- Package information with specified version -->
@@ -36,7 +36,7 @@ XData UrlMap [ XMLNamespace = "http://www.intersystems.com/urlmap" ]
3636
<Route Url="/packages" Method="POST" Call="PublishPackage" Cors="true" />
3737
<!-- Unpublish Package -->
3838
<Route Url="/packages/:package/:version" Method="Delete" Call="UnPublishPackageVersion" Cors="true" />
39-
39+
4040
<!-- Package Archive -->
4141
<Route Url="/download/:package/:platformVersion/:file" Method="GET" Call="GetArchive" Cors="true" />
4242
<!-- <Route Url="/download/:package/-/:file" Method="GET" Call="GetArchive" Cors="true" /> -->
@@ -45,7 +45,7 @@ XData UrlMap [ XMLNamespace = "http://www.intersystems.com/urlmap" ]
4545
<!-- Temp url, update package, should be combined with "POST /packages"-->
4646
<Route Url="/package" Method="POST" Call="UpdatePackage" Cors="true" />
4747

48-
48+
4949
<!-- Analytics -->
5050
<Route Url="/collect/:action" Method="POST" Call="CollectAnalytics" Cors="true" />
5151

@@ -137,7 +137,7 @@ ClassMethod Package(pkg As %String = "", version As %String = "", platformVersio
137137

138138
ClassMethod PackageManifest(pkg As %String = "", version As %String = "", platformVersion As %String = "") As %Status
139139
{
140-
Set pkg = $$$lcase(pkg)
140+
Set pkg = $$$lcase(pkg)
141141
Set version = ##class(ZPM.Package).VersionFind(pkg, version)
142142
If (version = "") {
143143
Return ..ReportHttpStatusCode(..#HTTP404NOTFOUND)
@@ -159,7 +159,7 @@ ClassMethod PackageManifest(pkg As %String = "", version As %String = "", platfo
159159

160160
ClassMethod PackageInstaller(pkg As %String = "", version As %String = "") As %Status
161161
{
162-
Set pkg = $$$lcase(pkg)
162+
Set pkg = $$$lcase(pkg)
163163
Set version = ##class(ZPM.Package).VersionFind(pkg, version)
164164
If (version = "") {
165165
Return ..ReportHttpStatusCode(..#HTTP404NOTFOUND)
@@ -185,15 +185,28 @@ ClassMethod OptionsPackageVersion(pkg As %String = "", version As %String = "")
185185
Set settingsFile = ##class(ZPM.Settings).%New()
186186
Set tSCAuth = ##class(ZPM.Owner).IsAuth()
187187
Set pkg = $$$lcase(pkg)
188-
Set tSCOwner = ##class(ZPM.Owner).IsOwner(pkg)
188+
189+
If ('##class(ZPM.Package).NameExists(pkg)) {
190+
Do %response.SetHeader("ALLOW",options)
191+
Return $$$OK
192+
}
193+
194+
If ( ($$$lcase(version)'="all") && '##class(ZPM.Package).NameVersionExists(pkg, version) ) {
195+
// version doesn't exit
196+
Do %response.SetHeader("ALLOW",options)
197+
Return $$$OK
198+
}
199+
200+
Set tSCOwner = ##class(ZPM.Owner).IsOwner(pkg, "delete")
201+
189202
If $$$ISOK(tSCAuth),$$$ISOK(tSCOwner),settingsFile.GetDeleteEnable() {
190203
Set options = options_",DELETE"
191204
}
192205
Do %response.SetHeader("ALLOW",options)
193206
Return $$$OK
194207
}
195208

196-
/// Unpublish (delete) directly published package version
209+
/// Unpublish (delete) directly published package version
197210
ClassMethod UnPublishPackageVersion(pkg As %String = "", version As %String = "") As %Status
198211
{
199212
Set tSC = $$$OK
@@ -206,7 +219,7 @@ ClassMethod UnPublishPackageVersion(pkg As %String = "", version As %String = ""
206219
Return ..ReportHttpStatusCode(..#HTTP403FORBIDDEN, $$$ERROR(5001,"Delete not allowed for this registry"))
207220
}
208221
Set pkg = $$$lcase(pkg)
209-
Set tSC = ##class(ZPM.Owner).IsOwner(pkg)
222+
Set tSC = ##class(ZPM.Owner).IsOwner(pkg, "delete")
210223
If ($$$ISERR(tSC)) {
211224
Return ..ReportHttpStatusCode(..#HTTP403FORBIDDEN, tSC)
212225
}
@@ -252,22 +265,23 @@ ClassMethod PublishPackage() As %Status
252265
If (%request.ContentType '= ..#CONTENTTYPEJSON) {
253266
Return ..ReportHttpStatusCode(..#HTTP400BADREQUEST)
254267
}
255-
268+
256269
If ##class(ZPM.Package).NameVersionExists(name, version, .id) {
257-
Set package = ##class(ZPM.Package).%OpenId(id)
270+
Set package = ##class(ZPM.Package).%OpenId(id)
271+
Set package.UpLink = ""
258272
}
259273
Else {
260-
Set package = ##class(ZPM.Package).%New()
274+
Set package = ##class(ZPM.Package).%New()
261275
}
262276

263277
$$$ThrowOnError(package.%JSONImport(%request.Content))
264278
$$$ThrowOnError(package.UpdateDescriptionFromManifest())
265279
If deployed {
266280
If ##class(ZPM.DeployedPackage).NameVersionPlatformExists(name, version, platformVersion, .id) {
267-
Set deployedPackage = ##class(ZPM.DeployedPackage).%OpenId(id, , .tSC)
281+
Set deployedPackage = ##class(ZPM.DeployedPackage).%OpenId(id, , .tSC)
268282
}
269283
Else {
270-
Set deployedPackage = ##class(ZPM.DeployedPackage).%New()
284+
Set deployedPackage = ##class(ZPM.DeployedPackage).%New()
271285
}
272286
$$$ThrowOnError(deployedPackage.%JSONImport(%request.Content))
273287
$$$ThrowOnError(deployedPackage.manifest.CopyFrom(package.manifest))
@@ -289,7 +303,7 @@ ClassMethod PublishPackage() As %Status
289303

290304
ClassMethod UpdatePackage() As %Status
291305
{
292-
If (%request.ContentType '= ..#CONTENTTYPEJSON) {
306+
If (%request.ContentType '= ..#CONTENTTYPEJSON) {
293307
Return ..ReportHttpStatusCode(..#HTTP400BADREQUEST)
294308
}
295309
Return ##class(ZPM.Package).UpdatePackage(%request.Content)
@@ -341,11 +355,11 @@ ClassMethod AllPackages() As %Status
341355
Set searchTerms = [].%FromJSON(%request.Get("q"))
342356
} Catch ex {}
343357
$$$ThrowOnError(##class(ZPM.UpLink).UpdatePackagesFromAllUpLinks())
344-
358+
345359
Set manifest = %request.Get("manifest","")
346360
Set allVersions = %request.Get("allVersions","")
347361
Set owner = ##class(ZPM.Owner).GetId()
348-
Set tList = ##class(ZPM.Package).GetLatest(searchTerms, manifest, allVersions, owner, .tSC)
362+
Set tList = ##class(ZPM.Package).GetLatest(searchTerms, manifest, allVersions, owner, .tSC)
349363

350364
If ($$$ISERR(tSC)) {
351365
Return ..ReportHttpStatusCode(..#HTTP400BADREQUEST, tSC)
@@ -355,17 +369,17 @@ ClassMethod AllPackages() As %Status
355369

356370
ClassMethod CollectAnalytics(action As %String = "") As %Status
357371
{
358-
If (%request.ContentType '= ..#CONTENTTYPEJSON) {
372+
If (%request.ContentType '= ..#CONTENTTYPEJSON) {
359373
Return ..ReportHttpStatusCode(..#HTTP400BADREQUEST)
360374
}
361-
If (action = "") {
375+
If (action = "") {
362376
Return ..ReportHttpStatusCode(..#HTTP404NOTFOUND)
363377
}
364378
Set token = %request.GetCgiEnv("HTTP_INSTALLTOKEN")
365379
If token'="", $Data(^IRIS.TempZPMRInst(token)) {
366380
Kill ^IRIS.TempZPMRInst(token)
367381
Return ##class(ZPM.Analytics.Event).SaveEvent(action, ..GetRemoteAddr(), %request.Content)
368-
}
382+
}
369383
Return $$$ERROR(5001, "Invalid token")
370384
}
371385

0 commit comments

Comments
 (0)