Documentation
¶
Overview ¶
Package app is glabs-web's core: the layer the GraphQL resolvers delegate to, holding the database and enforcing that every request acts only as its own user. Resolvers stay thin — auth gate plus a call into here — so the rules live in one place rather than scattered across the schema.
Index ¶
- type App
- func (a *App) Assignment(ctx context.Context, course, name string) (*AssignmentView, error)
- func (a *App) Course(ctx context.Context, name string) (*db.StoredCourse, error)
- func (a *App) CourseLint(ctx context.Context, name string) ([]config.Finding, error)
- func (a *App) CourseYAML(ctx context.Context, name string) ([]byte, error)
- func (a *App) Courses(ctx context.Context) ([]*db.StoredCourse, error)
- func (a *App) DeleteCourse(ctx context.Context, name string) error
- func (a *App) GetUserByEmail(ctx context.Context, email string) (*model.User, error)
- func (a *App) GitLabTokenStatus(ctx context.Context) (*GitLabTokenStatus, error)
- func (a *App) ImportCourseYAML(ctx context.Context, yaml string) (*db.StoredCourse, error)
- func (a *App) LocalDevUser() *model.User
- func (a *App) RemoveGitLabToken(ctx context.Context) (*GitLabTokenStatus, error)
- func (a *App) ServerInfo() *model.ServerInfo
- func (a *App) SetGitLabToken(ctx context.Context, token string) (*GitLabTokenStatus, error)
- type AssignmentView
- type FieldKind
- type FieldMeta
- type FieldOption
- type FieldValue
- type GitLabTokenStatus
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type App ¶
type App struct {
// contains filtered or unexported fields
}
func (*App) Assignment ¶ added in v3.4.0
Assignment returns the source values and resolved preview for one assignment of one of the caller's own courses. It returns nil (no error) when the course exists but has no assignment by that name; ErrCourseNotFound propagates when the course itself is not the caller's.
func (*App) CourseLint ¶ added in v3.2.0
CourseLint returns the lint findings for one of the caller's own courses.
func (*App) CourseYAML ¶ added in v3.2.0
CourseYAML returns the course as a downloadable YAML file: the original bytes if they are still current, otherwise a re-encoding of the stored source.
func (*App) DeleteCourse ¶ added in v3.2.0
DeleteCourse removes one of the caller's own courses.
func (*App) GetUserByEmail ¶
GetUserByEmail looks up a user for the auth middleware's allowlist check.
func (*App) GitLabTokenStatus ¶ added in v3.3.0
func (a *App) GitLabTokenStatus(ctx context.Context) (*GitLabTokenStatus, error)
GitLabTokenStatus reports whether the caller has a stored token, without decrypting or returning it.
func (*App) ImportCourseYAML ¶ added in v3.2.0
ImportCourseYAML parses an uploaded course file and stores it for the caller, keeping the original bytes so a later download returns exactly what was uploaded. Importing a course whose name already exists replaces it.
An inline seeder signKey is rejected: it is a private key, and storing it would mean sealing it, hiding it in GraphQL, and excluding it from dumps — four leaks for a feature no course file uses. signKeyFile (a path) is fine.
func (*App) LocalDevUser ¶
LocalDevUser is the identity used when auth is disabled (local development). It is never consulted when auth is enabled.
func (*App) RemoveGitLabToken ¶ added in v3.3.0
func (a *App) RemoveGitLabToken(ctx context.Context) (*GitLabTokenStatus, error)
RemoveGitLabToken deletes the caller's stored GitLab PAT.
func (*App) ServerInfo ¶
func (a *App) ServerInfo() *model.ServerInfo
ServerInfo returns the build metadata main stashed in viper (ldflags at release, VCS info otherwise), so the GUI can show which build is running.
func (*App) SetGitLabToken ¶ added in v3.3.0
SetGitLabToken stores the caller's GitLab PAT, AES-256-GCM encrypted. Write-only: the token is never returned by any query, and the plaintext is never persisted or logged. Fails closed if no secrets.key is configured.
type AssignmentView ¶ added in v3.4.0
type AssignmentView struct {
Course string
Name string
Extends string
Abstract bool
// Own holds the assignment's own (source) field values, keyed by
// FieldMeta.key, for pre-filling the editor form.
Own []FieldValue
// Resolved is the Show() rendering (may contain ANSI). Empty when the
// assignment cannot be resolved (then ResolveError explains why).
Resolved string
// ResolveError is set when resolution fails — e.g. an abstract base, a
// missing parent, or an `extends` cycle. Not a fault: an abstract base is a
// valid document that simply has no resolved form.
ResolveError string
}
AssignmentView is one assignment in source (own) form plus its resolved preview — the same rendering `glabs show` produces. It makes the inheritance visible in the browser exactly as the CLI's confirmation gate does.
type FieldKind ¶ added in v3.4.0
type FieldKind string
FieldKind is the input shape the GUI should render for a field.
type FieldMeta ¶ added in v3.4.0
type FieldMeta struct {
Key string
Label string
Description string
Kind FieldKind
Required bool
Deprecated bool
Example string
Options []FieldOption
}
FieldMeta describes one editable assignment field.
func AssignmentSchema ¶ added in v3.4.0
func AssignmentSchema() []FieldMeta
AssignmentSchema returns the metadata for the assignment editor's fields.
type FieldOption ¶ added in v3.4.0
FieldOption is one choice of an ENUM field — a dropdown entry with its own short description.
type FieldValue ¶ added in v3.5.0
FieldValue is one field's own (source) value, stringified and keyed by the same key as FieldMeta so the GUI can pre-fill the schema-driven form.
type GitLabTokenStatus ¶ added in v3.3.0
GitLabTokenStatus reports whether the caller has stored a GitLab token and when — never the token itself.