From cd5b99d882462e63ef86d12bbccae4715306aa75 Mon Sep 17 00:00:00 2001 From: David Walter Date: Thu, 28 May 2026 09:11:21 +0200 Subject: [PATCH] =?UTF-8?q?docs(ospo):=20community=20health=20rollout=20v2?= =?UTF-8?q?=20=E2=80=94=20README,=20agents.md,=20health=20files?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Introduced by the Kiteworks Open Source Program Office (OSPO) on May 5, 2026. Changes: - README.md: rewritten with OSPO v2 template — license-specific migration guidance, Community & Support section, Contributing workflow, Security section pointing to security.owncloud.com + YesWeHack bug bounty - agents.md: AI agent context file with architecture, build commands, and OSPO Policy Constraints (GitHub Actions, Dependabot, Git Workflow) - CODE_OF_CONDUCT.md: redirect to https://owncloud.com/contribute/code-of-conduct/ - CONTRIBUTING.md: redirect to https://owncloud.com/contribute/ - SECURITY.md: redirect to https://security.owncloud.com + YesWeHack - SUPPORT.md: redirect to https://owncloud.com/contact-us/ + channels OSPO: https://kiteworks.com/opensource Signed-off-by: David Walter --- CODE_OF_CONDUCT.md | 8 ++ CONTRIBUTING.md | 9 ++ README.md | 329 ++++++++------------------------------------- SECURITY.md | 11 ++ SUPPORT.md | 10 ++ agents.md | 56 ++++++++ 6 files changed, 152 insertions(+), 271 deletions(-) create mode 100644 CODE_OF_CONDUCT.md create mode 100644 CONTRIBUTING.md create mode 100644 SECURITY.md create mode 100644 SUPPORT.md create mode 100644 agents.md diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..ce144bf --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,8 @@ +# Code of Conduct + +This project follows the ownCloud Code of Conduct. + +Please read the full Code of Conduct at: +**** + +By participating in this project, you agree to abide by its terms. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..65c9915 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,9 @@ +# Contributing + +Thank you for your interest in contributing to this project! + +Please read the full contributing guidelines at: +**** + +For development setup, coding standards, and pull request process, +see the README in this repository. diff --git a/README.md b/README.md index 8ece75f..3510fff 100644 --- a/README.md +++ b/README.md @@ -1,308 +1,95 @@ -# Go API client for libregraph +# Libre Graph API Go Client -Libre Graph is a free API for cloud collaboration inspired by the MS Graph API. + -## Overview -This API client was generated by the [OpenAPI Generator](https://openapi-generator.tech) project. By using the [OpenAPI-spec](https://www.openapis.org/) from a remote server, you can easily generate an API client. +[![License](https://img.shields.io/badge/License-Apache--2.0-blue.svg)](LICENSE) [![ownCloud OSPO](https://img.shields.io/badge/OSPO-ownCloud-blue)](https://kiteworks.com/opensource) [![Docker Hub](https://img.shields.io/docker/pulls/owncloud)](https://hub.docker.com/r/owncloud/ocis) -- API version: v1.0.4 -- Package version: 1.0.0 -- Generator version: 7.8.0 -- Build package: org.openapitools.codegen.languages.GoClientCodegen +Auto-generated Go client library for the Libre Graph API, produced by the OpenAPI Generator. It provides idiomatic Go types, API method wrappers, and configurable HTTP transport for accessing all Libre Graph endpoints -- including drives, users, groups, education resources, shares, tags, and application role assignments -- used internally by ownCloud Infinite Scale. -## Installation +## Getting Started -Install the following dependencies: +Follow the steps below to install and use the Go client. -```sh -go get github.com/stretchr/testify/assert -go get golang.org/x/net/context +### Installation + +```bash +go get github.com/owncloud/libre-graph-api-go ``` -Put the package under your project folder and add the following in import: +### Usage ```go import libregraph "github.com/owncloud/libre-graph-api-go" -``` -To use a proxy, set the environment variable `HTTP_PROXY`: - -```go -os.Setenv("HTTP_PROXY", "http://proxy_name:proxy_port") +cfg := libregraph.NewConfiguration() +client := libregraph.NewAPIClient(cfg) ``` -## Configuration of Server URL +## Documentation -Default configuration comes with `Servers` field that contains server objects as defined in the OpenAPI specification. +- [Libre Graph API Documentation](https://owncloud.dev/libre-graph-api/) +- [Go Package Documentation](https://pkg.go.dev/github.com/owncloud/libre-graph-api-go) -### Select Server Configuration - -For using other server than the one defined on index 0 set context value `libregraph.ContextServerIndex` of type `int`. - -```go -ctx := context.WithValue(context.Background(), libregraph.ContextServerIndex, 1) -``` +## Part of ownCloud Infinite Scale -### Templated Server URL +This is the Go SDK used internally by [oCIS](https://github.com/owncloud/ocis) to interact with Libre Graph endpoints. It is generated from the [libre-graph-api](https://github.com/owncloud/libre-graph-api) OpenAPI spec. -Templated server URL is formatted using default variables from configuration or from context value `libregraph.ContextServerVariables` of type `map[string]string`. +> **Note:** This library contains generated code. Do not edit the generated files directly; instead modify the OpenAPI spec and regenerate. -```go -ctx := context.WithValue(context.Background(), libregraph.ContextServerVariables, map[string]string{ - "basePath": "v2", -}) -``` +This component is part of the [oCIS Docker image](https://hub.docker.com/r/owncloud/ocis). -Note, enum values are always validated and all unused variables are silently ignored. +## Community & Support -### URLs Configuration per Operation +**[Star](https://github.com/owncloud/libre-graph-api-go)** this repo and **Watch** for release notifications! -Each operation can use different server URL defined using `OperationServers` map in the `Configuration`. -An operation is uniquely identified by `"{classname}Service.{nickname}"` string. -Similar rules for overriding default operation server index and variables applies by using `libregraph.ContextOperationServerIndices` and `libregraph.ContextOperationServerVariables` context maps. +- [ownCloud Website](https://owncloud.com) +- [Community Discussions](https://github.com/orgs/owncloud/discussions) +- [Matrix Chat](https://app.element.io/#/room/#owncloud:matrix.org) +- [Documentation](https://doc.owncloud.com) +- [Enterprise Support](https://owncloud.com/contact-us/) +- [OSPO Home](https://kiteworks.com/opensource) -```go -ctx := context.WithValue(context.Background(), libregraph.ContextOperationServerIndices, map[string]int{ - "{classname}Service.{nickname}": 2, -}) -ctx = context.WithValue(context.Background(), libregraph.ContextOperationServerVariables, map[string]map[string]string{ - "{classname}Service.{nickname}": { - "port": "8443", - }, -}) -``` +## Contributing -## Documentation for API Endpoints - -All URIs are relative to *https://ocis.ocis.rolling.owncloud.works/graph* - -Class | Method | HTTP request | Description ------------- | ------------- | ------------- | ------------- -*ActivitiesApi* | [**GetActivities**](docs/ActivitiesApi.md#getactivities) | **Get** /v1beta1/extensions/org.libregraph/activities | Get activities -*ApplicationsApi* | [**GetApplication**](docs/ApplicationsApi.md#getapplication) | **Get** /v1.0/applications/{application-id} | Get application by id -*ApplicationsApi* | [**ListApplications**](docs/ApplicationsApi.md#listapplications) | **Get** /v1.0/applications | Get all applications -*DriveItemApi* | [**DeleteDriveItem**](docs/DriveItemApi.md#deletedriveitem) | **Delete** /v1beta1/drives/{drive-id}/items/{item-id} | Delete a DriveItem. -*DriveItemApi* | [**GetDriveItem**](docs/DriveItemApi.md#getdriveitem) | **Get** /v1beta1/drives/{drive-id}/items/{item-id} | Get a DriveItem. -*DriveItemApi* | [**UpdateDriveItem**](docs/DriveItemApi.md#updatedriveitem) | **Patch** /v1beta1/drives/{drive-id}/items/{item-id} | Update a DriveItem. -*DrivesApi* | [**CreateDrive**](docs/DrivesApi.md#createdrive) | **Post** /v1.0/drives | Create a new drive of a specific type -*DrivesApi* | [**CreateDriveBeta**](docs/DrivesApi.md#createdrivebeta) | **Post** /v1beta1/drives | Create a new drive of a specific type. Alias for '/v1.0/drives', the difference is that grantedtoV2 is used and roles contain unified roles instead of cs3 roles. -*DrivesApi* | [**DeleteDrive**](docs/DrivesApi.md#deletedrive) | **Delete** /v1.0/drives/{drive-id} | Delete a specific space -*DrivesApi* | [**DeleteDriveBeta**](docs/DrivesApi.md#deletedrivebeta) | **Delete** /v1beta1/drives/{drive-id} | Delete a specific space. Alias for '/v1.0/drives'. -*DrivesApi* | [**GetDrive**](docs/DrivesApi.md#getdrive) | **Get** /v1.0/drives/{drive-id} | Get drive by id -*DrivesApi* | [**GetDriveBeta**](docs/DrivesApi.md#getdrivebeta) | **Get** /v1beta1/drives/{drive-id} | Get drive by id. Alias for '/v1.0/drives', the difference is that grantedtoV2 is used and roles contain unified roles instead of cs3 roles -*DrivesApi* | [**UpdateDrive**](docs/DrivesApi.md#updatedrive) | **Patch** /v1.0/drives/{drive-id} | Update the drive -*DrivesApi* | [**UpdateDriveBeta**](docs/DrivesApi.md#updatedrivebeta) | **Patch** /v1beta1/drives/{drive-id} | Update the drive. Alias for '/v1.0/drives', the difference is that grantedtoV2 is used and roles contain unified roles instead of cs3 roles -*DrivesGetDrivesApi* | [**ListAllDrives**](docs/DrivesGetDrivesApi.md#listalldrives) | **Get** /v1.0/drives | Get all available drives -*DrivesGetDrivesApi* | [**ListAllDrivesBeta**](docs/DrivesGetDrivesApi.md#listalldrivesbeta) | **Get** /v1beta1/drives | Alias for '/v1.0/drives', the difference is that grantedtoV2 is used and roles contain unified roles instead of cs3 roles -*DrivesPermissionsApi* | [**CreateLink**](docs/DrivesPermissionsApi.md#createlink) | **Post** /v1beta1/drives/{drive-id}/items/{item-id}/createLink | Create a sharing link for a DriveItem -*DrivesPermissionsApi* | [**DeletePermission**](docs/DrivesPermissionsApi.md#deletepermission) | **Delete** /v1beta1/drives/{drive-id}/items/{item-id}/permissions/{perm-id} | Remove access to a DriveItem -*DrivesPermissionsApi* | [**GetPermission**](docs/DrivesPermissionsApi.md#getpermission) | **Get** /v1beta1/drives/{drive-id}/items/{item-id}/permissions/{perm-id} | Get sharing permission for a file or folder -*DrivesPermissionsApi* | [**Invite**](docs/DrivesPermissionsApi.md#invite) | **Post** /v1beta1/drives/{drive-id}/items/{item-id}/invite | Send a sharing invitation -*DrivesPermissionsApi* | [**ListPermissions**](docs/DrivesPermissionsApi.md#listpermissions) | **Get** /v1beta1/drives/{drive-id}/items/{item-id}/permissions | List the effective sharing permissions on a driveItem. -*DrivesPermissionsApi* | [**SetPermissionPassword**](docs/DrivesPermissionsApi.md#setpermissionpassword) | **Post** /v1beta1/drives/{drive-id}/items/{item-id}/permissions/{perm-id}/setPassword | Set sharing link password -*DrivesPermissionsApi* | [**UpdatePermission**](docs/DrivesPermissionsApi.md#updatepermission) | **Patch** /v1beta1/drives/{drive-id}/items/{item-id}/permissions/{perm-id} | Update sharing permission -*DrivesRootApi* | [**CreateDriveItem**](docs/DrivesRootApi.md#createdriveitem) | **Post** /v1beta1/drives/{drive-id}/root/children | Create a drive item -*DrivesRootApi* | [**CreateLinkSpaceRoot**](docs/DrivesRootApi.md#createlinkspaceroot) | **Post** /v1beta1/drives/{drive-id}/root/createLink | Create a sharing link for the root item of a Drive -*DrivesRootApi* | [**DeletePermissionSpaceRoot**](docs/DrivesRootApi.md#deletepermissionspaceroot) | **Delete** /v1beta1/drives/{drive-id}/root/permissions/{perm-id} | Remove access to a Drive -*DrivesRootApi* | [**GetPermissionSpaceRoot**](docs/DrivesRootApi.md#getpermissionspaceroot) | **Get** /v1beta1/drives/{drive-id}/root/permissions/{perm-id} | Get a single sharing permission for the root item of a drive -*DrivesRootApi* | [**GetRoot**](docs/DrivesRootApi.md#getroot) | **Get** /v1.0/drives/{drive-id}/root | Get root from arbitrary space -*DrivesRootApi* | [**InviteSpaceRoot**](docs/DrivesRootApi.md#invitespaceroot) | **Post** /v1beta1/drives/{drive-id}/root/invite | Send a sharing invitation -*DrivesRootApi* | [**ListPermissionsSpaceRoot**](docs/DrivesRootApi.md#listpermissionsspaceroot) | **Get** /v1beta1/drives/{drive-id}/root/permissions | List the effective permissions on the root item of a drive. -*DrivesRootApi* | [**SetPermissionPasswordSpaceRoot**](docs/DrivesRootApi.md#setpermissionpasswordspaceroot) | **Post** /v1beta1/drives/{drive-id}/root/permissions/{perm-id}/setPassword | Set sharing link password for the root item of a drive -*DrivesRootApi* | [**UpdatePermissionSpaceRoot**](docs/DrivesRootApi.md#updatepermissionspaceroot) | **Patch** /v1beta1/drives/{drive-id}/root/permissions/{perm-id} | Update sharing permission -*EducationClassApi* | [**AddUserToClass**](docs/EducationClassApi.md#addusertoclass) | **Post** /v1.0/education/classes/{class-id}/members/$ref | Assign a user to a class -*EducationClassApi* | [**CreateClass**](docs/EducationClassApi.md#createclass) | **Post** /v1.0/education/classes | Add new education class -*EducationClassApi* | [**DeleteClass**](docs/EducationClassApi.md#deleteclass) | **Delete** /v1.0/education/classes/{class-id} | Delete education class -*EducationClassApi* | [**DeleteUserFromClass**](docs/EducationClassApi.md#deleteuserfromclass) | **Delete** /v1.0/education/classes/{class-id}/members/{user-id}/$ref | Unassign user from a class -*EducationClassApi* | [**GetClass**](docs/EducationClassApi.md#getclass) | **Get** /v1.0/education/classes/{class-id} | Get class by key -*EducationClassApi* | [**ListClassMembers**](docs/EducationClassApi.md#listclassmembers) | **Get** /v1.0/education/classes/{class-id}/members | Get the educationClass resources owned by an educationSchool -*EducationClassApi* | [**ListClasses**](docs/EducationClassApi.md#listclasses) | **Get** /v1.0/education/classes | list education classes -*EducationClassApi* | [**UpdateClass**](docs/EducationClassApi.md#updateclass) | **Patch** /v1.0/education/classes/{class-id} | Update properties of a education class -*EducationClassTeachersApi* | [**AddTeacherToClass**](docs/EducationClassTeachersApi.md#addteachertoclass) | **Post** /v1.0/education/classes/{class-id}/teachers/$ref | Assign a teacher to a class -*EducationClassTeachersApi* | [**DeleteTeacherFromClass**](docs/EducationClassTeachersApi.md#deleteteacherfromclass) | **Delete** /v1.0/education/classes/{class-id}/teachers/{user-id}/$ref | Unassign user as teacher of a class -*EducationClassTeachersApi* | [**GetTeachers**](docs/EducationClassTeachersApi.md#getteachers) | **Get** /v1.0/education/classes/{class-id}/teachers | Get the teachers for a class -*EducationSchoolApi* | [**AddClassToSchool**](docs/EducationSchoolApi.md#addclasstoschool) | **Post** /v1.0/education/schools/{school-id}/classes/$ref | Assign a class to a school -*EducationSchoolApi* | [**AddUserToSchool**](docs/EducationSchoolApi.md#addusertoschool) | **Post** /v1.0/education/schools/{school-id}/users/$ref | Assign a user to a school -*EducationSchoolApi* | [**CreateSchool**](docs/EducationSchoolApi.md#createschool) | **Post** /v1.0/education/schools | Add new school -*EducationSchoolApi* | [**DeleteClassFromSchool**](docs/EducationSchoolApi.md#deleteclassfromschool) | **Delete** /v1.0/education/schools/{school-id}/classes/{class-id}/$ref | Unassign class from a school -*EducationSchoolApi* | [**DeleteSchool**](docs/EducationSchoolApi.md#deleteschool) | **Delete** /v1.0/education/schools/{school-id} | Delete school -*EducationSchoolApi* | [**DeleteUserFromSchool**](docs/EducationSchoolApi.md#deleteuserfromschool) | **Delete** /v1.0/education/schools/{school-id}/users/{user-id}/$ref | Unassign user from a school -*EducationSchoolApi* | [**GetSchool**](docs/EducationSchoolApi.md#getschool) | **Get** /v1.0/education/schools/{school-id} | Get the properties of a specific school -*EducationSchoolApi* | [**ListSchoolClasses**](docs/EducationSchoolApi.md#listschoolclasses) | **Get** /v1.0/education/schools/{school-id}/classes | Get the educationClass resources owned by an educationSchool -*EducationSchoolApi* | [**ListSchoolUsers**](docs/EducationSchoolApi.md#listschoolusers) | **Get** /v1.0/education/schools/{school-id}/users | Get the educationUser resources associated with an educationSchool -*EducationSchoolApi* | [**ListSchools**](docs/EducationSchoolApi.md#listschools) | **Get** /v1.0/education/schools | Get a list of schools and their properties -*EducationSchoolApi* | [**UpdateSchool**](docs/EducationSchoolApi.md#updateschool) | **Patch** /v1.0/education/schools/{school-id} | Update properties of a school -*EducationUserApi* | [**CreateEducationUser**](docs/EducationUserApi.md#createeducationuser) | **Post** /v1.0/education/users | Add new education user -*EducationUserApi* | [**DeleteEducationUser**](docs/EducationUserApi.md#deleteeducationuser) | **Delete** /v1.0/education/users/{user-id} | Delete educationUser -*EducationUserApi* | [**GetEducationUser**](docs/EducationUserApi.md#geteducationuser) | **Get** /v1.0/education/users/{user-id} | Get properties of educationUser -*EducationUserApi* | [**ListEducationUsers**](docs/EducationUserApi.md#listeducationusers) | **Get** /v1.0/education/users | Get entities from education users -*EducationUserApi* | [**UpdateEducationUser**](docs/EducationUserApi.md#updateeducationuser) | **Patch** /v1.0/education/users/{user-id} | Update properties of educationUser -*GroupApi* | [**AddMember**](docs/GroupApi.md#addmember) | **Post** /v1.0/groups/{group-id}/members/$ref | Add a member to a group -*GroupApi* | [**DeleteGroup**](docs/GroupApi.md#deletegroup) | **Delete** /v1.0/groups/{group-id} | Delete entity from groups -*GroupApi* | [**DeleteMember**](docs/GroupApi.md#deletemember) | **Delete** /v1.0/groups/{group-id}/members/{directory-object-id}/$ref | Delete member from a group -*GroupApi* | [**GetGroup**](docs/GroupApi.md#getgroup) | **Get** /v1.0/groups/{group-id} | Get entity from groups by key -*GroupApi* | [**ListMembers**](docs/GroupApi.md#listmembers) | **Get** /v1.0/groups/{group-id}/members | Get a list of the group's direct members -*GroupApi* | [**UpdateGroup**](docs/GroupApi.md#updategroup) | **Patch** /v1.0/groups/{group-id} | Update entity in groups -*GroupsApi* | [**CreateGroup**](docs/GroupsApi.md#creategroup) | **Post** /v1.0/groups | Add new entity to groups -*GroupsApi* | [**ListGroups**](docs/GroupsApi.md#listgroups) | **Get** /v1.0/groups | Get entities from groups -*MeChangepasswordApi* | [**ChangeOwnPassword**](docs/MeChangepasswordApi.md#changeownpassword) | **Post** /v1.0/me/changePassword | Change your own password -*MeDriveApi* | [**GetHome**](docs/MeDriveApi.md#gethome) | **Get** /v1.0/me/drive | Get personal space for user -*MeDriveApi* | [**ListSharedByMe**](docs/MeDriveApi.md#listsharedbyme) | **Get** /v1beta1/me/drive/sharedByMe | Get a list of driveItem objects shared by the current user. -*MeDriveApi* | [**ListSharedWithMe**](docs/MeDriveApi.md#listsharedwithme) | **Get** /v1beta1/me/drive/sharedWithMe | Get a list of driveItem objects shared with the owner of a drive. -*MeDriveRootApi* | [**HomeGetRoot**](docs/MeDriveRootApi.md#homegetroot) | **Get** /v1.0/me/drive/root | Get root from personal space -*MeDriveRootChildrenApi* | [**HomeGetChildren**](docs/MeDriveRootChildrenApi.md#homegetchildren) | **Get** /v1.0/me/drive/root/children | Get children from drive -*MeDrivesApi* | [**ListMyDrives**](docs/MeDrivesApi.md#listmydrives) | **Get** /v1.0/me/drives | Get all drives where the current user is a regular member of -*MeDrivesApi* | [**ListMyDrivesBeta**](docs/MeDrivesApi.md#listmydrivesbeta) | **Get** /v1beta1/me/drives | Alias for '/v1.0/drives', the difference is that grantedtoV2 is used and roles contain unified roles instead of cs3 roles -*MeUserApi* | [**GetOwnUser**](docs/MeUserApi.md#getownuser) | **Get** /v1.0/me | Get current user -*MeUserApi* | [**UpdateOwnUser**](docs/MeUserApi.md#updateownuser) | **Patch** /v1.0/me | Update the current user -*RoleManagementApi* | [**GetPermissionRoleDefinition**](docs/RoleManagementApi.md#getpermissionroledefinition) | **Get** /v1beta1/roleManagement/permissions/roleDefinitions/{role-id} | Get unifiedRoleDefinition -*RoleManagementApi* | [**ListPermissionRoleDefinitions**](docs/RoleManagementApi.md#listpermissionroledefinitions) | **Get** /v1beta1/roleManagement/permissions/roleDefinitions | List roleDefinitions -*TagsApi* | [**AssignTags**](docs/TagsApi.md#assigntags) | **Put** /v1.0/extensions/org.libregraph/tags | Assign tags to a resource -*TagsApi* | [**GetTags**](docs/TagsApi.md#gettags) | **Get** /v1.0/extensions/org.libregraph/tags | Get all known tags -*TagsApi* | [**UnassignTags**](docs/TagsApi.md#unassigntags) | **Delete** /v1.0/extensions/org.libregraph/tags | Unassign tags from a resource -*UserApi* | [**DeleteUser**](docs/UserApi.md#deleteuser) | **Delete** /v1.0/users/{user-id} | Delete entity from users -*UserApi* | [**ExportPersonalData**](docs/UserApi.md#exportpersonaldata) | **Post** /v1.0/users/{user-id}/exportPersonalData | export personal data of a user -*UserApi* | [**GetUser**](docs/UserApi.md#getuser) | **Get** /v1.0/users/{user-id} | Get entity from users by key -*UserApi* | [**UpdateUser**](docs/UserApi.md#updateuser) | **Patch** /v1.0/users/{user-id} | Update entity in users -*UserAppRoleAssignmentApi* | [**UserCreateAppRoleAssignments**](docs/UserAppRoleAssignmentApi.md#usercreateapproleassignments) | **Post** /v1.0/users/{user-id}/appRoleAssignments | Grant an appRoleAssignment to a user -*UserAppRoleAssignmentApi* | [**UserDeleteAppRoleAssignments**](docs/UserAppRoleAssignmentApi.md#userdeleteapproleassignments) | **Delete** /v1.0/users/{user-id}/appRoleAssignments/{appRoleAssignment-id} | Delete the appRoleAssignment from a user -*UserAppRoleAssignmentApi* | [**UserListAppRoleAssignments**](docs/UserAppRoleAssignmentApi.md#userlistapproleassignments) | **Get** /v1.0/users/{user-id}/appRoleAssignments | Get appRoleAssignments from a user -*UsersApi* | [**CreateUser**](docs/UsersApi.md#createuser) | **Post** /v1.0/users | Add new entity to users -*UsersApi* | [**ListUsers**](docs/UsersApi.md#listusers) | **Get** /v1.0/users | Get entities from users - - -## Documentation For Models - - - [Activity](docs/Activity.md) - - [ActivityTemplate](docs/ActivityTemplate.md) - - [ActivityTimes](docs/ActivityTimes.md) - - [AppRole](docs/AppRole.md) - - [AppRoleAssignment](docs/AppRoleAssignment.md) - - [Application](docs/Application.md) - - [Audio](docs/Audio.md) - - [ClassMemberReference](docs/ClassMemberReference.md) - - [ClassReference](docs/ClassReference.md) - - [ClassTeacherReference](docs/ClassTeacherReference.md) - - [CollectionOfActivities](docs/CollectionOfActivities.md) - - [CollectionOfAppRoleAssignments](docs/CollectionOfAppRoleAssignments.md) - - [CollectionOfApplications](docs/CollectionOfApplications.md) - - [CollectionOfClass](docs/CollectionOfClass.md) - - [CollectionOfDriveItems](docs/CollectionOfDriveItems.md) - - [CollectionOfDriveItems1](docs/CollectionOfDriveItems1.md) - - [CollectionOfDrives](docs/CollectionOfDrives.md) - - [CollectionOfDrives1](docs/CollectionOfDrives1.md) - - [CollectionOfEducationClass](docs/CollectionOfEducationClass.md) - - [CollectionOfEducationUser](docs/CollectionOfEducationUser.md) - - [CollectionOfGroup](docs/CollectionOfGroup.md) - - [CollectionOfPermissions](docs/CollectionOfPermissions.md) - - [CollectionOfPermissionsWithAllowedValues](docs/CollectionOfPermissionsWithAllowedValues.md) - - [CollectionOfSchools](docs/CollectionOfSchools.md) - - [CollectionOfTags](docs/CollectionOfTags.md) - - [CollectionOfUser](docs/CollectionOfUser.md) - - [CollectionOfUsers](docs/CollectionOfUsers.md) - - [Deleted](docs/Deleted.md) - - [Drive](docs/Drive.md) - - [DriveItem](docs/DriveItem.md) - - [DriveItemCreateLink](docs/DriveItemCreateLink.md) - - [DriveItemInvite](docs/DriveItemInvite.md) - - [DriveRecipient](docs/DriveRecipient.md) - - [DriveUpdate](docs/DriveUpdate.md) - - [EducationClass](docs/EducationClass.md) - - [EducationSchool](docs/EducationSchool.md) - - [EducationUser](docs/EducationUser.md) - - [EducationUserReference](docs/EducationUserReference.md) - - [ExportPersonalDataRequest](docs/ExportPersonalDataRequest.md) - - [FileSystemInfo](docs/FileSystemInfo.md) - - [Folder](docs/Folder.md) - - [FolderView](docs/FolderView.md) - - [GeoCoordinates](docs/GeoCoordinates.md) - - [Group](docs/Group.md) - - [Hashes](docs/Hashes.md) - - [Identity](docs/Identity.md) - - [IdentitySet](docs/IdentitySet.md) - - [Image](docs/Image.md) - - [Instance](docs/Instance.md) - - [ItemReference](docs/ItemReference.md) - - [MemberReference](docs/MemberReference.md) - - [ObjectIdentity](docs/ObjectIdentity.md) - - [OdataError](docs/OdataError.md) - - [OdataErrorDetail](docs/OdataErrorDetail.md) - - [OdataErrorMain](docs/OdataErrorMain.md) - - [OpenGraphFile](docs/OpenGraphFile.md) - - [PasswordChange](docs/PasswordChange.md) - - [PasswordProfile](docs/PasswordProfile.md) - - [Permission](docs/Permission.md) - - [Photo](docs/Photo.md) - - [Quota](docs/Quota.md) - - [RemoteItem](docs/RemoteItem.md) - - [SharePointIdentitySet](docs/SharePointIdentitySet.md) - - [SharingInvitation](docs/SharingInvitation.md) - - [SharingLink](docs/SharingLink.md) - - [SharingLinkPassword](docs/SharingLinkPassword.md) - - [SharingLinkType](docs/SharingLinkType.md) - - [SignInActivity](docs/SignInActivity.md) - - [SpecialFolder](docs/SpecialFolder.md) - - [TagAssignment](docs/TagAssignment.md) - - [TagUnassignment](docs/TagUnassignment.md) - - [Thumbnail](docs/Thumbnail.md) - - [ThumbnailSet](docs/ThumbnailSet.md) - - [Trash](docs/Trash.md) - - [UnifiedRoleDefinition](docs/UnifiedRoleDefinition.md) - - [UnifiedRolePermission](docs/UnifiedRolePermission.md) - - [User](docs/User.md) - - [UserUpdate](docs/UserUpdate.md) - - [Video](docs/Video.md) - - -## Documentation For Authorization - - -Authentication schemes defined for the API: -### openId - -### bearerAuth - -- **Type**: HTTP Bearer token authentication - -Example +We welcome contributions! Please read the [Contributing Guidelines](CONTRIBUTING.md) +and our [Code of Conduct](CODE_OF_CONDUCT.md) before getting started. -```go -auth := context.WithValue(context.Background(), libregraph.ContextAccessToken, "BEARER_TOKEN_STRING") -r, err := client.Service.Operation(auth, args) -``` +### Workflow -### basicAuth +- **Rebase Early, Rebase Often!** We use a rebase workflow. Always rebase on the target branch before submitting a PR. +- **Dependabot**: Automated dependency updates are managed via Dependabot. Review and merge dependency PRs promptly. +- **Signed Commits**: All commits **must** be PGP/GPG signed. See [GitHub's signing guide](https://docs.github.com/en/authentication/managing-commit-signature-verification). +- **DCO Sign-off**: Every commit must carry a `Signed-off-by` line: + ``` + git commit -s -S -m "your commit message" + ``` +- **GitHub Actions Policy**: Workflows may only use actions that are (a) owned by `owncloud`, (b) created by GitHub (`actions/*`), or (c) verified in the GitHub Marketplace. -- **Type**: HTTP basic authentication +## Security -Example +**Do not open a public GitHub issue for security vulnerabilities.** -```go -auth := context.WithValue(context.Background(), libregraph.ContextBasicAuth, libregraph.BasicAuth{ - UserName: "username", - Password: "password", -}) -r, err := client.Service.Operation(auth, args) -``` +Report vulnerabilities at **** -- see [SECURITY.md](SECURITY.md). +Bug bounty: [YesWeHack ownCloud Program](https://yeswehack.com/programs/owncloud-bug-bounty-program) -## Documentation for Utility Methods +## License -Due to the fact that model structure members are all pointers, this package contains -a number of utility functions to easily obtain pointers to values of basic types. -Each of these functions takes a value of the given basic type and returns a pointer to it: +This project is licensed under the [Apache-2.0](LICENSE). -* `PtrBool` -* `PtrInt` -* `PtrInt32` -* `PtrInt64` -* `PtrFloat` -* `PtrFloat32` -* `PtrFloat64` -* `PtrString` -* `PtrTime` +## About the ownCloud OSPO -## Author +The [Kiteworks Open Source Program Office](https://kiteworks.com/opensource), operating under +the [ownCloud](https://owncloud.com) brand, launched on May 5, 2026, to steward the open source +ecosystem around ownCloud's products. The OSPO ensures transparent governance, license compliance, +community health, and sustainable collaboration between the open source community and +[Kiteworks](https://www.kiteworks.com), which acquired ownCloud in 2023. +- **OSPO Home**: +- **GitHub**: +- **ownCloud**: +For questions about the OSPO or licensing, contact ospo@kiteworks.com. +> **License status:** This repository is already licensed under Apache-2.0 -- the OSPO target license. +> No migration is required. diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..78094ae --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,11 @@ +# Security Policy + +## Reporting a Vulnerability + +**Do NOT open a public GitHub issue for security vulnerabilities.** + +Please report security issues responsibly via: +**** + +You can also report vulnerabilities through our YesWeHack bug bounty program: +**** diff --git a/SUPPORT.md b/SUPPORT.md new file mode 100644 index 0000000..d87c0ca --- /dev/null +++ b/SUPPORT.md @@ -0,0 +1,10 @@ +# Support + +For support with this project, please use the following channels: + +- **Enterprise Support**: +- **Community discussions**: https://github.com/orgs/owncloud/discussions +- **Matrix Chat**: +- **Documentation**: + +Please do not use GitHub issues for general support questions. diff --git a/agents.md b/agents.md new file mode 100644 index 0000000..a8b681d --- /dev/null +++ b/agents.md @@ -0,0 +1,56 @@ +# agents.md -- Libre Graph API Go Client + +## Repository Overview + +Auto-generated Go client library for the Libre Graph API. Licensed under Apache-2.0. Generated by OpenAPI Generator. Used internally by oCIS. + +## Architecture & Key Paths + +- `api_*.go` -- Generated API endpoint implementations +- `model_*.go` -- Generated data model types +- `client.go` -- API client configuration +- `configuration.go` -- Client configuration options +- `docs/` -- Generated API documentation +- `api/` -- OpenAPI spec copy +- `go.mod` -- Go module definition + +## Development Conventions + +- Generated code -- do not edit directly +- Go module (github.com/owncloud/libre-graph-api-go) + +## Build & Test Commands + +```bash +go build ./... +go test ./... +``` + +## Important Constraints + +- Licensed under Apache-2.0 (already at the OSPO target license). The broader ownCloud organization is migrating other repositories from copyleft licenses to Apache 2.0. +- This is generated code. Changes should be made in the libre-graph-api spec, not here. +- All contributions require a DCO sign-off. + + +## OSPO Policy Constraints + +### GitHub Actions +- **Only** use actions owned by `owncloud`, created by GitHub (`actions/*`), verified on the GitHub Marketplace, or verified by the ownCloud Maintainers. +- Pin all actions to their full commit SHA (not tags): `uses: actions/checkout@ # vX.Y.Z` +- Never introduce actions from unverified third parties. + +### Dependency Management +- Dependabot is configured for automated dependency updates. +- Review and merge Dependabot PRs as part of regular maintenance. +- Do not introduce new dependencies without discussion in an issue first. + +### Git Workflow +- **Rebase policy**: Always rebase; never create merge commits. Use `git pull --rebase` and `git rebase` before pushing. +- **Signed commits**: All commits **must** be PGP/GPG signed (`git commit -S -s`). +- **DCO sign-off**: Every commit needs a `Signed-off-by` line (`git commit -s`). +- **Conventional Commits & Squash Merge**: Use the [Conventional Commits](https://www.conventionalcommits.org/) format where the repository enforces it. Many repos use squash merge, where the PR title becomes the commit message on the default branch — apply Conventional Commits format to PR titles as well. A reusable GitHub Actions workflow enforces this. + +## Context for AI Agents + +All `api_*.go` and `model_*.go` files are auto-generated. The Go module is imported by oCIS as a dependency. Modifications require updating the OpenAPI spec in libre-graph-api and regenerating.