dingtalk

package module
v1.0.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 7, 2025 License: Apache-2.0 Imports: 9 Imported by: 0

README

Dingtalk connector

Dingtalk connector is a OAuth plug-in designed to support Dingtalk OAuth login.

How to use

Build
./answer build --with github.com/apache/answer-plugins/connector-dingtalk
Configuration
  • ClientID - Dingtalk OAuth client ID
  • ClientSecret - Dingtalk OAuth client secret

Authorization callback URL as https://example.com/answer/api/v1/connector/redirect/dingtalk

Dingtalk OAuth API documentation: https://open.dingtalk.com/document/orgapp-server/use-dingtalk-account-to-log-on-to-third-party-websites-1

Build docker image with plugin from answer base image
FROM apache/answer as answer-builder

RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories

RUN apk --no-cache add \
    build-base git bash nodejs npm go && \
    npm install -g pnpm

RUN go env -w GOPROXY=https://goproxy.cn,direct

RUN answer build \
    --with github.com/apache/answer-plugins/connector-dingtalk \
    --output /usr/bin/new_answer

FROM alpine

ARG TIMEZONE
ENV TIMEZONE=${TIMEZONE:-"Asia/Shanghai"}

RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories

RUN apk update \
    && apk --no-cache add \
        bash \
        ca-certificates \
        curl \
        dumb-init \
        gettext \
        openssh \
        sqlite \
        gnupg \
        tzdata \
    && ln -sf /usr/share/zoneinfo/${TIMEZONE} /etc/localtime \
    && echo "${TIMEZONE}" > /etc/timezone

COPY --from=answer-builder /usr/bin/new_answer /usr/bin/answer
COPY --from=answer-builder /data /data
COPY --from=answer-builder /entrypoint.sh /entrypoint.sh
RUN chmod 755 /entrypoint.sh

VOLUME /data
EXPOSE 80
ENTRYPOINT ["/entrypoint.sh"]

You can update the --with parameter to add more plugins that you need.

docker build -t answer-with-plugin .
docker run -d -p 9080:80 -v answer-data:/data --name answer answer-with-plugin

Documentation

Index

Constants

View Source
const (
	LogoSVG      = "" /* 948-byte string literal not displayed */
	AuthorizeURL = "https://login.dingtalk.com/oauth2/auth"
	TokenURL     = "https://api.dingtalk.com/v1.0/oauth2/userAccessToken"
	UserJsonURL  = "https://api.dingtalk.com/v1.0/contact/users/me"
)

Variables

View Source
var Info embed.FS

Functions

This section is empty.

Types

type Connector

type Connector struct {
	Config *ConnectorConfig
}

func (*Connector) ConfigFields

func (g *Connector) ConfigFields() []plugin.ConfigField

func (*Connector) ConfigReceiver

func (g *Connector) ConfigReceiver(config []byte) error

func (*Connector) ConnectorLogoSVG

func (g *Connector) ConnectorLogoSVG() string

func (*Connector) ConnectorName

func (g *Connector) ConnectorName() plugin.Translator

func (*Connector) ConnectorReceiver

func (g *Connector) ConnectorReceiver(ctx *plugin.GinContext, receiverURL string) (userInfo plugin.ExternalLoginUserInfo, err error)

func (*Connector) ConnectorSender

func (g *Connector) ConnectorSender(ctx *plugin.GinContext, receiverURL string) (redirectURL string)

func (*Connector) ConnectorSlugName

func (g *Connector) ConnectorSlugName() string

func (*Connector) Info

func (g *Connector) Info() plugin.Info

type ConnectorConfig

type ConnectorConfig struct {
	ClientID     string `json:"client_id"`
	ClientSecret string `json:"client_secret"`
}

type TokenResponse

type TokenResponse struct {
	AccessToken  string `json:"accessToken"`
	RefreshToken string `json:"refreshToken"`
	ExpiresIn    int    `json:"expiresIn"`
	CorpID       string `json:"corpId"`
}

type UserInfoResponse

type UserInfoResponse struct {
	Nick      string `json:"nick"`
	AvatarUrl string `json:"avatarUrl"`
	Mobile    string `json:"mobile"`
	OpenID    string `json:"openId"`
	UnionId   string `json:"unionId"`
	Email     string `json:"email"`
	StateCode string `json:"stateCode"`
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL