82 lines
1.7 KiB
GraphQL
82 lines
1.7 KiB
GraphQL
schema {
|
|
query: Query
|
|
}
|
|
|
|
type Query {
|
|
users: [User!]!
|
|
}
|
|
|
|
# Hopefully provided by juniper and chrono
|
|
scalar DateTimeUtc
|
|
# else it's probably DateTime
|
|
# scalar DateTime
|
|
|
|
# Provided by juniper and url
|
|
scalar Url
|
|
|
|
type User {
|
|
id: ID!
|
|
userName: String!
|
|
displayName: String
|
|
activated: Boolean!
|
|
created: DateTimeUtc!
|
|
lastOnline: DateTimeUtc
|
|
preferences: UserPreferences!
|
|
}
|
|
|
|
# All account preferences for a single user
|
|
type UserPreferences {
|
|
privacyPreference: PrivacyPreference!
|
|
notificationPreference: NotificationPreference!
|
|
securityPreference: SecurityPreference!
|
|
# TODO: external servers
|
|
externalServersPreference: ExternalServersPreference!
|
|
}
|
|
|
|
type PrivacyPreference {
|
|
# Discovery on other servers
|
|
discovery: RestrictionPolicy!
|
|
discoveryUserLimit: [String!]
|
|
discoveryServerLimit: [Url!]
|
|
|
|
# Last seen online
|
|
lastSeen: RestrictionPolicy!
|
|
lastSeenUserLimit: [String!]
|
|
lastSeenServerLimit: [Url!]
|
|
# For enabled users/servers: Only give vague indications
|
|
# e.g. recently, a long time ago
|
|
lastSeenCourse: Boolean!
|
|
|
|
# Describing informational text regarding the user
|
|
info: RestrictionPolicy!
|
|
infoUserLimit: [String!]
|
|
infoServerLimit: [Url!]
|
|
}
|
|
|
|
type NotificationPreference {
|
|
lockDetails: Boolean!
|
|
doNotDisturb: Boolean!
|
|
}
|
|
|
|
type SecurityPreference {
|
|
# One-purpose-passwords
|
|
accountTokens: [ID!]!
|
|
|
|
# The account's password hash
|
|
passwordHash: String!
|
|
}
|
|
|
|
type ExternalServersPreference {
|
|
privacyPreference: PrivacyPreference
|
|
externalServers: RestrictionPolicy!
|
|
externalServersLimit: [Url!]
|
|
}
|
|
|
|
# Everyone = Including all = Excluding none
|
|
# None = Including none = Excluding all
|
|
enum RestrictionPolicy {
|
|
Everyone
|
|
Excluding
|
|
Including
|
|
None
|
|
} |