public IHttpActionResult GetRealmAssetManifest(string realmName) { var realm = realmsService.GetRealmByName(realmName); if (realm == null) { return(NotFound()); } if (!Request.CheckAccess(GunchoResources.RealmActions.View, GunchoResources.Realm, realmName)) { return(Forbidden()); } return(Ok(new AssetManifestDto { Version = 1, HistoryUri = Url.Link("GetRealmAssetManifestHistory", new { realmName = realmName }), Assets = new[] { new AssetRefDto { Path = "/story.ni", Version = 1, Uri = Url.Link("GetRealmAssetByPath", new { realmName = realmName, path = "story.ni" }), ContentType = ContentTypes.Inform7Source, HistoryUri = Url.Link("GetRealmAssetHistoryByPath", new { realmName = realmName, path = "story.ni" }), }, }, })); }
public IHttpActionResult GetRealmByName(string realmName) { var realm = realmsService.GetRealmByName(realmName); if (realm == null) { return(NotFound()); } if (!Request.CheckAccess(GunchoResources.RealmActions.View, GunchoResources.Realm, realmName)) { return(Forbidden()); } return(Ok(MakeDto(realm, details: true))); }
private Task <bool> CheckRealmAccessAsync(ResourceAuthorizationContext context) { var action = context.Action.First().Value; var realmName = context.Resource.Skip(1).Take(1).Single().Value; if (action == GunchoResources.RealmActions.Create) { return(CheckRealmCreateAccessAsync(context, realmName)); } var realm = realmsService.GetRealmByName(realmName); if (realm == null) { return(Nok()); } var nextResource = context.Resource.Skip(2).FirstOrDefault(); if (nextResource != null && nextResource.Value == GunchoResources.Asset) { var asset = context.Resource.Skip(3).First().Value; return(CheckRealmAssetAccessAsync(context, realm, asset)); } switch (action) { case GunchoResources.RealmActions.EnableDisable: return(CheckRealmEnableDisableAccessAsync(context, realm)); case GunchoResources.RealmActions.Edit: return(CheckRealmEditAssetsAccessAsync(context, realm)); case GunchoResources.RealmActions.Join: return(CheckRealmJoinAccessAsync(context, realm)); case GunchoResources.RealmActions.Teleport: return(CheckRealmTeleportAccessAsync(context, realm)); case GunchoResources.RealmActions.List: case GunchoResources.RealmActions.View: case GunchoResources.RealmActions.ViewHistory: return(CheckRealmVisibilityAccessAsync(context, realm)); } return(Nok()); }