scalar Base64 scalar Date scalar Email scalar KeyID scalar PhoneNumber scalar Time scalar TokenID scalar UserID enum Unit { Unit Unit2 } type PGPKey { id: KeyID! pgpKeyData: Base64! expires: Time uploaded: Time! comment: String! } type Token { id: TokenID! name: String tokenData: String! comment: String! issued: Time! expires: Time permissions: String! } type User { id: UserID! email: Email pendingEmail: Email name: String! nickname: String! phoneNumber: PhoneNumber! birthdate: Date! homeplace: String! registered: Time! accepted: Time permissions: String! isMember: Boolean! application: String! tokens: [Token!]! keys: [PGPKey!]! primaryKey: PGPKey } type Query { users: [User!]! user(id: UserID): User applications: [User!]! permissions: String! } type Mutation { apply(email: Email!, phoneNumber: PhoneNumber!, password: String!, name: String!, nickname: String, birthdate: Date!, homeplace: String!, application: String!): User! verifyEmail(secret: String!): Boolean! resendVerificationEmail(user: UserID): Unit! update(email: Email, phoneNumber: PhoneNumber, password: String, name: String, nickname: String, homeplace: String, application: String, user: UserID): User! newToken(comment: String, name: String, permissions: String): Token! newKey(comment: String, keyData: Base64!, expires: Time): PGPKey! accept(user: UserID!): Unit! reject(user: UserID!): Unit! }