Skip to content

Commit

Permalink
add GL.iNet Go client
Browse files Browse the repository at this point in the history
  • Loading branch information
ryanrishi committed Sep 7, 2022
0 parents commit b6c294a
Show file tree
Hide file tree
Showing 24 changed files with 2,558 additions and 0 deletions.
24 changes: 24 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Compiled Object files, Static and Dynamic libs (Shared Objects)
*.o
*.a
*.so

# Folders
_obj
_test

# Architecture specific extensions/prefixes
*.[568vq]
[568vq].out

*.cgo1.go
*.cgo2.c
_cgo_defun.c
_cgo_gotypes.go
_cgo_export.*

_testmain.go

*.exe
*.test
*.prof
23 changes: 23 additions & 0 deletions .openapi-generator-ignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# OpenAPI Generator Ignore
# Generated by openapi-generator https://github.com/openapitools/openapi-generator

# Use this file to prevent files from being overwritten by the generator.
# The patterns follow closely to .gitignore or .dockerignore.

# As an example, the C# client generator defines ApiClient.cs.
# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line:
#ApiClient.cs

# You can match any string of characters against a directory, file or extension with a single asterisk (*):
#foo/*/qux
# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux

# You can recursively match patterns against a directory, file or extension with a double asterisk (**):
#foo/**/qux
# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux

# You can also negate patterns with an exclamation (!).
# For example, you can ignore all files in a docs folder with the file extension .md:
#docs/*.md
# Then explicitly reverse the ignore rule for a single file:
#!docs/README.md
20 changes: 20 additions & 0 deletions .openapi-generator/FILES
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
.gitignore
.openapi-generator-ignore
.travis.yml
README.md
api/openapi.yaml
api_router.go
client.go
configuration.go
docs/RouterApi.md
docs/RouterHello.md
docs/RouterLogin.md
docs/RouterLoginResponse.md
git_push.sh
go.mod
go.sum
model_router_hello.go
model_router_login.go
model_router_login_response.go
response.go
utils.go
1 change: 1 addition & 0 deletions .openapi-generator/VERSION
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
6.0.1
8 changes: 8 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
language: go

install:
- go get -d -v .

script:
- go build -v ./

3 changes: 3 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
generate:
openapi-generator generate --input-spec glinet-openapi.yml --generator-name go

124 changes: 124 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
# Go API client for openapi

The GL.iNet API is organized around REST. Our API has predictable resource-oriented URLs, accepts form-encoded request bodies, and returns JSON-encoded responses.

## 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.

- API version: 3.0.1
- Package version: 1.0.0
- Build package: org.openapitools.codegen.languages.GoClientCodegen

## Installation

Install the following dependencies:

```shell
go get github.com/stretchr/testify/assert
go get golang.org/x/oauth2
go get golang.org/x/net/context
```

Put the package under your project folder and add the following in import:

```golang
import openapi "github.com/GIT_USER_ID/GIT_REPO_ID"
```

To use a proxy, set the environment variable `HTTP_PROXY`:

```golang
os.Setenv("HTTP_PROXY", "http://proxy_name:proxy_port")
```

## Configuration of Server URL

Default configuration comes with `Servers` field that contains server objects as defined in the OpenAPI specification.

### Select Server Configuration

For using other server than the one defined on index 0 set context value `sw.ContextServerIndex` of type `int`.

```golang
ctx := context.WithValue(context.Background(), openapi.ContextServerIndex, 1)
```

### Templated Server URL

Templated server URL is formatted using default variables from configuration or from context value `sw.ContextServerVariables` of type `map[string]string`.

```golang
ctx := context.WithValue(context.Background(), openapi.ContextServerVariables, map[string]string{
"basePath": "v2",
})
```

Note, enum values are always validated and all unused variables are silently ignored.

### URLs Configuration per Operation

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 `sw.ContextOperationServerIndices` and `sw.ContextOperationServerVariables` context maps.

```
ctx := context.WithValue(context.Background(), openapi.ContextOperationServerIndices, map[string]int{
"{classname}Service.{nickname}": 2,
})
ctx = context.WithValue(context.Background(), openapi.ContextOperationServerVariables, map[string]map[string]string{
"{classname}Service.{nickname}": {
"port": "8443",
},
})
```

## Documentation for API Endpoints

All URIs are relative to *https://192.168.8.1*

Class | Method | HTTP request | Description
------------ | ------------- | ------------- | -------------
*RouterApi* | [**GetRouterHello**](docs/RouterApi.md#getrouterhello) | **Get** /router/hello | Check router is connected and configured. No login permission required.
*RouterApi* | [**RouterLogin**](docs/RouterApi.md#routerlogin) | **Post** /router/login | Log in to the router. No login permission required.


## Documentation For Models

- [RouterHello](docs/RouterHello.md)
- [RouterLogin](docs/RouterLogin.md)
- [RouterLoginResponse](docs/RouterLoginResponse.md)


## Documentation For Authorization



### token

- **Type**: API key
- **API key parameter name**: Authorization
- **Location**: HTTP header

Note, each API key must be added to a map of `map[string]APIKey` where the key is: Authorization and passed in as the auth context for each request.


## Documentation for Utility Methods

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:

* `PtrBool`
* `PtrInt`
* `PtrInt32`
* `PtrInt64`
* `PtrFloat`
* `PtrFloat32`
* `PtrFloat64`
* `PtrString`
* `PtrTime`

## Author



89 changes: 89 additions & 0 deletions api/openapi.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
openapi: 3.0.3
info:
description: "The GL.iNet API is organized around REST. Our API has predictable\
\ resource-oriented URLs, accepts form-encoded request bodies, and returns JSON-encoded\
\ responses."
title: GL.iNet API
version: 3.0.1
externalDocs:
url: https://dev.gl-inet.com/api/
servers:
- url: https://192.168.8.1
tags:
- name: router
paths:
/router/login:
post:
operationId: routerLogin
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/RouterLogin'
multipart/form-data:
schema:
$ref: '#/components/schemas/RouterLogin'
responses:
"200":
content:
application/json:
schema:
$ref: '#/components/schemas/RouterLoginResponse'
description: Success
summary: Log in to the router. No login permission required.
tags:
- router
/router/hello:
get:
operationId: getRouterHello
responses:
"200":
content:
application/json:
schema:
$ref: '#/components/schemas/RouterHello'
description: Success
summary: Check router is connected and configured. No login permission required.
tags:
- router
components:
schemas:
RouterHello:
example:
code: 0
properties:
code:
type: integer
type: object
RouterLogin:
example:
pwd: pwd
properties:
pwd:
type: string
type: object
RouterLoginResponse:
example:
code: 0.8008281904610115
token: token
properties:
code:
description: "Code:\n * `0` success\n * `-1` invalid user, permission\
\ denied or not logged in\n * `-4` invalid parameter, value or format\n\
\ * `-5` no parameter found\n * `-6` time out\n * `-9` wrong password\n"
enum:
- 0
- -1
- -4
- -5
- -6
- -9
type: number
token:
type: string
type: object
securitySchemes:
token:
in: header
name: Authorization
type: apiKey
Loading

0 comments on commit b6c294a

Please sign in to comment.