diff --git a/application/src/main/data/json/system/oauth2_config_templates/github_config.json b/application/src/main/data/json/system/oauth2_config_templates/github_config.json
new file mode 100644
index 0000000000..17dc1fda4a
--- /dev/null
+++ b/application/src/main/data/json/system/oauth2_config_templates/github_config.json
@@ -0,0 +1,14 @@
+{
+ "providerId": "Github",
+ "accessTokenUri": "https://github.com/login/oauth/access_token",
+ "authorizationUri": "https://github.com/login/oauth/authorize",
+ "scope": ["read:user","user:email"],
+ "jwkSetUri": null,
+ "userInfoUri": "https://api.github.com/user",
+ "clientAuthenticationMethod": "basic",
+ "userNameAttributeName": "login",
+ "basic": {},
+ "comment": "In order to log into ThingsBoard you need to have user's email. You may configure and use Custom OAuth2 Mapper to get email information. Please refer to Github Documentation",
+ "icon": "mdi:github",
+ "helpLink": "https://docs.github.com/en/developers/apps/creating-an-oauth-app"
+}
\ No newline at end of file
diff --git a/application/src/main/data/json/system/oauth2_config_templates/google_config.json b/application/src/main/data/json/system/oauth2_config_templates/google_config.json
new file mode 100644
index 0000000000..99053b68e6
--- /dev/null
+++ b/application/src/main/data/json/system/oauth2_config_templates/google_config.json
@@ -0,0 +1,20 @@
+{
+ "providerId": "Google",
+ "additionalInfo": null,
+ "accessTokenUri": "https://oauth2.googleapis.com/token",
+ "authorizationUri": "https://accounts.google.com/o/oauth2/v2/auth",
+ "scope": ["email","openid","profile"],
+ "jwkSetUri": "https://www.googleapis.com/oauth2/v3/certs",
+ "userInfoUri": "https://openidconnect.googleapis.com/v1/userinfo",
+ "clientAuthenticationMethod": "basic",
+ "userNameAttributeName": "email",
+ "basic": {
+ "emailAttributeKey": "email",
+ "firstNameAttributeKey": "given_name",
+ "lastNameAttributeKey": "family_name",
+ "tenantNameStrategy": "DOMAIN"
+ },
+ "comment": null,
+ "icon": "mdi:google",
+ "helpLink": "https://developers.google.com/adwords/api/docs/guides/authentication"
+}
\ No newline at end of file
diff --git a/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java b/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java
index 1b1355571d..7059e0fd63 100644
--- a/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java
+++ b/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java
@@ -176,6 +176,8 @@ public class ThingsboardInstallService {
case "3.1.0":
log.info("Upgrading ThingsBoard from version 3.1.0 to 3.2.0 ...");
databaseEntitiesUpgradeService.upgradeDatabase("3.1.0");
+ log.info("Updating system data...");
+ systemDataLoaderService.createOAuth2Templates();
break;
default:
throw new RuntimeException("Unable to upgrade ThingsBoard, unsupported fromVersion: " + upgradeFromVersion);
@@ -207,6 +209,7 @@ public class ThingsboardInstallService {
systemDataLoaderService.createSysAdmin();
systemDataLoaderService.createAdminSettings();
systemDataLoaderService.loadSystemWidgets();
+ systemDataLoaderService.createOAuth2Templates();
// systemDataLoaderService.loadSystemPlugins();
// systemDataLoaderService.loadSystemRules();
diff --git a/application/src/main/java/org/thingsboard/server/service/install/DefaultSystemDataLoaderService.java b/application/src/main/java/org/thingsboard/server/service/install/DefaultSystemDataLoaderService.java
index 6aa3e0cd2d..dcb5ffccde 100644
--- a/application/src/main/java/org/thingsboard/server/service/install/DefaultSystemDataLoaderService.java
+++ b/application/src/main/java/org/thingsboard/server/service/install/DefaultSystemDataLoaderService.java
@@ -136,6 +136,11 @@ public class DefaultSystemDataLoaderService implements SystemDataLoaderService {
adminSettingsService.saveAdminSettings(TenantId.SYS_TENANT_ID, mailSettings);
}
+ @Override
+ public void createOAuth2Templates() throws Exception {
+ installScripts.createOAuth2Templates();
+ }
+
@Override
public void loadDemoData() throws Exception {
Tenant demoTenant = new Tenant();
diff --git a/application/src/main/java/org/thingsboard/server/service/install/InstallScripts.java b/application/src/main/java/org/thingsboard/server/service/install/InstallScripts.java
index 5181834b80..1b5827b6f7 100644
--- a/application/src/main/java/org/thingsboard/server/service/install/InstallScripts.java
+++ b/application/src/main/java/org/thingsboard/server/service/install/InstallScripts.java
@@ -26,11 +26,13 @@ import org.thingsboard.server.common.data.id.CustomerId;
import org.thingsboard.server.common.data.id.EntityId;
import org.thingsboard.server.common.data.id.RuleChainId;
import org.thingsboard.server.common.data.id.TenantId;
+import org.thingsboard.server.common.data.oauth2.OAuth2ClientRegistrationTemplate;
import org.thingsboard.server.common.data.rule.RuleChain;
import org.thingsboard.server.common.data.rule.RuleChainMetaData;
import org.thingsboard.server.common.data.widget.WidgetType;
import org.thingsboard.server.common.data.widget.WidgetsBundle;
import org.thingsboard.server.dao.dashboard.DashboardService;
+import org.thingsboard.server.dao.oauth2.OAuth2ConfigTemplateService;
import org.thingsboard.server.dao.rule.RuleChainService;
import org.thingsboard.server.dao.widget.WidgetTypeService;
import org.thingsboard.server.dao.widget.WidgetsBundleService;
@@ -60,6 +62,7 @@ public class InstallScripts {
public static final String DEMO_DIR = "demo";
public static final String RULE_CHAINS_DIR = "rule_chains";
public static final String WIDGET_BUNDLES_DIR = "widget_bundles";
+ public static final String OAUTH2_CONFIG_TEMPLATES_DIR = "oauth2_config_templates";
public static final String DASHBOARDS_DIR = "dashboards";
public static final String JSON_EXT = ".json";
@@ -79,6 +82,9 @@ public class InstallScripts {
@Autowired
private WidgetsBundleService widgetsBundleService;
+ @Autowired
+ private OAuth2ConfigTemplateService oAuth2TemplateService;
+
public Path getTenantRuleChainsDir() {
return Paths.get(getDataDir(), JSON_DIR, TENANT_DIR, RULE_CHAINS_DIR);
}
@@ -209,4 +215,23 @@ public class InstallScripts {
throw new RuntimeException("Unable to load dashboard from json", e);
}
}
+
+ public void createOAuth2Templates() throws Exception {
+ Path oauth2ConfigTemplatesDir = Paths.get(getDataDir(), JSON_DIR, SYSTEM_DIR, OAUTH2_CONFIG_TEMPLATES_DIR);
+ try (DirectoryStream dirStream = Files.newDirectoryStream(oauth2ConfigTemplatesDir, path -> path.toString().endsWith(JSON_EXT))) {
+ dirStream.forEach(
+ path -> {
+ try {
+ JsonNode oauth2ConfigTemplateJson = objectMapper.readTree(path.toFile());
+ OAuth2ClientRegistrationTemplate clientRegistrationTemplate = objectMapper.treeToValue(oauth2ConfigTemplateJson, OAuth2ClientRegistrationTemplate.class);
+ clientRegistrationTemplate.setTenantId(TenantId.SYS_TENANT_ID);
+ oAuth2TemplateService.saveClientRegistrationTemplate(clientRegistrationTemplate);
+ } catch (Exception e) {
+ log.error("Unable to load oauth2 config templates from json: [{}]", path.toString());
+ throw new RuntimeException("Unable to load oauth2 config templates from json", e);
+ }
+ }
+ );
+ }
+ }
}
diff --git a/application/src/main/java/org/thingsboard/server/service/install/SystemDataLoaderService.java b/application/src/main/java/org/thingsboard/server/service/install/SystemDataLoaderService.java
index 76e65deaa4..4742d30277 100644
--- a/application/src/main/java/org/thingsboard/server/service/install/SystemDataLoaderService.java
+++ b/application/src/main/java/org/thingsboard/server/service/install/SystemDataLoaderService.java
@@ -21,6 +21,8 @@ public interface SystemDataLoaderService {
void createAdminSettings() throws Exception;
+ void createOAuth2Templates() throws Exception;
+
void loadSystemWidgets() throws Exception;
void updateSystemWidgets() throws Exception;