2727import com .epam .reportportal .base .infrastructure .commons .ContentTypeResolver ;
2828import com .epam .reportportal .base .infrastructure .persistence .binary .UserBinaryDataService ;
2929import com .epam .reportportal .base .infrastructure .persistence .dao .IntegrationRepository ;
30+ import com .epam .reportportal .base .infrastructure .persistence .dao .IntegrationTypeRepository ;
3031import com .epam .reportportal .base .infrastructure .persistence .dao .ProjectRepository ;
3132import com .epam .reportportal .base .infrastructure .persistence .dao .UserRepository ;
3233import com .epam .reportportal .base .infrastructure .persistence .entity .enums .IntegrationAuthFlowEnum ;
3637import com .epam .reportportal .extension .IntegrationGroupEnum ;
3738import com .epam .reportportal .extension .PluginCommand ;
3839import com .epam .reportportal .extension .github .command .SynchronizeGithubUserCommand ;
40+ import com .epam .reportportal .extension .github .event .listener .PluginLoadedEventListener ;
3941import com .epam .reportportal .extension .github .oauth .GitHubOAuthProvider ;
4042import com .epam .reportportal .extension .github .service .GitHubIntegrationStrategy ;
4143import com .epam .reportportal .extension .github .service .GitHubRequiredParamNamesProvider ;
4244import com .epam .reportportal .extension .github .utils .MemoizingSupplier ;
4345import jakarta .annotation .PostConstruct ;
46+ import java .io .IOException ;
4447import java .util .ArrayList ;
4548import java .util .HashMap ;
4649import java .util .Map ;
4750import java .util .Optional ;
4851import java .util .function .Supplier ;
52+ import javax .sql .DataSource ;
4953import lombok .extern .slf4j .Slf4j ;
5054import org .jasypt .util .text .BasicTextEncryptor ;
5155import org .pf4j .Extension ;
56+ import org .springframework .beans .factory .DisposableBean ;
5257import org .springframework .beans .factory .annotation .Autowired ;
58+ import org .springframework .context .ApplicationContext ;
59+ import org .springframework .context .event .ApplicationEventMulticaster ;
60+ import org .springframework .context .support .AbstractApplicationContext ;
5361import org .springframework .security .authentication .AuthenticationProvider ;
5462import org .springframework .security .core .Authentication ;
5563
5866 */
5967@ Extension
6068@ Slf4j
61- public class GitHubExtension implements AuthExtension {
69+ public class GitHubExtension implements AuthExtension , DisposableBean {
6270
6371 public static final String SSO_LOGIN_PATH = "/oauth/login" ;
64- public static final String SCHEMA_SCRIPTS_DIR = "schema" ;
72+ public static final String SCHEMA_SCRIPTS_DIR = "resources/ schema" ;
6573
74+ private static final String PLUGIN_ID = "github" ;
6675 private static final String PLUGIN_NAME = "GitHub OAuth Plugin" ;
6776 private static final String DOCUMENTATION_LINK = "https://reportportal.io/docs/plugins/authorization/GitHubAuthorization" ;
6877 private static final String DOCUMENTATION_LINK_FIELD = "documentationLink" ;
@@ -80,6 +89,12 @@ public boolean supports(Class<?> authentication) {
8089 }
8190 };
8291
92+ @ Autowired
93+ private ApplicationContext applicationContext ;
94+
95+ @ Autowired
96+ private IntegrationTypeRepository integrationTypeRepository ;
97+
8398 @ Autowired
8499 private UserRepository userRepository ;
85100
@@ -107,21 +122,29 @@ public boolean supports(Class<?> authentication) {
107122 @ Autowired
108123 private BasicTextEncryptor encryptor ;
109124
125+ @ Autowired
126+ private DataSource dataSource ;
127+
110128 private GitHubUserReplicator replicator ;
111129 private GitHubOAuthProvider oauthProvider ;
112130 private Map <String , CommonPluginCommand <?>> commonCommands ;
113131
114132 private Supplier <GitHubIntegrationStrategy > gitHubIntegrationStrategySupplier ;
133+ private Supplier <PluginLoadedEventListener > pluginLoadedListenerSupplier ;
115134
116135
117136 @ PostConstruct
118- public void init () {
137+ public void init () throws IOException {
119138 log .info ("Initializing GitHub OAuth extension" );
120139 this .gitHubIntegrationStrategySupplier = new MemoizingSupplier <>(
121140 () -> new GitHubIntegrationStrategy (integrationRepository ,
122141 new UpdateAuthRequestValidator (new GitHubRequiredParamNamesProvider ()), integrationDuplicateValidator ,
123142 encryptor ));
124143
144+ this .pluginLoadedListenerSupplier = new MemoizingSupplier <>(
145+ () -> new PluginLoadedEventListener (PLUGIN_ID , integrationTypeRepository , integrationRepository ,
146+ integrationType -> integrationType , dataSource ));
147+
125148 replicator = new GitHubUserReplicator (
126149 userRepository , projectRepository , personalProjectService ,
127150 userBinaryDataService , contentTypeResolver , userEventPublisher
@@ -130,8 +153,24 @@ public void init() {
130153 SynchronizeGithubUserCommand syncCommand = new SynchronizeGithubUserCommand (replicator );
131154 commonCommands = Map .of (syncCommand .getName (), syncCommand );
132155
133- /* initApplicationListeners();
134- initSchema();*/
156+ initListeners ();
157+ }
158+
159+ private void initListeners () {
160+ ApplicationEventMulticaster applicationEventMulticaster = applicationContext .getBean (
161+ AbstractApplicationContext .APPLICATION_EVENT_MULTICASTER_BEAN_NAME ,
162+ ApplicationEventMulticaster .class
163+ );
164+ applicationEventMulticaster .addApplicationListener (pluginLoadedListenerSupplier .get ());
165+ }
166+
167+ @ Override
168+ public void destroy () {
169+ ApplicationEventMulticaster applicationEventMulticaster = applicationContext .getBean (
170+ AbstractApplicationContext .APPLICATION_EVENT_MULTICASTER_BEAN_NAME ,
171+ ApplicationEventMulticaster .class
172+ );
173+ applicationEventMulticaster .removeApplicationListener (pluginLoadedListenerSupplier .get ());
135174 }
136175
137176 @ Override
0 commit comments