Table of Contents

Class MachineController

Namespace
DuetWebServer.Controllers
Assembly
DuetWebServer.dll

MVC Controller for /machine requests

[ApiController]
[Authorize(Policy = "readOnly")]
[Route("[controller]")]
public class MachineController : ControllerBase
Inheritance
MachineController
Inherited Members

Remarks

Create a new controller instance

Constructors

MachineController(IConfiguration, ILogger<MachineController>, IHostApplicationLifetime)

MVC Controller for /machine requests

public MachineController(IConfiguration configuration, ILogger<MachineController> logger, IHostApplicationLifetime applicationLifetime)

Parameters

configuration IConfiguration

Launch configuration

logger ILogger<MachineController>

Logger instance

applicationLifetime IHostApplicationLifetime

Application lifecycle instance

Remarks

Create a new controller instance

Methods

Connect(string?, ISessionStorage)

GET /machine/connect Check the password and register a new session on success

[AllowAnonymous]
[HttpGet("connect")]
public Task<IActionResult> Connect(string? password, ISessionStorage sessionStorage)

Parameters

password string

Password to check

sessionStorage ISessionStorage

Session storage singleton

Returns

Task<IActionResult>

HTTP status code: (200) Session key (403) Forbidden (500) Generic error (502) Incompatible DCS version (503) DCS is unavailable

CreateDirectory(string)

PUT /machine/directory/{directory} Create the given directory.

[Authorize(Policy = "readWrite")]
[HttpPut("directory/{*directory}")]
public Task<IActionResult> CreateDirectory(string directory)

Parameters

directory string

Directory to create

Returns

Task<IActionResult>

HTTP status code: (204) Directory created (500) Generic error (502) Incompatible DCS version (503) DCS is unavailable

DeleteFileOrDirectory(string, bool)

DELETE /machine/file/{filename} Delete the given file or directory.

[Authorize(Policy = "readWrite")]
[HttpDelete("file/{*filename}")]
public Task<IActionResult> DeleteFileOrDirectory(string filename, bool recursive = false)

Parameters

filename string

File or directory to delete

recursive bool

Whether the directory shall be deleted recursively

Returns

Task<IActionResult>

HTTP status code: (204) File or directory deleted (404) File not found (500) Generic error (502) Incompatible DCS version (503) DCS is unavailable

Disconnect(ISessionStorage)

GET /machine/disconnect Remove the current HTTP session again

[AllowAnonymous]
[HttpGet("disconnect")]
public Task<IActionResult> Disconnect(ISessionStorage sessionStorage)

Parameters

sessionStorage ISessionStorage

Session storage singleton

Returns

Task<IActionResult>

HTTP status code: (204) No Content (500) Generic error (502) Incompatible DCS version (503) DCS is unavailable

DoCode(ISessionStorage, bool)

POST /machine/code Execute plain G/M/T-code(s) from the request body and return the G-code response when done.

[HttpPost("code")]
[Authorize(Policy = "readWrite")]
public Task<IActionResult> DoCode(ISessionStorage sessionStorage, bool async = false)

Parameters

sessionStorage ISessionStorage

Session storage singleton

async bool

Execute code asynchronously (don't wait for a code result)

Returns

Task<IActionResult>

HTTP status code: (200) G-Code response as text/plain (500) Generic error (502) Incompatible DCS version (503) DCS is unavailable

DownloadFile(string)

GET /machine/file/{filename} Download the specified file.

[HttpGet("file/{*filename}")]
public Task<IActionResult> DownloadFile(string filename)

Parameters

filename string

File to download

Returns

Task<IActionResult>

HTTP status code: (200) File content (404) File not found (500) Generic error (502) Incompatible DCS version (503) DCS is unavailable

GetFileInfo(string, bool)

GET /machine/fileinfo/{filename}?readThumbnailContent=true/false Parse a given G-code file and return information about this job file as a JSON object.

[HttpGet("fileinfo/{*filename}")]
public Task<IActionResult> GetFileInfo(string filename, bool readThumbnailContent = false)

Parameters

filename string

G-code file to analyze

readThumbnailContent bool

Whether thumbnail content may be read

Returns

Task<IActionResult>

HTTP status code: (200) File info as application/json (404) File not found (500) Generic error (502) Incompatible DCS (503) DCS is unavailable

GetFileList(string?)

GET /machine/directory/{directory} Get a file list of the specified directory

[HttpGet("directory/{*directory}")]
public Task<IActionResult> GetFileList(string? directory)

Parameters

directory string

Directory to query

Returns

Task<IActionResult>

HTTP status code: (200) File list as application/json (404) Directory not found (500) Generic error (502) Incompatible DCS version (503) DCS is unavailable

InstallPlugin(ISessionStorage)

PUT /machine/plugin Install or upgrade a plugin ZIP file

[Authorize(Policy = "readWrite")]
[DisableRequestSizeLimit]
[HttpPut("plugin")]
public Task<IActionResult> InstallPlugin(ISessionStorage sessionStorage)

Parameters

sessionStorage ISessionStorage

Session storage singleton

Returns

Task<IActionResult>

HTTP status code: (204) No content (500) Generic error occurred (502) Incompatible DCS version (503) DCS is unavailable

InstallSystemPackage(ISessionStorage)

PUT /machine/systemPackage Install or upgrade a system package

[Authorize(Policy = "readWrite")]
[DisableRequestSizeLimit]
[HttpPut("systemPackage")]
public Task<IActionResult> InstallSystemPackage(ISessionStorage sessionStorage)

Parameters

sessionStorage ISessionStorage

Session storage singleton

Returns

Task<IActionResult>

HTTP status code: (204) No content (500) Generic error occurred (502) Incompatible DCS version (503) DCS is unavailable

Model()

GET /machine/model

  • and - GET /machine/status Retrieve the full object model as JSON.
[HttpGet("model")]
[HttpGet("status")]
public Task<IActionResult> Model()

Returns

Task<IActionResult>

HTTP status code: (200) Object model as application/json (500) Generic error (502) Incompatible DCS version (503) DCS is unavailable

MoveFileOrDirectory(string, string, bool)

Move a file or directory from a to b

[Authorize(Policy = "readWrite")]
[HttpPost("file/move")]
public Task<IActionResult> MoveFileOrDirectory(string from, string to, bool force = false)

Parameters

from string

Source path

to string

Destination path

force bool

Delete existing file (optional, default false)

Returns

Task<IActionResult>

HTTP status code: (204) File or directory moved (404) File or directory not found (500) Generic error (502) Incompatible DCS version (503) DCS is unavailable

Noop()

GET /machine/noop Do nothing. May be used to ping the machine or to keep the HTTP session alive

[HttpGet("noop")]
public IActionResult Noop()

Returns

IActionResult

HTTP status code: (204) No Content

SetPluginData()

PATCH /machine/plugin Set plugin data in the object model if there is no SBC executable.

[Authorize(Policy = "readWrite")]
[DisableRequestSizeLimit]
[HttpPatch("plugin")]
public Task<IActionResult> SetPluginData()

Returns

Task<IActionResult>

HTTP status code: (204) No content (500) Generic error occurred (502) Incompatible DCS version (503) DCS is unavailable

StartPlugin()

POST /machine/startPlugin Start a plugin on the SBC

[Authorize(Policy = "readWrite")]
[HttpPost("startPlugin")]
public Task<IActionResult> StartPlugin()

Returns

Task<IActionResult>

HTTP status code: (204) No content (500) Generic error occurred (502) Incompatible DCS version (503) DCS is unavailable

StopPlugin()

POST /machine/stopPlugin Stop a plugin on the SBC

[Authorize(Policy = "readWrite")]
[HttpPost("stopPlugin")]
public Task<IActionResult> StopPlugin()

Returns

Task<IActionResult>

HTTP status code: (204) No content (500) Generic error occurred (502) Incompatible DCS version (503) DCS is unavailable

UninstallPlugin(ISessionStorage)

DELETE /machine/plugin Uninstall a plugin

[Authorize(Policy = "readWrite")]
[HttpDelete("plugin")]
public Task<IActionResult> UninstallPlugin(ISessionStorage sessionStorage)

Parameters

sessionStorage ISessionStorage

Session storage singleton

Returns

Task<IActionResult>

HTTP status code: (204) No content (500) Generic error occurred (502) Incompatible DCS version (503) DCS is unavailable

UninstallSystemPackage(ISessionStorage)

DELETE /machine/systemPackage Uninstall a system package

[Authorize(Policy = "readWrite")]
[HttpDelete("systemPackage")]
public Task<IActionResult> UninstallSystemPackage(ISessionStorage sessionStorage)

Parameters

sessionStorage ISessionStorage

Session storage singleton

Returns

Task<IActionResult>

HTTP status code: (204) No content (500) Generic error occurred (502) Incompatible DCS version (503) DCS is unavailable

UploadFile(string, DateTime?, ISessionStorage)

PUT /machine/file/{filename}?timeModified={timeModified} Upload a file from the HTTP body and create the subdirectories if necessary

[Authorize(Policy = "readWrite")]
[DisableRequestSizeLimit]
[HttpPut("file/{*filename}")]
public Task<IActionResult> UploadFile(string filename, DateTime? timeModified, ISessionStorage sessionStorage)

Parameters

filename string

Destination of the file to upload

timeModified DateTime?

Optional time indicating when the file was last modified

sessionStorage ISessionStorage

Session storage singleton

Returns

Task<IActionResult>

HTTP status code: (201) File created (500) Generic error occurred (502) Incompatible DCS version (503) DCS is unavailable