diff --git a/casdoor/1.645.0/config/init_data.json b/casdoor/1.645.0/config/init_data.json new file mode 100644 index 000000000..a08a677fa --- /dev/null +++ b/casdoor/1.645.0/config/init_data.json @@ -0,0 +1,490 @@ +{ + "organizations": [ + { + "owner": "", + "name": "", + "displayName": "", + "websiteUrl": "", + "favicon": "", + "passwordType": "plain", + "passwordSalt": "", + "passwordOptions": [ + "AtLeast6" + ], + "countryCodes": [ + "US", + "GB", + "ES", + "FR", + "DE", + "CN", + "JP", + "KR", + "VN", + "ID", + "SG", + "IN", + "IT", + "MY", + "TR", + "DZ", + "IL", + "PH", + "NL", + "PL", + "FI", + "SE", + "UA", + "KZ" + ], + "defaultAvatar": "", + "defaultApplication": "", + "tags": [], + "languages": [ + "en", + "zh", + "es", + "fr", + "de", + "id", + "ja", + "ko", + "ru", + "vi", + "it", + "ms", + "tr", + "ar", + "he", + "nl", + "pl", + "fi", + "sv", + "uk", + "kk", + "fa" + ], + "masterPassword": "", + "defaultPassword": "", + "initScore": 2000, + "enableSoftDeletion": false, + "isProfilePublic": true, + "accountItems": [] + } + ], + "applications": [ + { + "owner": "", + "name": "", + "displayName": "", + "logo": "", + "homepageUrl": "", + "organization": "", + "cert": "", + "enablePassword": true, + "enableSignUp": true, + "clientId": "", + "clientSecret": "", + "providers": [ + { + "name": "", + "canSignUp": true, + "canSignIn": true, + "canUnlink": false, + "prompted": false, + "alertType": "None" + } + ], + "signinMethods": [ + { + "name": "Password", + "displayName": "Password", + "rule": "All" + }, + { + "name": "Verification code", + "displayName": "Verification code", + "rule": "All" + }, + { + "name": "WebAuthn", + "displayName": "WebAuthn", + "rule": "None" + }, + { + "name": "Face ID", + "displayName": "Face ID", + "rule": "None" + } + ], + "signupItems": [ + { + "name": "ID", + "visible": false, + "required": true, + "prompted": false, + "rule": "Random" + }, + { + "name": "Username", + "visible": true, + "required": true, + "prompted": false, + "rule": "None" + }, + { + "name": "Display name", + "visible": true, + "required": true, + "prompted": false, + "rule": "None" + }, + { + "name": "Password", + "visible": true, + "required": true, + "prompted": false, + "rule": "None" + }, + { + "name": "Confirm password", + "visible": true, + "required": true, + "prompted": false, + "rule": "None" + }, + { + "name": "Email", + "visible": true, + "required": true, + "prompted": false, + "rule": "None" + }, + { + "name": "Phone", + "visible": true, + "required": true, + "prompted": false, + "rule": "None" + }, + { + "name": "Agreement", + "visible": true, + "required": true, + "prompted": false, + "rule": "None" + } + ], + "grantTypes": [ + "authorization_code", + "password", + "client_credentials", + "token", + "id_token", + "refresh_token" + ], + "redirectUris": [ + "http://localhost:9000/callback" + ], + "tokenFormat": "JWT", + "tokenFields": [], + "expireInHours": 168, + "failedSigninLimit": 5, + "failedSigninFrozenTime": 15 + } + ], + "users": [ + { + "owner": "", + "name": "", + "type": "normal-user", + "password": "", + "displayName": "", + "avatar": "", + "email": "", + "phone": "", + "countryCode": "", + "address": [], + "affiliation": "", + "tag": "", + "score": 2000, + "ranking": 1, + "isAdmin": true, + "isForbidden": false, + "isDeleted": false, + "signupApplication": "", + "createdIp": "", + "groups": [] + } + ], + "providers": [ + { + "owner": "", + "name": "", + "displayName": "", + "category": "", + "type": "" + } + ], + "certs": [ + { + "owner": "", + "name": "", + "displayName": "", + "scope": "JWT", + "type": "x509", + "cryptoAlgorithm": "RS256", + "bitSize": 4096, + "expireInYears": 20, + "certificate": "", + "privateKey": "" + } + ], + "ldaps": [ + { + "id": "", + "owner": "", + "serverName": "", + "host": "", + "port": 389, + "username": "", + "password": "", + "baseDn": "", + "autoSync": 0, + "lastSync": "" + } + ], + "models": [ + { + "owner": "", + "name": "", + "modelText": "", + "displayName": "" + } + ], + "permissions": [ + { + "actions": [], + "displayName": "", + "effect": "", + "isEnabled": true, + "model": "", + "name": "", + "owner": "", + "resourceType": "", + "resources": [], + "roles": [], + "users": [] + } + ], + "payments": [ + { + "currency": "", + "detail": "", + "displayName": "", + "invoiceRemark": "", + "invoiceTaxId": "", + "invoiceTitle": "", + "invoiceType": "", + "invoiceUrl": "", + "message": "", + "name": "", + "organization": "", + "owner": "", + "payUrl": "", + "personEmail": "", + "personIdCard": "", + "personName": "", + "personPhone": "", + "price": 0, + "productDisplayName": "", + "productName": "", + "provider": "", + "returnUrl": "", + "state": "", + "tag": "", + "type": "", + "user": "" + } + ], + "products": [ + { + "currency": "", + "detail": "", + "displayName": "", + "image": "", + "name": "", + "owner": "", + "price": 0, + "providers": [], + "quantity": 0, + "returnUrl": "", + "sold": 0, + "state": "", + "tag": "" + } + ], + "resources": [ + { + "owner": "", + "name": "", + "user": "", + "provider": "", + "application": "", + "tag": "", + "parent": "", + "fileName": "", + "fileType": "", + "fileFormat": "", + "url": "", + "description": "" + } + ], + "roles": [ + { + "displayName": "", + "isEnabled": true, + "name": "", + "owner": "", + "roles": [], + "users": [] + } + ], + "syncers": [ + { + "affiliationTable": "", + "avatarBaseUrl": "", + "database": "", + "databaseType": "", + "errorText": "", + "host": "", + "isEnabled": false, + "name": "", + "organization": "", + "owner": "", + "password": "", + "port": 0, + "syncInterval": 0, + "table": "", + "tableColumns": [ + { + "casdoorName": "", + "isHashed": true, + "name": "", + "type": "", + "values": [] + } + ], + "tablePrimaryKey": "", + "type": "", + "user": "" + } + ], + "tokens": [ + { + "accessToken": "", + "application": "", + "code": "", + "codeChallenge": "", + "codeExpireIn": 0, + "codeIsUsed": true, + "createdTime": "", + "expiresIn": 0, + "name": "", + "organization": "", + "owner": "", + "refreshToken": "", + "scope": "", + "tokenType": "", + "user": "" + } + ], + "webhooks": [ + { + "contentType": "", + "events": [], + "headers": [ + { + "name": "", + "value": "" + } + ], + "isEnabled": true, + "isUserExtended": true, + "method": "", + "name": "", + "organization": "", + "owner": "", + "url": "" + } + ], + "groups": [ + { + "owner": "", + "name": "", + "displayName": "", + "manager": "", + "contactEmail": "", + "type": "", + "parent_id": "", + "isTopGroup": true, + "title": "", + "key": "", + "children": "", + "isEnabled": true + } + ], + "adapters": [ + { + "owner": "", + "name": "", + "table": "", + "useSameDb": true, + "type": "", + "databaseType": "", + "database": "", + "host": "", + "port": 0, + "user": "", + "password": "" + } + ], + "enforcers": [ + { + "owner": "", + "name": "", + "displayName": "", + "description": "", + "model": "", + "adapter": "", + "enforcer": "" + } + ], + "plans": [ + { + "owner": "", + "name": "", + "displayName": "", + "description": "", + "price": 0, + "currency": "", + "period": "", + "product": "", + "paymentProviders": [], + "isEnabled": true, + "role": "" + } + ], + "pricings": [ + { + "owner": "", + "name": "", + "displayName": "", + "description": "", + "plans": [], + "isEnabled": true, + "trialDuration": 0, + "application": "" + } + ] +} diff --git a/casdoor/1.645.0/data.yml b/casdoor/1.645.0/data.yml new file mode 100644 index 000000000..199607eaa --- /dev/null +++ b/casdoor/1.645.0/data.yml @@ -0,0 +1,138 @@ +additionalProperties: + formFields: + - child: + default: "" + envKey: PANEL_DB_HOST + required: true + type: service + default: postgresql + edit: true + envKey: PANEL_DB_TYPE + labelZh: 数据库 服务 (前置检查) + labelEn: Database Service (Pre-check) + required: true + type: apps + values: + - label: PostgreSQL + value: postgresql + - label: MySQL + value: mysql + - label: MariaDB + value: mariadb + - label: Percona + value: percona + - child: + default: "" + envKey: PANEL_REDIS_SERVICE + required: true + type: service + default: redis + envKey: PANEL_REDIS_TYPE + labelZh: Redis 服务 (前置检查) + labelEn: Redis Service (Pre-check) + required: true + type: apps + values: + - label: Redis + value: redis + - default: "/home/casdoor" + edit: true + envKey: CASDOOR_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8000 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: postgresql + edit: true + envKey: DB_TYPE + labelZh: 数据库 类型 + labelEn: Database Type + required: true + type: select + values: + - label: PostgreSQL + value: postgresql + - label: MySQL (MariaDB, Percona) + value: mysql + - default: "127.0.0.1" + edit: true + envKey: DB_HOSTNAME + labelZh: 数据库 主机地址 + labelEn: Database Host + required: false + type: text + - default: 5432 + edit: true + envKey: DB_PORT + labelZh: 数据库 端口 + labelEn: Database Port + required: false + rule: paramPort + type: number + - default: "gitea" + edit: true + envKey: DB_USER + labelZh: 数据库 用户名 + labelEn: Database User + required: false + type: text + - default: "" + edit: true + envKey: DB_PASSWD + labelEn: Database Password + labelZh: 数据库 密码 + random: true + required: false + rule: paramComplexity + type: password + - default: "gitea" + edit: true + envKey: DB_NAME + labelZh: 数据库 名称 + labelEn: Database Name + required: false + type: text + - default: "127.0.0.1" + edit: true + envKey: REDIS_HOSTNAME + labelZh: Redis 主机 + labelEn: Redis Host + required: true + type: text + - default: 6379 + edit: true + envKey: REDIS_PORT + labelZh: Redis 端口 + labelEn: Redis Port + required: true + rule: paramPort + type: number + - default: 0 + edit: true + envKey: REDIS_DBINDEX + labelZh: Redis 索引 + labelEn: Redis Index + required: true + type: number + - default: "" + edit: true + envKey: REDIS_PASSWORD + labelZh: Redis 密码 + labelEn: Redis Password + required: false + type: password + - default: "" + edit: true + envKey: socks5Proxy + labelZh: Socks5 代理 (地区网络限制) + labelEn: Socks5 Proxy (Region Network Restriction) + required: false + type: text diff --git a/casdoor/1.645.0/docker-compose.yml b/casdoor/1.645.0/docker-compose.yml new file mode 100644 index 000000000..93ec9bb86 --- /dev/null +++ b/casdoor/1.645.0/docker-compose.yml @@ -0,0 +1,31 @@ +version: "3.8" + +networks: + 1panel-network: + external: true + +services: + casdoor: + image: casbin/casdoor:v1.645.0 + container_name: ${CONTAINER_NAME} + labels: + createdBy: "Apps" + restart: always + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8000 + build: + context: ./ + dockerfile: Dockerfile + target: STANDARD + entrypoint: /bin/sh -c './server --createDatabase=true' + volumes: + - ${CASDOOR_ROOT_PATH}/data/files:/home/user/casdoor/files + environment: + - driverName=${DB_TYPE} + - dbName=${DB_NAME} + - redisEndpoint=${REDIS_HOSTNAME}:${REDIS_PORT} + - verificationCodeTimeout=10 + - appname="casdoor" + - authState="casdoor" diff --git a/casdoor/1.645.0/scripts/init.sh b/casdoor/1.645.0/scripts/init.sh new file mode 100644 index 000000000..8d37dc472 --- /dev/null +++ b/casdoor/1.645.0/scripts/init.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + + if [ "$DB_TYPE" == "mysql" ]; then + echo "dataSourceName=\"$DB_USER:$DB_PASSWD@tcp($DB_HOSTNAME:$DB_PORT)/\"" >> .env + fi + + if [ "$DB_TYPE" == "postgresql" ]; then + echo "dataSourceName=\"user=$DB_USER password=$DB_PASSWD host=$DB_HOSTNAME port=$DB_PORT sslmode=disable dbname=$DB_NAME\"" >> .env + fi + + if [ -z "$REDIS_PASSWORD" ]; then + echo "redisEndpoint=\"$REDIS_HOSTNAME:$REDIS_PORT,$REDIS_DBINDEX,$REDIS_PASSWORD\"" >> .env + else + echo "redisEndpoint=\"$REDIS_HOSTNAME:$REDIS_PORT,$REDIS_DBINDEX\"" >> .env + fi + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/casdoor/1.645.0/scripts/uninstall.sh b/casdoor/1.645.0/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/casdoor/1.645.0/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/casdoor/1.645.0/scripts/upgrade.sh b/casdoor/1.645.0/scripts/upgrade.sh new file mode 100644 index 000000000..c211154a7 --- /dev/null +++ b/casdoor/1.645.0/scripts/upgrade.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/casdoor/README.md b/casdoor/README.md new file mode 100644 index 000000000..d77dbc7af --- /dev/null +++ b/casdoor/README.md @@ -0,0 +1,81 @@ +# Casdoor + +Casdoor 是一个 UI 优先的身份访问管理 (IAM)/单点登录 (SSO) 平台,其 Web UI 支持 OAuth +2.0、OIDC、SAML、CAS、LDAP、SCIM、WebAuthn、TOTP、MFA、RADIUS、Google Workspace、活动目录和 Kerberos。 + +![Casdoor](https://file.lifebus.top/imgs/casdoor_cover.png) + +## 简介 + +Casdoor是一个基于OAuth 2.0、OIDC、SAML 和 CAS 的,UI-first的身份和访问管理(IAM)/单点登录(SSO)平台。 + +Casdoor是由Casbin社区通过Golang和React进行开发。 + +Casdoor旨在提供一个强大的认证平台来处理用户管理问题。 + ++ ⚡️ 强大的功能和极简的配置。 支持使用 登录和传统的用户名/密码登录,只需几个步骤,Casdoor即可帮助您构建您的用户管理系统。 + ++ 💥 前后端分离架构。 Casdoor提供可随心所欲的网页界面并支持高并发。 + ++ 🥂 活跃的开源社区。 Casdoor是开源的,并有专业团队积极维护中。 + ++ 🌐 多语言支持。 Casdoor支持多种语言,包括中文、英文、法文、以及更多语言。 + +## 特性 + ++ Casdoor 遵循前后端分离架构,采用 Golang 进行开发。 它支持高同步,提供基于网页的用户界面管理,并支持10多种语言的本地化。 + ++ Casdoor 支持第三方应用登录,如 GitHub、谷歌、QQ、微信等,并支持通过插件扩展第三方登录。 + ++ Casdoor 支持基于 Cassbin 的授权管理。 它支持 ACL、RBAC、ABAC 和 RESTful鉴权管理模式。 + ++ Casdoor 提供了手机验证码、电子邮件验证码以及重置密码的功能。 + ++ Casdoor 支持日志的审计和记录。 + ++ Casdoor 可以使用阿里云、腾讯云、七牛云提供的图片CDN云存储功能。 + ++ Casdoor 允许自定义注册、登录以及找回密码页面。 + ++ 通过数据库同步支持与现有系统的集成,从而能够顺利过渡到 Casdoor。 + ++ Casdoor 支持主流数据库: MySQL、PostgreSQL、SQL Server 等, 并支持扩展插件以支持新的数据库。 + +## 安装说明 + +### 数据库支持 + +当前仅支持 `MySQL` 和 `PostgreSQL` 数据库。 + +官方支持使用 'SQLite' 数据库,但不建议在生产环境中使用。因此,我们放弃了 'SQLite' 数据库的配置选项。 + +同时还有一些其他数据库的支持,但是这些数据库的支持并不完善,因此我们也放弃了这些数据库的配置选项。 + +### 存储 `本地文件系统` + +Casdoor 支持将用户头像等文件存储在本地文件系统中。默认情况下,Casdoor 会将文件存储在容器内部 `/home/user/casdoor/files` +目录下。 + +我们将其挂载在 持久化目录 `/home/casdoor` 下,以便于数据的持久化。 + +### `Socks5 代理 (地区网络限制)` 配置 + +如果您的网络环境受到地区网络限制,您可以通过配置 `Socks5 代理` 来解决这个问题。 + +socks5Proxy 是 SOCKS 代理服务器 IP 地址。 +设置代理端口,因为我们有与Google相关的服务,或者使用Google、GitHub、Facebook、LinkedIn或Steam作为OAuth提供商,这在某些地区可能会受到网络限制。 + +### 数据初始化 `init_data.json` 配置 + +Casdoor 会在第一次启动时,自动初始化数据库。您可以通过配置 `init_data.json` 文件来初始化数据库。 + +配置自定义的 `init_data.json` 文件,需要挂载到容器中。 + +需要修改 `docker-compose.yml` 文件中的 `volumes` 部分,添加自定义配置的挂载,将 `init_data.json` 文件挂载到容器中,覆盖默认配置。 + +```yaml +volumes: + - ./config/init_data.json:/init_data.json +``` + +其中 `./config/init_data.json` 为默认配置文件所在路径,您可以根据实际情况进行修改为自定义绝对文件路径即可。 diff --git a/casdoor/data.yml b/casdoor/data.yml new file mode 100644 index 000000000..59c536eb1 --- /dev/null +++ b/casdoor/data.yml @@ -0,0 +1,19 @@ +name: Casdoor +title: 身份和访问管理(IAM)/单点登录(SSO)平台 +description: 身份和访问管理(IAM)/单点登录(SSO)平台 +additionalProperties: + key: casdoor + name: Casdoor + tags: + - WebSite + - Middleware + - Tool + - Local + shortDescZh: 身份和访问管理(IAM)/单点登录(SSO)平台 + shortDescEn: Identity and Access Management (IAM)/Single Sign-On (SSO) platform + type: website + crossVersionUpdate: true + limit: 0 + website: https://casdoor.org/ + github: https://github.com/casdoor/casdoor/ + document: https://casdoor.org/zh/docs/overview/ diff --git a/casdoor/logo.png b/casdoor/logo.png new file mode 100644 index 000000000..211148377 Binary files /dev/null and b/casdoor/logo.png differ