From dede6236c3acc582160e7a0b9e467811f20a6cc6 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Mon, 8 Jan 2024 19:20:27 +0000 Subject: [PATCH] Deploy code docs to GitHub Pages for workflow run 2088 Commit: 172599a6b4e159c02a57adf25ef64e7c5c8f0f79 --- _dream_daemon_controller_8cs_source.html | 394 +++++++++--------- _dream_maker_controller_8cs_source.html | 190 +++++---- ...rver_8_api_8_assembly_info_8cs_source.html | 2 +- ...r_8_common_8_assembly_info_8cs_source.html | 2 +- ...ver_8_host_8_assembly_info_8cs_source.html | 2 +- ...t_8_common_8_assembly_info_8cs_source.html | 2 +- changelog.yml | 12 +- ...rver_1_1_api_1_1_models_1_1_entity_id.html | 2 +- ..._internal_1_1_instance_permission_set.html | 2 +- ...st_1_1_controllers_1_1_api_controller.html | 2 +- ...ntrollers_1_1_dream_daemon_controller.html | 152 +++---- ...ontrollers_1_1_dream_maker_controller.html | 158 +++---- ...ost_1_1_database_1_1_database_context.html | 4 +- ...1_host_1_1_utils_1_1_i_port_allocator.html | 2 +- 14 files changed, 481 insertions(+), 445 deletions(-) diff --git a/_dream_daemon_controller_8cs_source.html b/_dream_daemon_controller_8cs_source.html index 20893ae465c..04d5fe4575f 100644 --- a/_dream_daemon_controller_8cs_source.html +++ b/_dream_daemon_controller_8cs_source.html @@ -207,204 +207,209 @@
174
175 if (model.Port.HasValue && model.Port.Value != current.Port!.Value)
176 {
-
177 var verifiedPort = await portAllocator
-
178 .GetAvailablePort(
-
179 model.Port.Value,
-
180 true,
-
181 cancellationToken);
-
182
-
183 if (verifiedPort != model.Port)
-
184 return Conflict(new ErrorMessageResponse(ErrorCode.PortNotAvailable));
-
185 }
-
186
-
187 var userRights = (DreamDaemonRights)AuthenticationContext.GetRight(RightsType.DreamDaemon);
-
188
-
189 bool CheckModified<T>(Expression<Func<Api.Models.Internal.DreamDaemonSettings, T>> expression, DreamDaemonRights requiredRight)
-
190 {
-
191 var memberSelectorExpression = (MemberExpression)expression.Body;
-
192 var property = (PropertyInfo)memberSelectorExpression.Member;
+
177 Logger.LogTrace(
+
178 "Triggering port allocator for DD-I:{instanceId} because model port {modelPort} doesn't match DB port {dbPort}...",
+
179 Instance.Id,
+
180 model.Port,
+
181 current.Port);
+
182 var verifiedPort = await portAllocator
+
183 .GetAvailablePort(
+
184 model.Port.Value,
+
185 true,
+
186 cancellationToken);
+
187
+
188 if (verifiedPort != model.Port)
+
189 return Conflict(new ErrorMessageResponse(ErrorCode.PortNotAvailable));
+
190 }
+
191
+
192 var userRights = (DreamDaemonRights)AuthenticationContext.GetRight(RightsType.DreamDaemon);
193
-
194 var newVal = property.GetValue(model);
-
195 if (newVal == null)
-
196 return false;
-
197 if (!userRights.HasFlag(requiredRight) && property.GetValue(current) != newVal)
-
198 return true;
-
199
-
200 property.SetValue(current, newVal);
-
201 return false;
-
202 }
-
203
-
204 var ddRights = InstancePermissionSet.DreamDaemonRights!.Value;
-
205 if (CheckModified(x => x.AllowWebClient, DreamDaemonRights.SetWebClient)
-
206 || CheckModified(x => x.AutoStart, DreamDaemonRights.SetAutoStart)
-
207 || CheckModified(x => x.Port, DreamDaemonRights.SetPort)
-
208 || CheckModified(x => x.SecurityLevel, DreamDaemonRights.SetSecurity)
-
209 || CheckModified(x => x.Visibility, DreamDaemonRights.SetVisibility)
-
210 || (model.SoftRestart.HasValue && !ddRights.HasFlag(DreamDaemonRights.SoftRestart))
-
211 || (model.SoftShutdown.HasValue && !ddRights.HasFlag(DreamDaemonRights.SoftShutdown))
-
212 || (!String.IsNullOrWhiteSpace(model.BroadcastMessage) && !ddRights.HasFlag(DreamDaemonRights.BroadcastMessage))
-
213 || CheckModified(x => x.StartupTimeout, DreamDaemonRights.SetStartupTimeout)
-
214 || CheckModified(x => x.HealthCheckSeconds, DreamDaemonRights.SetHealthCheckInterval)
-
215 || CheckModified(x => x.DumpOnHealthCheckRestart, DreamDaemonRights.CreateDump)
-
216 || CheckModified(x => x.TopicRequestTimeout, DreamDaemonRights.SetTopicTimeout)
-
217 || CheckModified(x => x.AdditionalParameters, DreamDaemonRights.SetAdditionalParameters)
-
218 || CheckModified(x => x.StartProfiler, DreamDaemonRights.SetProfiler)
-
219 || CheckModified(x => x.LogOutput, DreamDaemonRights.SetLogOutput)
-
220 || CheckModified(x => x.MapThreads, DreamDaemonRights.SetMapThreads))
-
221 return Forbid();
-
222
-
223 return await WithComponentInstance(
-
224 async instance =>
-
225 {
-
226 var watchdog = instance.Watchdog;
-
227 if (!String.IsNullOrWhiteSpace(model.BroadcastMessage)
-
228 && !await watchdog.Broadcast(model.BroadcastMessage, cancellationToken))
-
229 return Conflict(new ErrorMessageResponse(ErrorCode.BroadcastFailure));
-
230
-
231 await DatabaseContext.Save(cancellationToken);
-
232
-
233 // run this second because current may be modified by it
-
234 // slight race condition with request cancellation, but I CANNOT be assed right now
-
235 var rebootRequired = await watchdog.ChangeSettings(current, cancellationToken);
-
236
-
237 var rebootState = watchdog.RebootState;
-
238 var oldSoftRestart = rebootState == RebootState.Restart;
-
239 var oldSoftShutdown = rebootState == RebootState.Shutdown;
-
240 if (!oldSoftRestart && model.SoftRestart == true && watchdog.Status == WatchdogStatus.Online)
-
241 await watchdog.Restart(true, cancellationToken);
-
242 else if (!oldSoftShutdown && model.SoftShutdown == true)
-
243 await watchdog.Terminate(true, cancellationToken);
-
244 else if ((oldSoftRestart && model.SoftRestart == false) || (oldSoftShutdown && model.SoftShutdown == false))
-
245 await watchdog.ResetRebootState(cancellationToken);
-
246
-
247 return await ReadImpl(current, rebootRequired, cancellationToken);
-
248 });
-
249 }
-
250#pragma warning restore CA1506
-
251#pragma warning restore CA1502
-
252
-
259 [HttpPatch]
-
260 [TgsAuthorize(DreamDaemonRights.Restart)]
-
261 [ProducesResponseType(typeof(JobResponse), 202)]
-
262 public ValueTask<IActionResult> Restart(CancellationToken cancellationToken)
-
263 => WithComponentInstance(async instance =>
-
264 {
-
265 var job = Job.Create(JobCode.WatchdogRestart, AuthenticationContext.User, Instance, DreamDaemonRights.Shutdown);
-
266
-
267 var watchdog = instance.Watchdog;
-
268
-
269 if (watchdog.Status == WatchdogStatus.Offline)
-
270 return Conflict(new ErrorMessageResponse(ErrorCode.WatchdogNotRunning));
+
194 bool CheckModified<T>(Expression<Func<Api.Models.Internal.DreamDaemonSettings, T>> expression, DreamDaemonRights requiredRight)
+
195 {
+
196 var memberSelectorExpression = (MemberExpression)expression.Body;
+
197 var property = (PropertyInfo)memberSelectorExpression.Member;
+
198
+
199 var newVal = property.GetValue(model);
+
200 if (newVal == null)
+
201 return false;
+
202 if (!userRights.HasFlag(requiredRight) && property.GetValue(current) != newVal)
+
203 return true;
+
204
+
205 property.SetValue(current, newVal);
+
206 return false;
+
207 }
+
208
+
209 var ddRights = InstancePermissionSet.DreamDaemonRights!.Value;
+
210 if (CheckModified(x => x.AllowWebClient, DreamDaemonRights.SetWebClient)
+
211 || CheckModified(x => x.AutoStart, DreamDaemonRights.SetAutoStart)
+
212 || CheckModified(x => x.Port, DreamDaemonRights.SetPort)
+
213 || CheckModified(x => x.SecurityLevel, DreamDaemonRights.SetSecurity)
+
214 || CheckModified(x => x.Visibility, DreamDaemonRights.SetVisibility)
+
215 || (model.SoftRestart.HasValue && !ddRights.HasFlag(DreamDaemonRights.SoftRestart))
+
216 || (model.SoftShutdown.HasValue && !ddRights.HasFlag(DreamDaemonRights.SoftShutdown))
+
217 || (!String.IsNullOrWhiteSpace(model.BroadcastMessage) && !ddRights.HasFlag(DreamDaemonRights.BroadcastMessage))
+
218 || CheckModified(x => x.StartupTimeout, DreamDaemonRights.SetStartupTimeout)
+
219 || CheckModified(x => x.HealthCheckSeconds, DreamDaemonRights.SetHealthCheckInterval)
+
220 || CheckModified(x => x.DumpOnHealthCheckRestart, DreamDaemonRights.CreateDump)
+
221 || CheckModified(x => x.TopicRequestTimeout, DreamDaemonRights.SetTopicTimeout)
+
222 || CheckModified(x => x.AdditionalParameters, DreamDaemonRights.SetAdditionalParameters)
+
223 || CheckModified(x => x.StartProfiler, DreamDaemonRights.SetProfiler)
+
224 || CheckModified(x => x.LogOutput, DreamDaemonRights.SetLogOutput)
+
225 || CheckModified(x => x.MapThreads, DreamDaemonRights.SetMapThreads))
+
226 return Forbid();
+
227
+
228 return await WithComponentInstance(
+
229 async instance =>
+
230 {
+
231 var watchdog = instance.Watchdog;
+
232 if (!String.IsNullOrWhiteSpace(model.BroadcastMessage)
+
233 && !await watchdog.Broadcast(model.BroadcastMessage, cancellationToken))
+
234 return Conflict(new ErrorMessageResponse(ErrorCode.BroadcastFailure));
+
235
+
236 await DatabaseContext.Save(cancellationToken);
+
237
+
238 // run this second because current may be modified by it
+
239 // slight race condition with request cancellation, but I CANNOT be assed right now
+
240 var rebootRequired = await watchdog.ChangeSettings(current, cancellationToken);
+
241
+
242 var rebootState = watchdog.RebootState;
+
243 var oldSoftRestart = rebootState == RebootState.Restart;
+
244 var oldSoftShutdown = rebootState == RebootState.Shutdown;
+
245 if (!oldSoftRestart && model.SoftRestart == true && watchdog.Status == WatchdogStatus.Online)
+
246 await watchdog.Restart(true, cancellationToken);
+
247 else if (!oldSoftShutdown && model.SoftShutdown == true)
+
248 await watchdog.Terminate(true, cancellationToken);
+
249 else if ((oldSoftRestart && model.SoftRestart == false) || (oldSoftShutdown && model.SoftShutdown == false))
+
250 await watchdog.ResetRebootState(cancellationToken);
+
251
+
252 return await ReadImpl(current, rebootRequired, cancellationToken);
+
253 });
+
254 }
+
255#pragma warning restore CA1506
+
256#pragma warning restore CA1502
+
257
+
264 [HttpPatch]
+
265 [TgsAuthorize(DreamDaemonRights.Restart)]
+
266 [ProducesResponseType(typeof(JobResponse), 202)]
+
267 public ValueTask<IActionResult> Restart(CancellationToken cancellationToken)
+
268 => WithComponentInstance(async instance =>
+
269 {
+
270 var job = Job.Create(JobCode.WatchdogRestart, AuthenticationContext.User, Instance, DreamDaemonRights.Shutdown);
271
-
272 await jobManager.RegisterOperation(
-
273 job,
-
274 (core, paramJob, databaseContextFactory, progressReporter, ct) => core!.Watchdog.Restart(false, ct),
-
275 cancellationToken);
-
276 return Accepted(job.ToApi());
-
277 });
-
278
-
285 [HttpPatch(Routes.Diagnostics)]
-
286 [TgsAuthorize(DreamDaemonRights.CreateDump)]
-
287 [ProducesResponseType(typeof(JobResponse), 202)]
-
288 public ValueTask<IActionResult> CreateDump(CancellationToken cancellationToken)
-
289 => WithComponentInstance(async instance =>
-
290 {
-
291 var job = Job.Create(JobCode.WatchdogDump, AuthenticationContext.User, Instance, DreamDaemonRights.CreateDump);
-
292
-
293 var watchdog = instance.Watchdog;
-
294
-
295 if (watchdog.Status == WatchdogStatus.Offline)
-
296 return Conflict(new ErrorMessageResponse(ErrorCode.WatchdogNotRunning));
+
272 var watchdog = instance.Watchdog;
+
273
+
274 if (watchdog.Status == WatchdogStatus.Offline)
+
275 return Conflict(new ErrorMessageResponse(ErrorCode.WatchdogNotRunning));
+
276
+
277 await jobManager.RegisterOperation(
+
278 job,
+
279 (core, paramJob, databaseContextFactory, progressReporter, ct) => core!.Watchdog.Restart(false, ct),
+
280 cancellationToken);
+
281 return Accepted(job.ToApi());
+
282 });
+
283
+
290 [HttpPatch(Routes.Diagnostics)]
+
291 [TgsAuthorize(DreamDaemonRights.CreateDump)]
+
292 [ProducesResponseType(typeof(JobResponse), 202)]
+
293 public ValueTask<IActionResult> CreateDump(CancellationToken cancellationToken)
+
294 => WithComponentInstance(async instance =>
+
295 {
+
296 var job = Job.Create(JobCode.WatchdogDump, AuthenticationContext.User, Instance, DreamDaemonRights.CreateDump);
297
-
298 await jobManager.RegisterOperation(
-
299 job,
-
300 (core, databaseContextFactory, paramJob, progressReporter, ct) => core!.Watchdog.CreateDump(ct),
-
301 cancellationToken);
-
302 return Accepted(job.ToApi());
-
303 });
-
304
-
312 ValueTask<IActionResult> ReadImpl(DreamDaemonSettings? settings, bool knownForcedReboot, CancellationToken cancellationToken)
-
313 => WithComponentInstance(async instance =>
-
314 {
-
315 var dd = instance.Watchdog;
-
316
-
317 var metadata = (AuthenticationContext.GetRight(RightsType.DreamDaemon) & (ulong)DreamDaemonRights.ReadMetadata) != 0;
-
318 var revision = (AuthenticationContext.GetRight(RightsType.DreamDaemon) & (ulong)DreamDaemonRights.ReadRevision) != 0;
-
319
-
320 if (settings == null)
-
321 {
-
322 settings = await DatabaseContext
-
323 .Instances
-
324 .AsQueryable()
-
325 .Where(x => x.Id == Instance.Id)
-
326 .Select(x => x.DreamDaemonSettings!)
-
327 .FirstOrDefaultAsync(cancellationToken);
-
328 if (settings == default)
-
329 return this.Gone();
-
330 }
-
331
-
332 var result = new DreamDaemonResponse();
-
333 if (metadata)
-
334 {
-
335 var alphaActive = dd.AlphaIsActive;
-
336 var llp = dd.LastLaunchParameters;
-
337 var rstate = dd.RebootState;
-
338 result.AutoStart = settings.AutoStart!.Value;
-
339 result.CurrentPort = llp?.Port!.Value;
-
340 result.CurrentSecurity = llp?.SecurityLevel!.Value;
-
341 result.CurrentVisibility = llp?.Visibility!.Value;
-
342 result.CurrentAllowWebclient = llp?.AllowWebClient!.Value;
-
343 result.Port = settings.Port!.Value;
-
344 result.AllowWebClient = settings.AllowWebClient!.Value;
-
345
-
346 var firstIteration = true;
-
347 do
-
348 {
-
349 if (!firstIteration)
-
350 {
-
351 cancellationToken.ThrowIfCancellationRequested();
-
352 await Task.Yield();
-
353 }
-
354
-
355 firstIteration = false;
-
356 result.Status = dd.Status;
-
357 result.SessionId = dd.SessionId;
-
358 }
-
359 while (result.Status == WatchdogStatus.Online && !result.SessionId.HasValue); // this is the one invalid combo, it's not that racy
-
360
-
361 result.SecurityLevel = settings.SecurityLevel!.Value;
-
362 result.Visibility = settings.Visibility!.Value;
-
363 result.SoftRestart = rstate == RebootState.Restart;
-
364 result.SoftShutdown = rstate == RebootState.Shutdown;
+
298 var watchdog = instance.Watchdog;
+
299
+
300 if (watchdog.Status == WatchdogStatus.Offline)
+
301 return Conflict(new ErrorMessageResponse(ErrorCode.WatchdogNotRunning));
+
302
+
303 await jobManager.RegisterOperation(
+
304 job,
+
305 (core, databaseContextFactory, paramJob, progressReporter, ct) => core!.Watchdog.CreateDump(ct),
+
306 cancellationToken);
+
307 return Accepted(job.ToApi());
+
308 });
+
309
+
317 ValueTask<IActionResult> ReadImpl(DreamDaemonSettings? settings, bool knownForcedReboot, CancellationToken cancellationToken)
+
318 => WithComponentInstance(async instance =>
+
319 {
+
320 var dd = instance.Watchdog;
+
321
+
322 var metadata = (AuthenticationContext.GetRight(RightsType.DreamDaemon) & (ulong)DreamDaemonRights.ReadMetadata) != 0;
+
323 var revision = (AuthenticationContext.GetRight(RightsType.DreamDaemon) & (ulong)DreamDaemonRights.ReadRevision) != 0;
+
324
+
325 if (settings == null)
+
326 {
+
327 settings = await DatabaseContext
+
328 .Instances
+
329 .AsQueryable()
+
330 .Where(x => x.Id == Instance.Id)
+
331 .Select(x => x.DreamDaemonSettings!)
+
332 .FirstOrDefaultAsync(cancellationToken);
+
333 if (settings == default)
+
334 return this.Gone();
+
335 }
+
336
+
337 var result = new DreamDaemonResponse();
+
338 if (metadata)
+
339 {
+
340 var alphaActive = dd.AlphaIsActive;
+
341 var llp = dd.LastLaunchParameters;
+
342 var rstate = dd.RebootState;
+
343 result.AutoStart = settings.AutoStart!.Value;
+
344 result.CurrentPort = llp?.Port!.Value;
+
345 result.CurrentSecurity = llp?.SecurityLevel!.Value;
+
346 result.CurrentVisibility = llp?.Visibility!.Value;
+
347 result.CurrentAllowWebclient = llp?.AllowWebClient!.Value;
+
348 result.Port = settings.Port!.Value;
+
349 result.AllowWebClient = settings.AllowWebClient!.Value;
+
350
+
351 var firstIteration = true;
+
352 do
+
353 {
+
354 if (!firstIteration)
+
355 {
+
356 cancellationToken.ThrowIfCancellationRequested();
+
357 await Task.Yield();
+
358 }
+
359
+
360 firstIteration = false;
+
361 result.Status = dd.Status;
+
362 result.SessionId = dd.SessionId;
+
363 }
+
364 while (result.Status == WatchdogStatus.Online && !result.SessionId.HasValue); // this is the one invalid combo, it's not that racy
365
-
366 if (rstate == RebootState.Normal && knownForcedReboot)
-
367 result.SoftRestart = true;
-
368
-
369 result.StartupTimeout = settings.StartupTimeout!.Value;
-
370 result.HealthCheckSeconds = settings.HealthCheckSeconds!.Value;
-
371 result.DumpOnHealthCheckRestart = settings.DumpOnHealthCheckRestart!.Value;
-
372 result.TopicRequestTimeout = settings.TopicRequestTimeout!.Value;
-
373 result.AdditionalParameters = settings.AdditionalParameters;
-
374 result.StartProfiler = settings.StartProfiler;
-
375 result.LogOutput = settings.LogOutput;
-
376 result.MapThreads = settings.MapThreads;
-
377 }
-
378
-
379 if (revision)
-
380 {
-
381 var latestCompileJob = instance.LatestCompileJob();
-
382 result.ActiveCompileJob = ((instance.Watchdog.Status != WatchdogStatus.Offline
-
383 ? dd.ActiveCompileJob
-
384 : latestCompileJob) ?? latestCompileJob)
-
385 ?.ToApi();
-
386 if (latestCompileJob?.Id != result.ActiveCompileJob?.Id)
-
387 result.StagedCompileJob = latestCompileJob?.ToApi();
-
388 }
-
389
-
390 return Json(result);
-
391 });
-
392 }
-
393}
+
366 result.SecurityLevel = settings.SecurityLevel!.Value;
+
367 result.Visibility = settings.Visibility!.Value;
+
368 result.SoftRestart = rstate == RebootState.Restart;
+
369 result.SoftShutdown = rstate == RebootState.Shutdown;
+
370
+
371 if (rstate == RebootState.Normal && knownForcedReboot)
+
372 result.SoftRestart = true;
+
373
+
374 result.StartupTimeout = settings.StartupTimeout!.Value;
+
375 result.HealthCheckSeconds = settings.HealthCheckSeconds!.Value;
+
376 result.DumpOnHealthCheckRestart = settings.DumpOnHealthCheckRestart!.Value;
+
377 result.TopicRequestTimeout = settings.TopicRequestTimeout!.Value;
+
378 result.AdditionalParameters = settings.AdditionalParameters;
+
379 result.StartProfiler = settings.StartProfiler;
+
380 result.LogOutput = settings.LogOutput;
+
381 result.MapThreads = settings.MapThreads;
+
382 }
+
383
+
384 if (revision)
+
385 {
+
386 var latestCompileJob = instance.LatestCompileJob();
+
387 result.ActiveCompileJob = ((instance.Watchdog.Status != WatchdogStatus.Offline
+
388 ? dd.ActiveCompileJob
+
389 : latestCompileJob) ?? latestCompileJob)
+
390 ?.ToApi();
+
391 if (latestCompileJob?.Id != result.ActiveCompileJob?.Id)
+
392 result.StagedCompileJob = latestCompileJob?.ToApi();
+
393 }
+
394
+
395 return Json(result);
+
396 });
+
397 }
+
398}
virtual ? long Id
The ID of the entity.
Definition: EntityId.cs:13
Metadata about a server instance.
Definition: Instance.cs:9
DreamDaemonRights? DreamDaemonRights
The Rights.DreamDaemonRights of the InstancePermissionSet.
@@ -415,6 +420,7 @@
Routes to a server actions.
Definition: Routes.cs:9
const string DreamDaemon
The DreamDaemon controller.
Definition: Routes.cs:58
const string Diagnostics
For accessing DD diagnostics.
Definition: Routes.cs:63
+
ILogger< ApiController > Logger
The ILogger for the ApiController.
readonly IInstanceManager instanceManager
The IInstanceManager for the ComponentInterfacingController.
async ValueTask< IActionResult > WithComponentInstance(Func< IInstanceCore, ValueTask< IActionResult > > action, Models.Instance? instance=null)
Run a given action with the relevant IInstance.
ApiController for managing the DreamDaemonResponse.
diff --git a/_dream_maker_controller_8cs_source.html b/_dream_maker_controller_8cs_source.html index b411b0c80bc..bc0ed9c24ff 100644 --- a/_dream_maker_controller_8cs_source.html +++ b/_dream_maker_controller_8cs_source.html @@ -198,97 +198,104 @@
175 [ProducesResponseType(typeof(DreamMakerResponse), 200)]
176 [ProducesResponseType(204)]
177 [ProducesResponseType(typeof(ErrorMessageResponse), 410)]
-
178 public async ValueTask<IActionResult> Update([FromBody] DreamMakerRequest model, CancellationToken cancellationToken)
-
179 {
-
180 ArgumentNullException.ThrowIfNull(model);
-
181
-
182 if (model.ApiValidationPort == 0)
-
183 throw new InvalidOperationException("ApiValidationPort cannot be 0!");
-
184
-
185 var hostModel = await DatabaseContext
-
186 .DreamMakerSettings
-
187 .AsQueryable()
-
188 .Where(x => x.InstanceId == Instance.Id)
-
189 .FirstOrDefaultAsync(cancellationToken);
-
190 if (hostModel == null)
-
191 return this.Gone();
-
192
-
193 var dreamMakerRights = InstancePermissionSet.DreamMakerRights!.Value;
-
194 if (model.ProjectName != null)
-
195 {
-
196 if (!dreamMakerRights.HasFlag(DreamMakerRights.SetDme))
-
197 return Forbid();
-
198 if (model.ProjectName.Length == 0)
-
199 hostModel.ProjectName = null;
-
200 else
-
201 hostModel.ProjectName = model.ProjectName;
-
202 }
-
203
-
204 if (model.ApiValidationPort.HasValue)
-
205 {
-
206 if (!dreamMakerRights.HasFlag(DreamMakerRights.SetApiValidationPort))
-
207 return Forbid();
-
208
-
209 if (model.ApiValidationPort.Value != hostModel.ApiValidationPort!.Value)
-
210 {
-
211 var verifiedPort = await portAllocator
-
212 .GetAvailablePort(
-
213 model.ApiValidationPort.Value,
-
214 true,
-
215 cancellationToken);
-
216 if (verifiedPort != model.ApiValidationPort)
-
217 return Conflict(new ErrorMessageResponse(ErrorCode.PortNotAvailable));
-
218
-
219 hostModel.ApiValidationPort = model.ApiValidationPort;
-
220 }
-
221 }
-
222
-
223 if (model.ApiValidationSecurityLevel.HasValue)
-
224 {
-
225 if (!dreamMakerRights.HasFlag(DreamMakerRights.SetSecurityLevel))
-
226 return Forbid();
-
227 hostModel.ApiValidationSecurityLevel = model.ApiValidationSecurityLevel;
-
228 }
-
229
-
230 if (model.RequireDMApiValidation.HasValue)
-
231 {
-
232 if (!dreamMakerRights.HasFlag(DreamMakerRights.SetApiValidationRequirement))
-
233 return Forbid();
-
234 hostModel.RequireDMApiValidation = model.RequireDMApiValidation;
-
235 }
-
236
-
237 if (model.Timeout.HasValue)
-
238 {
-
239 if (!dreamMakerRights.HasFlag(DreamMakerRights.SetTimeout))
-
240 return Forbid();
-
241 hostModel.Timeout = model.Timeout;
-
242 }
-
243
-
244 await DatabaseContext.Save(cancellationToken);
-
245
-
246 if (!dreamMakerRights.HasFlag(DreamMakerRights.Read))
-
247 return NoContent();
-
248
-
249 return await Read(cancellationToken);
-
250 }
+
178#pragma warning disable CA1506 // TODO: Decomplexify
+
179 public async ValueTask<IActionResult> Update([FromBody] DreamMakerRequest model, CancellationToken cancellationToken)
+
180 {
+
181 ArgumentNullException.ThrowIfNull(model);
+
182
+
183 if (model.ApiValidationPort == 0)
+
184 throw new InvalidOperationException("ApiValidationPort cannot be 0!");
+
185
+
186 var hostModel = await DatabaseContext
+
187 .DreamMakerSettings
+
188 .AsQueryable()
+
189 .Where(x => x.InstanceId == Instance.Id)
+
190 .FirstOrDefaultAsync(cancellationToken);
+
191 if (hostModel == null)
+
192 return this.Gone();
+
193
+
194 var dreamMakerRights = InstancePermissionSet.DreamMakerRights!.Value;
+
195 if (model.ProjectName != null)
+
196 {
+
197 if (!dreamMakerRights.HasFlag(DreamMakerRights.SetDme))
+
198 return Forbid();
+
199 if (model.ProjectName.Length == 0)
+
200 hostModel.ProjectName = null;
+
201 else
+
202 hostModel.ProjectName = model.ProjectName;
+
203 }
+
204
+
205 if (model.ApiValidationPort.HasValue)
+
206 {
+
207 if (!dreamMakerRights.HasFlag(DreamMakerRights.SetApiValidationPort))
+
208 return Forbid();
+
209
+
210 if (model.ApiValidationPort.Value != hostModel.ApiValidationPort!.Value)
+
211 {
+
212 Logger.LogTrace(
+
213 "Triggering port allocator for DM-I:{instanceId} because model port {modelPort} doesn't match DB port {dbPort}...",
+
214 Instance.Id,
+
215 model.ApiValidationPort,
+
216 hostModel.ApiValidationPort);
+
217 var verifiedPort = await portAllocator
+
218 .GetAvailablePort(
+
219 model.ApiValidationPort.Value,
+
220 true,
+
221 cancellationToken);
+
222 if (verifiedPort != model.ApiValidationPort)
+
223 return Conflict(new ErrorMessageResponse(ErrorCode.PortNotAvailable));
+
224
+
225 hostModel.ApiValidationPort = model.ApiValidationPort;
+
226 }
+
227 }
+
228
+
229 if (model.ApiValidationSecurityLevel.HasValue)
+
230 {
+
231 if (!dreamMakerRights.HasFlag(DreamMakerRights.SetSecurityLevel))
+
232 return Forbid();
+
233 hostModel.ApiValidationSecurityLevel = model.ApiValidationSecurityLevel;
+
234 }
+
235
+
236 if (model.RequireDMApiValidation.HasValue)
+
237 {
+
238 if (!dreamMakerRights.HasFlag(DreamMakerRights.SetApiValidationRequirement))
+
239 return Forbid();
+
240 hostModel.RequireDMApiValidation = model.RequireDMApiValidation;
+
241 }
+
242
+
243 if (model.Timeout.HasValue)
+
244 {
+
245 if (!dreamMakerRights.HasFlag(DreamMakerRights.SetTimeout))
+
246 return Forbid();
+
247 hostModel.Timeout = model.Timeout;
+
248 }
+
249
+
250 await DatabaseContext.Save(cancellationToken);
251
-
256 IQueryable<CompileJob> BaseCompileJobsQuery() => DatabaseContext
-
257 .CompileJobs
-
258 .AsQueryable()
-
259 .Include(x => x.Job!)
-
260 .ThenInclude(x => x.StartedBy)
-
261 .Include(x => x.Job!)
-
262 .ThenInclude(x => x.Instance)
-
263 .Include(x => x.RevisionInformation!)
-
264 .ThenInclude(x => x.PrimaryTestMerge!)
-
265 .ThenInclude(x => x.MergedBy)
-
266 .Include(x => x.RevisionInformation)
-
267 .ThenInclude(x => x.ActiveTestMerges!)
-
268 .ThenInclude(x => x!.TestMerge)
-
269 .ThenInclude(x => x!.MergedBy)
-
270 .Where(x => x.Job.Instance!.Id == Instance.Id);
-
271 }
-
272}
+
252 if (!dreamMakerRights.HasFlag(DreamMakerRights.Read))
+
253 return NoContent();
+
254
+
255 return await Read(cancellationToken);
+
256 }
+
257#pragma warning restore CA1506
+
258
+
263 IQueryable<CompileJob> BaseCompileJobsQuery() => DatabaseContext
+
264 .CompileJobs
+
265 .AsQueryable()
+
266 .Include(x => x.Job!)
+
267 .ThenInclude(x => x.StartedBy)
+
268 .Include(x => x.Job!)
+
269 .ThenInclude(x => x.Instance)
+
270 .Include(x => x.RevisionInformation!)
+
271 .ThenInclude(x => x.PrimaryTestMerge!)
+
272 .ThenInclude(x => x.MergedBy)
+
273 .Include(x => x.RevisionInformation)
+
274 .ThenInclude(x => x.ActiveTestMerges!)
+
275 .ThenInclude(x => x!.TestMerge)
+
276 .ThenInclude(x => x!.MergedBy)
+
277 .Where(x => x.Job.Instance!.Id == Instance.Id);
+
278 }
+
279}
virtual ? long Id
The ID of the entity.
Definition: EntityId.cs:13
Metadata about a server instance.
Definition: Instance.cs:9
@@ -304,12 +311,13 @@
const string List
The postfix for list operations.
Definition: Routes.cs:108
const string DreamMaker
The deployment controller.
Definition: Routes.cs:93
new NotFoundObjectResult NotFound()
Generic 404 response.
+
ILogger< ApiController > Logger
The ILogger for the ApiController.
readonly IInstanceManager instanceManager
The IInstanceManager for the ComponentInterfacingController.
ApiController for managing the deployment system.
async ValueTask< IActionResult > GetId(long id, CancellationToken cancellationToken)
Get a CompileJob specified by a given id .
readonly IPortAllocator portAllocator
The IPortAllocator for the DreamMakerController.
async ValueTask< IActionResult > Read(CancellationToken cancellationToken)
Read current deployment settings.
-
async ValueTask< IActionResult > Update([FromBody] DreamMakerRequest model, CancellationToken cancellationToken)
Update deployment settings.
+
async ValueTask< IActionResult > Update([FromBody] DreamMakerRequest model, CancellationToken cancellationToken)
Update deployment settings.
IQueryable< CompileJob > BaseCompileJobsQuery()
Base query for pulling in all required CompileJob fields.
ValueTask< IActionResult > List([FromQuery] int? page, [FromQuery] int? pageSize, CancellationToken cancellationToken)
List all CompileJob EntityIds for the instance.
async ValueTask< IActionResult > Create(CancellationToken cancellationToken)
Begin deploying repository code.
diff --git a/_tgstation_8_server_8_api_8_assembly_info_8cs_source.html b/_tgstation_8_server_8_api_8_assembly_info_8cs_source.html index f8208eb0b85..3fee2f53221 100644 --- a/_tgstation_8_server_8_api_8_assembly_info_8cs_source.html +++ b/_tgstation_8_server_8_api_8_assembly_info_8cs_source.html @@ -94,7 +94,7 @@
15[assembly: System.Reflection.AssemblyCopyrightAttribute("Copyright (c) Jordan Brown 2018")]
16[assembly: System.Reflection.AssemblyDescriptionAttribute("API definitions for tgstation-server.")]
17[assembly: System.Reflection.AssemblyFileVersionAttribute("13.0.1.0")]
-
18[assembly: System.Reflection.AssemblyInformationalVersionAttribute("13.0.1+9689a964dccdb6687d3c64ac198df103e1277418")]
+
18[assembly: System.Reflection.AssemblyInformationalVersionAttribute("13.0.1+172599a6b4e159c02a57adf25ef64e7c5c8f0f79")]
19[assembly: System.Reflection.AssemblyProductAttribute("Tgstation.Server.Api")]
20[assembly: System.Reflection.AssemblyTitleAttribute("Tgstation.Server.Api")]
21[assembly: System.Reflection.AssemblyVersionAttribute("13.0.1.0")]
diff --git a/_tgstation_8_server_8_common_8_assembly_info_8cs_source.html b/_tgstation_8_server_8_common_8_assembly_info_8cs_source.html index d1315fdde7b..52e349c38f4 100644 --- a/_tgstation_8_server_8_common_8_assembly_info_8cs_source.html +++ b/_tgstation_8_server_8_common_8_assembly_info_8cs_source.html @@ -94,7 +94,7 @@
15[assembly: System.Reflection.AssemblyCopyrightAttribute("Copyright (c) Jordan Brown 2018")]
16[assembly: System.Reflection.AssemblyDescriptionAttribute("Common functions for tgstation-server.")]
17[assembly: System.Reflection.AssemblyFileVersionAttribute("7.0.0.0")]
-
18[assembly: System.Reflection.AssemblyInformationalVersionAttribute("7.0.0+9689a964dccdb6687d3c64ac198df103e1277418")]
+
18[assembly: System.Reflection.AssemblyInformationalVersionAttribute("7.0.0+172599a6b4e159c02a57adf25ef64e7c5c8f0f79")]
19[assembly: System.Reflection.AssemblyProductAttribute("Tgstation.Server.Common")]
20[assembly: System.Reflection.AssemblyTitleAttribute("Tgstation.Server.Common")]
21[assembly: System.Reflection.AssemblyVersionAttribute("7.0.0.0")]
diff --git a/_tgstation_8_server_8_host_8_assembly_info_8cs_source.html b/_tgstation_8_server_8_host_8_assembly_info_8cs_source.html index 3a20b2c2172..c5579bd824f 100644 --- a/_tgstation_8_server_8_host_8_assembly_info_8cs_source.html +++ b/_tgstation_8_server_8_host_8_assembly_info_8cs_source.html @@ -92,7 +92,7 @@
13[assembly: System.Reflection.AssemblyCompanyAttribute("Tgstation.Server.Host")]
14[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")]
15[assembly: System.Reflection.AssemblyFileVersionAttribute("6.1.2.0")]
-
16[assembly: System.Reflection.AssemblyInformationalVersionAttribute("6.1.2+9689a964dccdb6687d3c64ac198df103e1277418")]
+
16[assembly: System.Reflection.AssemblyInformationalVersionAttribute("6.1.2+172599a6b4e159c02a57adf25ef64e7c5c8f0f79")]
17[assembly: System.Reflection.AssemblyProductAttribute("Tgstation.Server.Host")]
18[assembly: System.Reflection.AssemblyTitleAttribute("Tgstation.Server.Host")]
19[assembly: System.Reflection.AssemblyVersionAttribute("6.1.2.0")]
diff --git a/_tgstation_8_server_8_host_8_common_8_assembly_info_8cs_source.html b/_tgstation_8_server_8_host_8_common_8_assembly_info_8cs_source.html index 6c35d892cee..015a87f7485 100644 --- a/_tgstation_8_server_8_host_8_common_8_assembly_info_8cs_source.html +++ b/_tgstation_8_server_8_host_8_common_8_assembly_info_8cs_source.html @@ -92,7 +92,7 @@
13[assembly: System.Reflection.AssemblyCompanyAttribute("Tgstation.Server.Host.Common")]
14[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")]
15[assembly: System.Reflection.AssemblyFileVersionAttribute("6.1.2.0")]
-
16[assembly: System.Reflection.AssemblyInformationalVersionAttribute("6.1.2+9689a964dccdb6687d3c64ac198df103e1277418")]
+
16[assembly: System.Reflection.AssemblyInformationalVersionAttribute("6.1.2+172599a6b4e159c02a57adf25ef64e7c5c8f0f79")]
17[assembly: System.Reflection.AssemblyProductAttribute("Tgstation.Server.Host.Common")]
18[assembly: System.Reflection.AssemblyTitleAttribute("Tgstation.Server.Host.Common")]
19[assembly: System.Reflection.AssemblyVersionAttribute("6.1.2.0")]
diff --git a/changelog.yml b/changelog.yml index e44dbebee98..9074b05dcf5 100644 --- a/changelog.yml +++ b/changelog.yml @@ -146,7 +146,17 @@ Components: Changes: [] Unreleased: true - Version: 6.1.3 - ComponentVersions: {} + ComponentVersions: + Core: 6.1.2 + HttpApi: 10.0.0 + DreamMakerApi: 7.0.1 + Configuration: 5.0.0 + InteropApi: 5.8.0 + HostWatchdog: 1.4.1 + NugetCommon: 7.0.0 + NugetApi: 13.0.1 + NugetClient: 15.0.1 + WebControlPanel: 5.4.2 Changes: [] Unreleased: true - Version: 6.1.2 diff --git a/class_tgstation_1_1_server_1_1_api_1_1_models_1_1_entity_id.html b/class_tgstation_1_1_server_1_1_api_1_1_models_1_1_entity_id.html index 24580896533..91231c47a25 100644 --- a/class_tgstation_1_1_server_1_1_api_1_1_models_1_1_entity_id.html +++ b/class_tgstation_1_1_server_1_1_api_1_1_models_1_1_entity_id.html @@ -160,7 +160,7 @@

Definition at line 13 of file EntityId.cs.

13{ get; set; }
-

Referenced by Tgstation.Server.Host.Components.Watchdog.WatchdogBase.BeforeApplyDmb(), Tgstation.Server.Host.Jobs.JobService.CancelJob(), Tgstation.Server.Host.Controllers.InstanceController.CheckAccessible(), Tgstation.Server.Host.Controllers.ChatController.Create(), Tgstation.Server.Host.Controllers.RepositoryController.Create(), Tgstation.Server.Client.InstanceManagerClient.CreateClient(), Tgstation.Server.Host.Controllers.ApiRootController.CreateToken(), Tgstation.Server.Api.Models.UserName.CreateUserName< TResultType >(), Tgstation.Server.Host.Controllers.RepositoryController.Delete(), Tgstation.Server.Host.Controllers.InstancePermissionSetController.Delete(), Tgstation.Server.Host.Controllers.JobController.Delete(), Tgstation.Server.Host.Components.Deployment.DmbFactory.FromCompileJob(), Tgstation.Server.Host.Controllers.ChatController.GetId(), Tgstation.Server.Host.Controllers.InstancePermissionSetController.GetId(), Tgstation.Server.Host.Controllers.JobController.GetId(), Tgstation.Server.Host.Controllers.UserController.GetId(), Tgstation.Server.Host.Components.Watchdog.AdvancedWatchdog.HandleNewDmbAvailable(), Tgstation.Server.Host.Controllers.ApiController.HookExecuteAction(), Tgstation.Server.Host.Components.Watchdog.BasicWatchdog.InitController(), Tgstation.Server.Host.Components.Watchdog.WatchdogBase.InitialCheckDmbUpdated(), Tgstation.Server.Client.Components.InstanceClient.InstanceClient(), Tgstation.Server.Host.Models.Job.Job(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), Tgstation.Server.Host.Controllers.ChatController.List(), Tgstation.Server.Host.Components.InstanceManager.MoveInstance(), Tgstation.Server.Host.Components.Watchdog.AdvancedWatchdog.PerformDmbSwap(), Tgstation.Server.Host.Controllers.DreamMakerController.Read(), Tgstation.Server.Host.Controllers.RepositoryController.Read(), Tgstation.Server.Client.Components.ConfigurationClient.Read(), Tgstation.Server.Host.Controllers.DreamDaemonController.ReadImpl(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach(), Tgstation.Server.Host.Jobs.JobService.RegisterOperation(), Tgstation.Server.Host.Components.Repository.RepositoryUpdateService.RepositoryUpdateJob(), Tgstation.Server.Host.Jobs.JobService.RunJob(), Tgstation.Server.Client.Components.EngineClient.SetActiveVersion(), Tgstation.Server.Host.Models.ChatBot.ToApi(), Tgstation.Server.Host.Models.CompileJob.ToApi(), Tgstation.Server.Host.Models.Instance.ToApi(), Tgstation.Server.Host.Models.Job.ToApi(), Tgstation.Server.Host.Models.UserGroup.ToApi(), Tgstation.Server.Host.Controllers.ChatController.Update(), Tgstation.Server.Host.Controllers.DreamDaemonController.Update(), Tgstation.Server.Host.Controllers.DreamMakerController.Update(), Tgstation.Server.Host.Controllers.EngineController.Update(), Tgstation.Server.Host.Controllers.InstancePermissionSetController.Update(), Tgstation.Server.Host.Controllers.InstanceController.Update(), Tgstation.Server.Host.Controllers.RepositoryController.Update(), Tgstation.Server.Host.Jobs.JobsHubGroupMapper.UserDisabled(), and Tgstation.Server.Client.Components.ConfigurationClient.Write().

+

Referenced by Tgstation.Server.Host.Components.Watchdog.WatchdogBase.BeforeApplyDmb(), Tgstation.Server.Host.Jobs.JobService.CancelJob(), Tgstation.Server.Host.Controllers.InstanceController.CheckAccessible(), Tgstation.Server.Host.Controllers.ChatController.Create(), Tgstation.Server.Host.Controllers.RepositoryController.Create(), Tgstation.Server.Client.InstanceManagerClient.CreateClient(), Tgstation.Server.Host.Controllers.ApiRootController.CreateToken(), Tgstation.Server.Api.Models.UserName.CreateUserName< TResultType >(), Tgstation.Server.Host.Controllers.RepositoryController.Delete(), Tgstation.Server.Host.Controllers.InstancePermissionSetController.Delete(), Tgstation.Server.Host.Controllers.JobController.Delete(), Tgstation.Server.Host.Components.Deployment.DmbFactory.FromCompileJob(), Tgstation.Server.Host.Controllers.ChatController.GetId(), Tgstation.Server.Host.Controllers.InstancePermissionSetController.GetId(), Tgstation.Server.Host.Controllers.JobController.GetId(), Tgstation.Server.Host.Controllers.UserController.GetId(), Tgstation.Server.Host.Components.Watchdog.AdvancedWatchdog.HandleNewDmbAvailable(), Tgstation.Server.Host.Controllers.ApiController.HookExecuteAction(), Tgstation.Server.Host.Components.Watchdog.BasicWatchdog.InitController(), Tgstation.Server.Host.Components.Watchdog.WatchdogBase.InitialCheckDmbUpdated(), Tgstation.Server.Client.Components.InstanceClient.InstanceClient(), Tgstation.Server.Host.Models.Job.Job(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), Tgstation.Server.Host.Controllers.ChatController.List(), Tgstation.Server.Host.Components.InstanceManager.MoveInstance(), Tgstation.Server.Host.Components.Watchdog.AdvancedWatchdog.PerformDmbSwap(), Tgstation.Server.Host.Controllers.DreamMakerController.Read(), Tgstation.Server.Host.Controllers.RepositoryController.Read(), Tgstation.Server.Client.Components.ConfigurationClient.Read(), Tgstation.Server.Host.Controllers.DreamDaemonController.ReadImpl(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach(), Tgstation.Server.Host.Jobs.JobService.RegisterOperation(), Tgstation.Server.Host.Components.Repository.RepositoryUpdateService.RepositoryUpdateJob(), Tgstation.Server.Host.Jobs.JobService.RunJob(), Tgstation.Server.Client.Components.EngineClient.SetActiveVersion(), Tgstation.Server.Host.Models.ChatBot.ToApi(), Tgstation.Server.Host.Models.CompileJob.ToApi(), Tgstation.Server.Host.Models.Instance.ToApi(), Tgstation.Server.Host.Models.Job.ToApi(), Tgstation.Server.Host.Models.UserGroup.ToApi(), Tgstation.Server.Host.Controllers.ChatController.Update(), Tgstation.Server.Host.Controllers.DreamDaemonController.Update(), Tgstation.Server.Host.Controllers.DreamMakerController.Update(), Tgstation.Server.Host.Controllers.EngineController.Update(), Tgstation.Server.Host.Controllers.InstancePermissionSetController.Update(), Tgstation.Server.Host.Controllers.InstanceController.Update(), Tgstation.Server.Host.Controllers.RepositoryController.Update(), Tgstation.Server.Host.Jobs.JobsHubGroupMapper.UserDisabled(), and Tgstation.Server.Client.Components.ConfigurationClient.Write().

diff --git a/class_tgstation_1_1_server_1_1_api_1_1_models_1_1_internal_1_1_instance_permission_set.html b/class_tgstation_1_1_server_1_1_api_1_1_models_1_1_internal_1_1_instance_permission_set.html index 1441fcc9803..559912db74a 100644 --- a/class_tgstation_1_1_server_1_1_api_1_1_models_1_1_internal_1_1_instance_permission_set.html +++ b/class_tgstation_1_1_server_1_1_api_1_1_models_1_1_internal_1_1_instance_permission_set.html @@ -239,7 +239,7 @@

Definition at line 42 of file InstancePermissionSet.cs.

42{ get; set; }
-

Referenced by Tgstation.Server.Host.Models.InstancePermissionSet.ToApi(), and Tgstation.Server.Host.Controllers.DreamMakerController.Update().

+

Referenced by Tgstation.Server.Host.Models.InstancePermissionSet.ToApi(), and Tgstation.Server.Host.Controllers.DreamMakerController.Update().

diff --git a/class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_api_controller.html b/class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_api_controller.html index e9837591988..2228db1b0e4 100644 --- a/class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_api_controller.html +++ b/class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_api_controller.html @@ -1473,7 +1473,7 @@

Definition at line 71 of file ApiController.cs.

71{ get; }
-

Referenced by Tgstation.Server.Host.Controllers.ApiController.ApiController(), Tgstation.Server.Host.Controllers.AdministrationController.AttemptInitiateUpdate(), Tgstation.Server.Host.Controllers.UserController.Create(), Tgstation.Server.Host.Controllers.UserGroupController.Create(), Tgstation.Server.Host.Controllers.ConfigurationController.CreateDirectory(), Tgstation.Server.Host.Controllers.ApiRootController.CreateToken(), Tgstation.Server.Host.Controllers.AdministrationController.Delete(), Tgstation.Server.Host.Controllers.RepositoryController.Delete(), Tgstation.Server.Host.Controllers.ConfigurationController.DeleteDirectory(), Tgstation.Server.Host.Controllers.ConfigurationController.Directory(), Tgstation.Server.Host.Controllers.ConfigurationController.File(), Tgstation.Server.Host.Controllers.ApiController.HookExecuteAction(), Tgstation.Server.Host.Controllers.RepositoryController.PopulateApi(), Tgstation.Server.Host.Controllers.ApiController.RateLimit(), Tgstation.Server.Host.Controllers.AdministrationController.Read(), Tgstation.Server.Host.Controllers.ApiController.RequiresPosixSystemIdentity(), Tgstation.Server.Host.Controllers.ConfigurationController.Update(), Tgstation.Server.Host.Controllers.EngineController.Update(), Tgstation.Server.Host.Controllers.UserController.Update(), and Tgstation.Server.Host.Controllers.ComponentInterfacingController.ValidateInstanceOnlineStatus().

+

Referenced by Tgstation.Server.Host.Controllers.ApiController.ApiController(), Tgstation.Server.Host.Controllers.AdministrationController.AttemptInitiateUpdate(), Tgstation.Server.Host.Controllers.UserController.Create(), Tgstation.Server.Host.Controllers.UserGroupController.Create(), Tgstation.Server.Host.Controllers.ConfigurationController.CreateDirectory(), Tgstation.Server.Host.Controllers.ApiRootController.CreateToken(), Tgstation.Server.Host.Controllers.AdministrationController.Delete(), Tgstation.Server.Host.Controllers.RepositoryController.Delete(), Tgstation.Server.Host.Controllers.ConfigurationController.DeleteDirectory(), Tgstation.Server.Host.Controllers.ConfigurationController.Directory(), Tgstation.Server.Host.Controllers.ConfigurationController.File(), Tgstation.Server.Host.Controllers.ApiController.HookExecuteAction(), Tgstation.Server.Host.Controllers.RepositoryController.PopulateApi(), Tgstation.Server.Host.Controllers.ApiController.RateLimit(), Tgstation.Server.Host.Controllers.AdministrationController.Read(), Tgstation.Server.Host.Controllers.ApiController.RequiresPosixSystemIdentity(), Tgstation.Server.Host.Controllers.ConfigurationController.Update(), Tgstation.Server.Host.Controllers.DreamDaemonController.Update(), Tgstation.Server.Host.Controllers.DreamMakerController.Update(), Tgstation.Server.Host.Controllers.EngineController.Update(), Tgstation.Server.Host.Controllers.UserController.Update(), and Tgstation.Server.Host.Controllers.ComponentInterfacingController.ValidateInstanceOnlineStatus().

diff --git a/class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_dream_daemon_controller.html b/class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_dream_daemon_controller.html index adb4d9031f9..0f45aaaaaaa 100644 --- a/class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_dream_daemon_controller.html +++ b/class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_dream_daemon_controller.html @@ -674,79 +674,84 @@

174
175 if (model.Port.HasValue && model.Port.Value != current.Port!.Value)
176 {
-
177 var verifiedPort = await portAllocator
- -
179 model.Port.Value,
-
180 true,
-
181 cancellationToken);
-
182
-
183 if (verifiedPort != model.Port)
-
184 return Conflict(new ErrorMessageResponse(ErrorCode.PortNotAvailable));
-
185 }
-
186
-
187 var userRights = (DreamDaemonRights)AuthenticationContext.GetRight(RightsType.DreamDaemon);
-
188
-
189 bool CheckModified<T>(Expression<Func<Api.Models.Internal.DreamDaemonSettings, T>> expression, DreamDaemonRights requiredRight)
-
190 {
-
191 var memberSelectorExpression = (MemberExpression)expression.Body;
-
192 var property = (PropertyInfo)memberSelectorExpression.Member;
+
177 Logger.LogTrace(
+
178 "Triggering port allocator for DD-I:{instanceId} because model port {modelPort} doesn't match DB port {dbPort}...",
+
179 Instance.Id,
+
180 model.Port,
+
181 current.Port);
+
182 var verifiedPort = await portAllocator
+ +
184 model.Port.Value,
+
185 true,
+
186 cancellationToken);
+
187
+
188 if (verifiedPort != model.Port)
+
189 return Conflict(new ErrorMessageResponse(ErrorCode.PortNotAvailable));
+
190 }
+
191
+
192 var userRights = (DreamDaemonRights)AuthenticationContext.GetRight(RightsType.DreamDaemon);
193
-
194 var newVal = property.GetValue(model);
-
195 if (newVal == null)
-
196 return false;
-
197 if (!userRights.HasFlag(requiredRight) && property.GetValue(current) != newVal)
-
198 return true;
-
199
-
200 property.SetValue(current, newVal);
-
201 return false;
-
202 }
-
203
-
204 var ddRights = InstancePermissionSet.DreamDaemonRights!.Value;
-
205 if (CheckModified(x => x.AllowWebClient, DreamDaemonRights.SetWebClient)
-
206 || CheckModified(x => x.AutoStart, DreamDaemonRights.SetAutoStart)
-
207 || CheckModified(x => x.Port, DreamDaemonRights.SetPort)
-
208 || CheckModified(x => x.SecurityLevel, DreamDaemonRights.SetSecurity)
-
209 || CheckModified(x => x.Visibility, DreamDaemonRights.SetVisibility)
-
210 || (model.SoftRestart.HasValue && !ddRights.HasFlag(DreamDaemonRights.SoftRestart))
-
211 || (model.SoftShutdown.HasValue && !ddRights.HasFlag(DreamDaemonRights.SoftShutdown))
-
212 || (!String.IsNullOrWhiteSpace(model.BroadcastMessage) && !ddRights.HasFlag(DreamDaemonRights.BroadcastMessage))
-
213 || CheckModified(x => x.StartupTimeout, DreamDaemonRights.SetStartupTimeout)
-
214 || CheckModified(x => x.HealthCheckSeconds, DreamDaemonRights.SetHealthCheckInterval)
-
215 || CheckModified(x => x.DumpOnHealthCheckRestart, DreamDaemonRights.CreateDump)
-
216 || CheckModified(x => x.TopicRequestTimeout, DreamDaemonRights.SetTopicTimeout)
-
217 || CheckModified(x => x.AdditionalParameters, DreamDaemonRights.SetAdditionalParameters)
-
218 || CheckModified(x => x.StartProfiler, DreamDaemonRights.SetProfiler)
-
219 || CheckModified(x => x.LogOutput, DreamDaemonRights.SetLogOutput)
-
220 || CheckModified(x => x.MapThreads, DreamDaemonRights.SetMapThreads))
-
221 return Forbid();
-
222
-
223 return await WithComponentInstance(
-
224 async instance =>
-
225 {
-
226 var watchdog = instance.Watchdog;
-
227 if (!String.IsNullOrWhiteSpace(model.BroadcastMessage)
-
228 && !await watchdog.Broadcast(model.BroadcastMessage, cancellationToken))
-
229 return Conflict(new ErrorMessageResponse(ErrorCode.BroadcastFailure));
-
230
-
231 await DatabaseContext.Save(cancellationToken);
-
232
-
233 // run this second because current may be modified by it
-
234 // slight race condition with request cancellation, but I CANNOT be assed right now
-
235 var rebootRequired = await watchdog.ChangeSettings(current, cancellationToken);
-
236
-
237 var rebootState = watchdog.RebootState;
-
238 var oldSoftRestart = rebootState == RebootState.Restart;
-
239 var oldSoftShutdown = rebootState == RebootState.Shutdown;
-
240 if (!oldSoftRestart && model.SoftRestart == true && watchdog.Status == WatchdogStatus.Online)
-
241 await watchdog.Restart(true, cancellationToken);
-
242 else if (!oldSoftShutdown && model.SoftShutdown == true)
-
243 await watchdog.Terminate(true, cancellationToken);
-
244 else if ((oldSoftRestart && model.SoftRestart == false) || (oldSoftShutdown && model.SoftShutdown == false))
-
245 await watchdog.ResetRebootState(cancellationToken);
-
246
-
247 return await ReadImpl(current, rebootRequired, cancellationToken);
-
248 });
-
249 }
+
194 bool CheckModified<T>(Expression<Func<Api.Models.Internal.DreamDaemonSettings, T>> expression, DreamDaemonRights requiredRight)
+
195 {
+
196 var memberSelectorExpression = (MemberExpression)expression.Body;
+
197 var property = (PropertyInfo)memberSelectorExpression.Member;
+
198
+
199 var newVal = property.GetValue(model);
+
200 if (newVal == null)
+
201 return false;
+
202 if (!userRights.HasFlag(requiredRight) && property.GetValue(current) != newVal)
+
203 return true;
+
204
+
205 property.SetValue(current, newVal);
+
206 return false;
+
207 }
+
208
+
209 var ddRights = InstancePermissionSet.DreamDaemonRights!.Value;
+
210 if (CheckModified(x => x.AllowWebClient, DreamDaemonRights.SetWebClient)
+
211 || CheckModified(x => x.AutoStart, DreamDaemonRights.SetAutoStart)
+
212 || CheckModified(x => x.Port, DreamDaemonRights.SetPort)
+
213 || CheckModified(x => x.SecurityLevel, DreamDaemonRights.SetSecurity)
+
214 || CheckModified(x => x.Visibility, DreamDaemonRights.SetVisibility)
+
215 || (model.SoftRestart.HasValue && !ddRights.HasFlag(DreamDaemonRights.SoftRestart))
+
216 || (model.SoftShutdown.HasValue && !ddRights.HasFlag(DreamDaemonRights.SoftShutdown))
+
217 || (!String.IsNullOrWhiteSpace(model.BroadcastMessage) && !ddRights.HasFlag(DreamDaemonRights.BroadcastMessage))
+
218 || CheckModified(x => x.StartupTimeout, DreamDaemonRights.SetStartupTimeout)
+
219 || CheckModified(x => x.HealthCheckSeconds, DreamDaemonRights.SetHealthCheckInterval)
+
220 || CheckModified(x => x.DumpOnHealthCheckRestart, DreamDaemonRights.CreateDump)
+
221 || CheckModified(x => x.TopicRequestTimeout, DreamDaemonRights.SetTopicTimeout)
+
222 || CheckModified(x => x.AdditionalParameters, DreamDaemonRights.SetAdditionalParameters)
+
223 || CheckModified(x => x.StartProfiler, DreamDaemonRights.SetProfiler)
+
224 || CheckModified(x => x.LogOutput, DreamDaemonRights.SetLogOutput)
+
225 || CheckModified(x => x.MapThreads, DreamDaemonRights.SetMapThreads))
+
226 return Forbid();
+
227
+
228 return await WithComponentInstance(
+
229 async instance =>
+
230 {
+
231 var watchdog = instance.Watchdog;
+
232 if (!String.IsNullOrWhiteSpace(model.BroadcastMessage)
+
233 && !await watchdog.Broadcast(model.BroadcastMessage, cancellationToken))
+
234 return Conflict(new ErrorMessageResponse(ErrorCode.BroadcastFailure));
+
235
+
236 await DatabaseContext.Save(cancellationToken);
+
237
+
238 // run this second because current may be modified by it
+
239 // slight race condition with request cancellation, but I CANNOT be assed right now
+
240 var rebootRequired = await watchdog.ChangeSettings(current, cancellationToken);
+
241
+
242 var rebootState = watchdog.RebootState;
+
243 var oldSoftRestart = rebootState == RebootState.Restart;
+
244 var oldSoftShutdown = rebootState == RebootState.Shutdown;
+
245 if (!oldSoftRestart && model.SoftRestart == true && watchdog.Status == WatchdogStatus.Online)
+
246 await watchdog.Restart(true, cancellationToken);
+
247 else if (!oldSoftShutdown && model.SoftShutdown == true)
+
248 await watchdog.Terminate(true, cancellationToken);
+
249 else if ((oldSoftRestart && model.SoftRestart == false) || (oldSoftShutdown && model.SoftShutdown == false))
+
250 await watchdog.ResetRebootState(cancellationToken);
+
251
+
252 return await ReadImpl(current, rebootRequired, cancellationToken);
+
253 });
+
254 }
virtual ? long Id
The ID of the entity.
Definition: EntityId.cs:13
Metadata about a server instance.
Definition: Instance.cs:9
bool? SoftShutdown
If the server is undergoing a soft shutdown.
@@ -755,6 +760,7 @@

DreamDaemonRights? DreamDaemonRights
The Rights.DreamDaemonRights of the InstancePermissionSet.
string? BroadcastMessage
A string to send to the running server's DMAPI for broadcasting. How this is displayed is up to how t...
Represents an error message returned by the server.
+
ILogger< ApiController > Logger
The ILogger for the ApiController.
async ValueTask< IActionResult > WithComponentInstance(Func< IInstanceCore, ValueTask< IActionResult > > action, Models.Instance? instance=null)
Run a given action with the relevant IInstance.
ValueTask< IActionResult > ReadImpl(DreamDaemonSettings? settings, bool knownForcedReboot, CancellationToken cancellationToken)
Implementation of Read(CancellationToken).
Backend abstract implementation of IDatabaseContext.
@@ -770,7 +776,7 @@

DreamDaemonRights
Rights for managing DreamDaemon.
RebootState
Represents the action to take when /world/Reboot() is called.
Definition: RebootState.cs:7
-

References Tgstation.Server.Api.Models.Internal.InstancePermissionSet.DreamDaemonRights, Tgstation.Server.Host.Utils.IPortAllocator.GetAvailablePort(), Tgstation.Server.Host.Security.AuthenticationContext.GetRight(), Tgstation.Server.Api.Models.EntityId.Id, Tgstation.Server.Host.Database.DatabaseContext.Instances, Tgstation.Server.Host.Controllers.DreamDaemonController.portAllocator, Tgstation.Server.Host.Controllers.DreamDaemonController.ReadImpl(), Tgstation.Server.Host.Database.DatabaseContext.Save(), and Tgstation.Server.Host.Controllers.ComponentInterfacingController.WithComponentInstance().

+

References Tgstation.Server.Api.Models.Internal.InstancePermissionSet.DreamDaemonRights, Tgstation.Server.Host.Utils.IPortAllocator.GetAvailablePort(), Tgstation.Server.Host.Security.AuthenticationContext.GetRight(), Tgstation.Server.Api.Models.EntityId.Id, Tgstation.Server.Host.Database.DatabaseContext.Instances, Tgstation.Server.Host.Controllers.ApiController.Logger, Tgstation.Server.Host.Controllers.DreamDaemonController.portAllocator, Tgstation.Server.Host.Controllers.DreamDaemonController.ReadImpl(), Tgstation.Server.Host.Database.DatabaseContext.Save(), and Tgstation.Server.Host.Controllers.ComponentInterfacingController.WithComponentInstance().

Here is the call graph for this function:
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_dream_maker_controller.html b/class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_dream_maker_controller.html index d8302150832..2a9e6be9eb2 100644 --- a/class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_dream_maker_controller.html +++ b/class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_dream_maker_controller.html @@ -676,7 +676,7 @@

References Tgstation.Server.Host.Database.DatabaseContext.DreamMakerSettings, and Tgstation.Server.Api.Models.EntityId.Id.

-

Referenced by Tgstation.Server.Host.Controllers.DreamMakerController.Update().

+

Referenced by Tgstation.Server.Host.Controllers.DreamMakerController.Update().

Here is the caller graph for this function:
@@ -726,79 +726,84 @@

Returns
A ValueTask<TResult> resulting in the IActionResult of the request.

<response code="200">Changes applied successfully. The updated DreamMakerSettings will be returned.</response> <response code="204">Changes applied successfully. The updated DreamMakerSettings will be not be returned due to permissions.</response> <response code="410">The database entity for the requested instance could not be retrieved. The instance was likely detached.</response>

-

Definition at line 178 of file DreamMakerController.cs.

-
179 {
-
180 ArgumentNullException.ThrowIfNull(model);
-
181
-
182 if (model.ApiValidationPort == 0)
-
183 throw new InvalidOperationException("ApiValidationPort cannot be 0!");
-
184
-
185 var hostModel = await DatabaseContext
- -
187 .AsQueryable()
-
188 .Where(x => x.InstanceId == Instance.Id)
-
189 .FirstOrDefaultAsync(cancellationToken);
-
190 if (hostModel == null)
-
191 return this.Gone();
-
192
-
193 var dreamMakerRights = InstancePermissionSet.DreamMakerRights!.Value;
-
194 if (model.ProjectName != null)
-
195 {
-
196 if (!dreamMakerRights.HasFlag(DreamMakerRights.SetDme))
-
197 return Forbid();
-
198 if (model.ProjectName.Length == 0)
-
199 hostModel.ProjectName = null;
-
200 else
-
201 hostModel.ProjectName = model.ProjectName;
-
202 }
-
203
-
204 if (model.ApiValidationPort.HasValue)
-
205 {
-
206 if (!dreamMakerRights.HasFlag(DreamMakerRights.SetApiValidationPort))
-
207 return Forbid();
-
208
-
209 if (model.ApiValidationPort.Value != hostModel.ApiValidationPort!.Value)
-
210 {
-
211 var verifiedPort = await portAllocator
- -
213 model.ApiValidationPort.Value,
-
214 true,
-
215 cancellationToken);
-
216 if (verifiedPort != model.ApiValidationPort)
-
217 return Conflict(new ErrorMessageResponse(ErrorCode.PortNotAvailable));
-
218
-
219 hostModel.ApiValidationPort = model.ApiValidationPort;
-
220 }
-
221 }
-
222
-
223 if (model.ApiValidationSecurityLevel.HasValue)
-
224 {
-
225 if (!dreamMakerRights.HasFlag(DreamMakerRights.SetSecurityLevel))
-
226 return Forbid();
-
227 hostModel.ApiValidationSecurityLevel = model.ApiValidationSecurityLevel;
-
228 }
-
229
-
230 if (model.RequireDMApiValidation.HasValue)
-
231 {
-
232 if (!dreamMakerRights.HasFlag(DreamMakerRights.SetApiValidationRequirement))
-
233 return Forbid();
-
234 hostModel.RequireDMApiValidation = model.RequireDMApiValidation;
-
235 }
-
236
-
237 if (model.Timeout.HasValue)
-
238 {
-
239 if (!dreamMakerRights.HasFlag(DreamMakerRights.SetTimeout))
-
240 return Forbid();
-
241 hostModel.Timeout = model.Timeout;
-
242 }
-
243
-
244 await DatabaseContext.Save(cancellationToken);
-
245
-
246 if (!dreamMakerRights.HasFlag(DreamMakerRights.Read))
-
247 return NoContent();
-
248
-
249 return await Read(cancellationToken);
-
250 }
+

Definition at line 179 of file DreamMakerController.cs.

+
180 {
+
181 ArgumentNullException.ThrowIfNull(model);
+
182
+
183 if (model.ApiValidationPort == 0)
+
184 throw new InvalidOperationException("ApiValidationPort cannot be 0!");
+
185
+
186 var hostModel = await DatabaseContext
+ +
188 .AsQueryable()
+
189 .Where(x => x.InstanceId == Instance.Id)
+
190 .FirstOrDefaultAsync(cancellationToken);
+
191 if (hostModel == null)
+
192 return this.Gone();
+
193
+
194 var dreamMakerRights = InstancePermissionSet.DreamMakerRights!.Value;
+
195 if (model.ProjectName != null)
+
196 {
+
197 if (!dreamMakerRights.HasFlag(DreamMakerRights.SetDme))
+
198 return Forbid();
+
199 if (model.ProjectName.Length == 0)
+
200 hostModel.ProjectName = null;
+
201 else
+
202 hostModel.ProjectName = model.ProjectName;
+
203 }
+
204
+
205 if (model.ApiValidationPort.HasValue)
+
206 {
+
207 if (!dreamMakerRights.HasFlag(DreamMakerRights.SetApiValidationPort))
+
208 return Forbid();
+
209
+
210 if (model.ApiValidationPort.Value != hostModel.ApiValidationPort!.Value)
+
211 {
+
212 Logger.LogTrace(
+
213 "Triggering port allocator for DM-I:{instanceId} because model port {modelPort} doesn't match DB port {dbPort}...",
+
214 Instance.Id,
+
215 model.ApiValidationPort,
+
216 hostModel.ApiValidationPort);
+
217 var verifiedPort = await portAllocator
+ +
219 model.ApiValidationPort.Value,
+
220 true,
+
221 cancellationToken);
+
222 if (verifiedPort != model.ApiValidationPort)
+
223 return Conflict(new ErrorMessageResponse(ErrorCode.PortNotAvailable));
+
224
+
225 hostModel.ApiValidationPort = model.ApiValidationPort;
+
226 }
+
227 }
+
228
+
229 if (model.ApiValidationSecurityLevel.HasValue)
+
230 {
+
231 if (!dreamMakerRights.HasFlag(DreamMakerRights.SetSecurityLevel))
+
232 return Forbid();
+
233 hostModel.ApiValidationSecurityLevel = model.ApiValidationSecurityLevel;
+
234 }
+
235
+
236 if (model.RequireDMApiValidation.HasValue)
+
237 {
+
238 if (!dreamMakerRights.HasFlag(DreamMakerRights.SetApiValidationRequirement))
+
239 return Forbid();
+
240 hostModel.RequireDMApiValidation = model.RequireDMApiValidation;
+
241 }
+
242
+
243 if (model.Timeout.HasValue)
+
244 {
+
245 if (!dreamMakerRights.HasFlag(DreamMakerRights.SetTimeout))
+
246 return Forbid();
+
247 hostModel.Timeout = model.Timeout;
+
248 }
+
249
+
250 await DatabaseContext.Save(cancellationToken);
+
251
+
252 if (!dreamMakerRights.HasFlag(DreamMakerRights.Read))
+
253 return NoContent();
+
254
+
255 return await Read(cancellationToken);
+
256 }
ushort? ApiValidationPort
The port used during compilation to validate the DMAPI.
string? ProjectName
The name of the .dme file the server tries to compile with without the extension.
DreamDaemonSecurity? ApiValidationSecurityLevel
The DreamDaemonSecurity level used to validate the DMAPI.
@@ -806,13 +811,14 @@

TimeSpan? Timeout
Amount of time before an in-progress deployment is cancelled.

DreamMakerRights? DreamMakerRights
The Rights.DreamMakerRights of the InstancePermissionSet.
Represents an error message returned by the server.
+
ILogger< ApiController > Logger
The ILogger for the ApiController.
async ValueTask< IActionResult > Read(CancellationToken cancellationToken)
Read current deployment settings.
Task Save(CancellationToken cancellationToken)
Saves changes made to the IDatabaseContext. A Task representing the running operation.
ValueTask< ushort?> GetAvailablePort(ushort basePort, bool checkOne, CancellationToken cancellationToken)
Gets a port not currently in use by TGS.
ErrorCode
Types of Response.ErrorMessageResponses that the API may return.
Definition: ErrorCode.cs:13
-

References Tgstation.Server.Api.Models.Internal.InstancePermissionSet.DreamMakerRights, Tgstation.Server.Host.Database.DatabaseContext.DreamMakerSettings, Tgstation.Server.Host.Utils.IPortAllocator.GetAvailablePort(), Tgstation.Server.Api.Models.EntityId.Id, Tgstation.Server.Host.Controllers.DreamMakerController.portAllocator, Tgstation.Server.Host.Controllers.DreamMakerController.Read(), and Tgstation.Server.Host.Database.DatabaseContext.Save().

+

References Tgstation.Server.Api.Models.Internal.InstancePermissionSet.DreamMakerRights, Tgstation.Server.Host.Database.DatabaseContext.DreamMakerSettings, Tgstation.Server.Host.Utils.IPortAllocator.GetAvailablePort(), Tgstation.Server.Api.Models.EntityId.Id, Tgstation.Server.Host.Controllers.ApiController.Logger, Tgstation.Server.Host.Controllers.DreamMakerController.portAllocator, Tgstation.Server.Host.Controllers.DreamMakerController.Read(), and Tgstation.Server.Host.Database.DatabaseContext.Save().

Here is the call graph for this function:

diff --git a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_database_context.html b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_database_context.html index 48294bd4f90..581561cdbfd 100644 --- a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_database_context.html +++ b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_database_context.html @@ -781,7 +781,7 @@

Tgstation.Server.Host.Database.IDatabaseContext.

-

Referenced by Tgstation.Server.Host.Controllers.ChatController.Create(), Tgstation.Server.Host.Controllers.InstancePermissionSetController.Create(), Tgstation.Server.Host.Controllers.RepositoryController.Create(), Tgstation.Server.Host.Controllers.UserController.Create(), Tgstation.Server.Host.Controllers.UserGroupController.Create(), Tgstation.Server.Host.Controllers.ApiRootController.CreateToken(), Tgstation.Server.Host.Controllers.RepositoryController.Delete(), Tgstation.Server.Host.Controllers.InstanceController.Delete(), Tgstation.Server.Host.Controllers.InstanceController.GetId(), Tgstation.Server.Host.Controllers.InstanceController.GrantPermissions(), Tgstation.Server.Host.Controllers.InstanceController.List(), Tgstation.Server.Host.Controllers.RepositoryController.Read(), Tgstation.Server.Host.Controllers.ChatController.Update(), Tgstation.Server.Host.Controllers.DreamDaemonController.Update(), Tgstation.Server.Host.Controllers.DreamMakerController.Update(), Tgstation.Server.Host.Controllers.InstancePermissionSetController.Update(), Tgstation.Server.Host.Controllers.InstanceController.Update(), Tgstation.Server.Host.Controllers.RepositoryController.Update(), Tgstation.Server.Host.Controllers.UserGroupController.Update(), Tgstation.Server.Host.Controllers.UserController.Update(), and Tgstation.Server.Host.Controllers.ComponentInterfacingController.ValidateRequest().

+

Referenced by Tgstation.Server.Host.Controllers.ChatController.Create(), Tgstation.Server.Host.Controllers.InstancePermissionSetController.Create(), Tgstation.Server.Host.Controllers.RepositoryController.Create(), Tgstation.Server.Host.Controllers.UserController.Create(), Tgstation.Server.Host.Controllers.UserGroupController.Create(), Tgstation.Server.Host.Controllers.ApiRootController.CreateToken(), Tgstation.Server.Host.Controllers.RepositoryController.Delete(), Tgstation.Server.Host.Controllers.InstanceController.Delete(), Tgstation.Server.Host.Controllers.InstanceController.GetId(), Tgstation.Server.Host.Controllers.InstanceController.GrantPermissions(), Tgstation.Server.Host.Controllers.InstanceController.List(), Tgstation.Server.Host.Controllers.RepositoryController.Read(), Tgstation.Server.Host.Controllers.ChatController.Update(), Tgstation.Server.Host.Controllers.DreamDaemonController.Update(), Tgstation.Server.Host.Controllers.DreamMakerController.Update(), Tgstation.Server.Host.Controllers.InstancePermissionSetController.Update(), Tgstation.Server.Host.Controllers.InstanceController.Update(), Tgstation.Server.Host.Controllers.RepositoryController.Update(), Tgstation.Server.Host.Controllers.UserGroupController.Update(), Tgstation.Server.Host.Controllers.UserController.Update(), and Tgstation.Server.Host.Controllers.ComponentInterfacingController.ValidateRequest().

Here is the caller graph for this function:

diff --git a/interface_tgstation_1_1_server_1_1_host_1_1_utils_1_1_i_port_allocator.html b/interface_tgstation_1_1_server_1_1_host_1_1_utils_1_1_i_port_allocator.html index 10ab4f96a72..7a779a26244 100644 --- a/interface_tgstation_1_1_server_1_1_host_1_1_utils_1_1_i_port_allocator.html +++ b/interface_tgstation_1_1_server_1_1_host_1_1_utils_1_1_i_port_allocator.html @@ -149,7 +149,7 @@

Tgstation.Server.Host.Utils.PortAllocator.

-

Referenced by Tgstation.Server.Host.Controllers.DreamDaemonController.Update(), and Tgstation.Server.Host.Controllers.DreamMakerController.Update().

+

Referenced by Tgstation.Server.Host.Controllers.DreamDaemonController.Update(), and Tgstation.Server.Host.Controllers.DreamMakerController.Update().

Here is the caller graph for this function: