Skip to content

Commit edf4749

Browse files
committed
begin using credentials manager
1 parent bbb2582 commit edf4749

File tree

19 files changed

+194
-115
lines changed

19 files changed

+194
-115
lines changed

app/ux-analytics/monitor/src/main/java/org/phoebus/applications/uxanalytics/monitor/UXAMonitor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
import javafx.stage.Stage;
88
import org.csstudio.display.builder.runtime.RuntimeUtil;
9-
import org.phoebus.applications.uxanalytics.monitor.backend.BackendConnection;
9+
import org.phoebus.applications.uxanalytics.monitor.backend.database.BackendConnection;
1010
import org.phoebus.applications.uxanalytics.monitor.backend.database.MongoDBConnection;
1111
import org.phoebus.applications.uxanalytics.monitor.backend.database.Neo4JConnection;
1212
import org.phoebus.applications.uxanalytics.monitor.representation.ActiveWindowsService;

app/ux-analytics/monitor/src/main/java/org/phoebus/applications/uxanalytics/monitor/UXAToolkitListener.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public class UXAToolkitListener implements ToolkitListener {
2828

2929
private ActiveTab tabWrapper;
3030
private final UXAMonitor monitor = UXAMonitor.getInstance();
31-
void setTabWrapper(ActiveTab tabWrapper){
31+
public void setTabWrapper(ActiveTab tabWrapper){
3232
this.tabWrapper = tabWrapper;
3333
}
3434

app/ux-analytics/monitor/src/main/java/org/phoebus/applications/uxanalytics/monitor/backend/authentication/MongoDBAuthenticationProvider.java

Lines changed: 0 additions & 21 deletions
This file was deleted.

app/ux-analytics/monitor/src/main/java/org/phoebus/applications/uxanalytics/monitor/backend/authentication/S3AuthenticationProvider.java

Lines changed: 0 additions & 21 deletions
This file was deleted.
Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.phoebus.applications.uxanalytics.monitor.backend;
1+
package org.phoebus.applications.uxanalytics.monitor.backend.database;
22

33
import org.csstudio.display.builder.model.Widget;
44
import org.csstudio.display.builder.model.properties.ActionInfo;
@@ -11,15 +11,14 @@
1111
public interface BackendConnection {
1212
public Boolean connect(String hostOrRegion, Integer port, String usernameOrAccessKey, String passwordOrSecretKey);
1313
public default String getProtocol(){return "";}
14-
public default String getDefaultHost(){return "localhost";}
15-
public default String getDefaultPort(){return "";}
14+
public default String getHost(){return "localhost";}
15+
public default String getPort(){return "";}
1616
public default String getDefaultUsername(){return "";}
1717
public default Integer tearDown(){return -1;}
1818
public default void setImageClient(ImageClient imageClient){}
1919
public default void handleClick(ActiveTab who, Widget widget, Integer x, Integer y){}
2020
public default void handleClick(ActiveTab who, Integer x, Integer y){this.handleClick(who, null, x, y);}
2121
public default void handleAction(ActiveTab who, Widget widget, ActionInfo info){}
22-
public default void handleDisplayOpen(ActiveTab who, Widget widget, DisplayInfo targetDisplayInfo){};
2322
public default void handlePVWrite(ActiveTab who, Widget widget, String PVName, String value){};
2423
public default void handleDisplayOpen(DisplayInfo target, DisplayInfo src, ResourceOpenSources how){};
2524
}

app/ux-analytics/monitor/src/main/java/org/phoebus/applications/uxanalytics/monitor/backend/database/MongoDBConnection.java

Lines changed: 46 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.mongodb.ConnectionString;
44
import com.mongodb.MongoClientSettings;
5+
import com.mongodb.MongoCredential;
56
import com.mongodb.client.MongoClient;
67
import com.mongodb.client.MongoClients;
78
import com.mongodb.client.MongoDatabase;
@@ -22,12 +23,14 @@
2223
import org.bson.Document;
2324
import org.bson.UuidRepresentation;
2425
import org.csstudio.display.builder.runtime.app.DisplayRuntimeInstance;
25-
import org.phoebus.applications.uxanalytics.monitor.backend.BackendConnection;
26+
import org.phoebus.applications.uxanalytics.monitor.backend.image.FilesystemImageClient;
27+
import org.phoebus.applications.uxanalytics.monitor.backend.image.S3ImageClient;
2628
import org.phoebus.applications.uxanalytics.monitor.util.FileUtils;
2729
import org.phoebus.applications.uxanalytics.monitor.backend.image.ImageClient;
2830
import org.phoebus.applications.uxanalytics.monitor.backend.image.MongoDBImageClient;
2931
import org.phoebus.applications.uxanalytics.monitor.UXAMonitor;
3032
import org.phoebus.applications.uxanalytics.monitor.representation.ActiveTab;
33+
import org.phoebus.framework.preferences.PhoebusPreferenceService;
3134

3235
public class MongoDBConnection implements BackendConnection {
3336

@@ -39,6 +42,24 @@ public class MongoDBConnection implements BackendConnection {
3942
private MongoDatabase database = null;
4043
private ImageClient imageClient = null;
4144

45+
static final String COLLECTION = PhoebusPreferenceService
46+
.userNodeForClass(MongoDBConnection.class)
47+
.get("click-collection","clicks");
48+
49+
static final String DATABASE = PhoebusPreferenceService
50+
.userNodeForClass(MongoDBConnection.class)
51+
.get("database","phoebus-analytics");
52+
53+
public static MongoDBConnection instance;
54+
public static MongoDBConnection getInstance(){
55+
if(instance == null){
56+
instance = new MongoDBConnection();
57+
}
58+
return instance;
59+
}
60+
61+
private MongoDBConnection(){}
62+
4263
@Override
4364
public Boolean connect(String hostname, Integer port, String username, String password) {
4465
String uri;
@@ -52,8 +73,21 @@ public Boolean connect(String hostname, Integer port, String username, String pa
5273
.uuidRepresentation(UuidRepresentation.STANDARD)
5374
.build();
5475
mongoClient = MongoClients.create(settings);
55-
database = mongoClient.getDatabase("phoebus-analytics");
56-
database.createCollection("clicks");
76+
database = mongoClient.getDatabase(DATABASE);
77+
database.createCollection(COLLECTION);
78+
switch(PhoebusPreferenceService.userNodeForClass(MongoDBConnection.class).get("image-provider","mongodb"))
79+
{
80+
case "filesystem":
81+
this.setImageClient(FilesystemImageClient.getInstance());
82+
break;
83+
case "s3":
84+
this.setImageClient(S3ImageClient.getInstance());
85+
break;
86+
case "mongodb":
87+
default:
88+
this.setImageClient(MongoDBImageClient.getInstance());
89+
90+
}
5791
UXAMonitor.getInstance().notifyConnectionChange(this);
5892
return true;
5993
} catch (Exception ex) {
@@ -68,8 +102,13 @@ public String getProtocol() {
68102
}
69103

70104
@Override
71-
public String getDefaultPort() {
72-
return "27017";
105+
public String getHost(){
106+
return PhoebusPreferenceService.userNodeForClass(this.getClass()).get("host", "localhost");
107+
}
108+
109+
@Override
110+
public String getPort() {
111+
return PhoebusPreferenceService.userNodeForClass(this.getClass()).get("port", "27017");
73112
}
74113

75114
public Integer connect(String host, String port, String user, String password, ImageClient imageClient) {
@@ -103,6 +142,7 @@ static BufferedImage getSnapshot(ActiveTab who) {
103142

104143
@Override
105144
public void handleClick(ActiveTab who, Integer x, Integer y) {
145+
//if another image client hasn't been set up yet, default to a collection in the MongoDB database
106146
if(database != null && imageClient == null){
107147
imageClient = MongoDBImageClient.getInstance();
108148
((MongoDBImageClient) imageClient).connect(mongoClient);
@@ -132,7 +172,7 @@ public void handleClick(ActiveTab who, Integer x, Integer y) {
132172
.append("path", path)
133173
.append("time", Instant.now().getEpochSecond());
134174
try {
135-
database.getCollection("clicks").insertOne(clickEvent);
175+
database.getCollection(COLLECTION).insertOne(clickEvent);
136176
} catch (Exception ex) {
137177
logger.log(Level.WARNING, "Failed to write click event to MongoDB", ex);
138178
}

app/ux-analytics/monitor/src/main/java/org/phoebus/applications/uxanalytics/monitor/backend/database/Neo4JConnection.java

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@
88
import org.csstudio.display.builder.model.util.ModelResourceUtil;
99
import org.csstudio.display.builder.runtime.app.DisplayInfo;
1010
import org.neo4j.driver.*;
11-
import org.phoebus.applications.uxanalytics.monitor.backend.BackendConnection;
1211
import org.phoebus.applications.uxanalytics.monitor.util.FileUtils;
1312
import org.phoebus.applications.uxanalytics.monitor.util.ResourceOpenSources;
1413
import org.phoebus.applications.uxanalytics.monitor.representation.ActiveTab;
14+
import org.phoebus.framework.preferences.PhoebusPreferenceService;
1515

1616
import java.time.Instant;
1717
import java.util.Map;
@@ -40,8 +40,18 @@ public class Neo4JConnection implements BackendConnection {
4040

4141
public static final String PROTOCOL = "neo4j://";
4242

43+
public static Neo4JConnection instance;
44+
public static Neo4JConnection getInstance(){
45+
if(instance == null){
46+
instance = new Neo4JConnection();
47+
}
48+
return instance;
49+
}
50+
4351
private Session session;
4452

53+
private Neo4JConnection(){}
54+
4555
@Override
4656
public Boolean connect(String host, Integer port, String username, String password) {
4757
try {
@@ -50,7 +60,9 @@ public Boolean connect(String host, Integer port, String username, String passwo
5060
logger.log(Level.INFO, "Connected to " + host + " on port " + port + " as " + username);
5161
session = driver.session(
5262
SessionConfig.builder()
53-
.withDatabase("neo4j")
63+
.withDatabase(
64+
PhoebusPreferenceService.userNodeForClass(FileUtils.class)
65+
.get("database", "neo4j"))
5466
.build());
5567
return true;
5668
} catch (Exception ex) {
@@ -65,8 +77,13 @@ public String getProtocol() {
6577
}
6678

6779
@Override
68-
public String getDefaultPort() {
69-
return "7687";
80+
public String getHost(){
81+
return PhoebusPreferenceService.userNodeForClass(this.getClass()).get("host", "localhost");
82+
}
83+
84+
@Override
85+
public String getPort() {
86+
return PhoebusPreferenceService.userNodeForClass(this.getClass()).get("port", "7687");
7087
}
7188

7289
@Override

app/ux-analytics/monitor/src/main/java/org/phoebus/applications/uxanalytics/monitor/backend/database/NoopBackendConnection.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import org.csstudio.display.builder.model.Widget;
44
import org.csstudio.display.builder.model.properties.ActionInfo;
5-
import org.phoebus.applications.uxanalytics.monitor.backend.BackendConnection;
65
import org.phoebus.applications.uxanalytics.monitor.representation.ActiveTab;
76

87
import java.util.logging.Level;
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package org.phoebus.applications.uxanalytics.monitor.backend.database.authentication;
2+
3+
import org.phoebus.applications.uxanalytics.monitor.backend.database.MongoDBConnection;
4+
import org.phoebus.security.authorization.ServiceAuthenticationProvider;
5+
import org.phoebus.security.tokens.AuthenticationScope;
6+
7+
public class MongoDBAuthenticationProvider implements ServiceAuthenticationProvider {
8+
9+
@Override
10+
public void authenticate(String username, String password) {
11+
MongoDBConnection connection = MongoDBConnection.getInstance();
12+
MongoDBConnection.getInstance().connect(connection.getHost(), Integer.parseInt(connection.getPort()), username, password);
13+
14+
}
15+
16+
@Override
17+
public void logout(String token) {
18+
19+
}
20+
21+
@Override
22+
public AuthenticationScope getAuthenticationScope() {
23+
return AuthenticationScope.MONGODB;
24+
}
25+
}
Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1-
package org.phoebus.applications.uxanalytics.monitor.backend.authentication;
1+
package org.phoebus.applications.uxanalytics.monitor.backend.database.authentication;
22

33
import org.phoebus.security.authorization.ServiceAuthenticationProvider;
44
import org.phoebus.security.tokens.AuthenticationScope;
55

66
public class Neo4JAuthenticationProvider implements ServiceAuthenticationProvider {
7+
8+
79
@Override
810
public void authenticate(String username, String password) {
911

@@ -16,6 +18,6 @@ public void logout(String token) {
1618

1719
@Override
1820
public AuthenticationScope getAuthenticationScope() {
19-
return null;
21+
return AuthenticationScope.NEO4J;
2022
}
2123
}

0 commit comments

Comments
 (0)