diff --git a/src/main/java/com/redhat/sso/ninja/ChatNotification.java b/src/main/java/com/redhat/sso/ninja/ChatNotification.java new file mode 100644 index 00000000..a0d2025a --- /dev/null +++ b/src/main/java/com/redhat/sso/ninja/ChatNotification.java @@ -0,0 +1,32 @@ +package com.redhat.sso.ninja; + +import com.redhat.sso.ninja.utils.Http; +import com.redhat.sso.ninja.utils.Http.Response; +import com.redhat.sso.ninja.utils.MapBuilder; + +public class ChatNotification{ + + public static void main(String[] asd){ + Config c=Config.get(); + System.out.println("googlehangoutschat.webhook.notifications.enabled="+c.getOptions().get("googlehangoutschat.webhook.notifications.enabled")); + System.out.println("googlehangoutschat.webhook.url="+c.getOptions().get("googlehangoutschat.webhook.url")); + System.out.println("googlehangoutschat.webhook.template="+c.getOptions().get("googlehangoutschat.webhook.template")); + + new ChatNotification().send("test - please ignore"); + } + + public void send(String notificationText){ + Config c=Config.get(); + boolean enabled= "true".equalsIgnoreCase(c.getOptions().get("googlehangoutschat.webhook.notifications.enabled")); + if (enabled){ + System.out.println("Sending notification..."); + // https://developers.google.com/hangouts/chat/how-tos/webhooks + String url= c.getOptions().get("googlehangoutschat.webhook.url"); + String template= c.getOptions().get("googlehangoutschat.webhook.template"); + String googleHangoutsChatPayload=String.format(template, notificationText); + + Response r=Http.post(url, googleHangoutsChatPayload, new MapBuilder().put("Content-Type", "application/json; charset=UTF-8").build()); + System.out.println("Response = "+r.getResponseCode()); + } + } +} diff --git a/src/main/java/com/redhat/sso/ninja/Database2.java b/src/main/java/com/redhat/sso/ninja/Database2.java index 2c9bd1ed..ebe2de0b 100644 --- a/src/main/java/com/redhat/sso/ninja/Database2.java +++ b/src/main/java/com/redhat/sso/ninja/Database2.java @@ -136,6 +136,7 @@ public void addEvent(String type, String user, String text){ getEvents().remove(0); } } + // user is the target user: ie. fbloggs public void addTask(String taskText, String user){ Map task=new HashMap(); task.put(TASK_FIELDS.TIMESTAMP.v, sdf2.format(new Date())); diff --git a/src/main/java/com/redhat/sso/ninja/Heartbeat2.java b/src/main/java/com/redhat/sso/ninja/Heartbeat2.java index 5f342a54..47860329 100644 --- a/src/main/java/com/redhat/sso/ninja/Heartbeat2.java +++ b/src/main/java/com/redhat/sso/ninja/Heartbeat2.java @@ -28,6 +28,7 @@ import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; +import com.redhat.sso.ninja.Database2.TASK_FIELDS; import com.redhat.sso.ninja.user.UserService; import com.redhat.sso.ninja.user.UserService.User; import com.redhat.sso.ninja.utils.DownloadFile; @@ -206,6 +207,10 @@ public boolean addNewlyRegisteredUsers(Database2 db){ db.addEvent("New User Registered", userInfo.get("username"), ""); + // Notify everyone on the Ninja chat group of a new registree + String displayName=userInfo.containsKey("displayName")?userInfo.get("displayName"):userInfo.get("username"); + new ChatNotification().send("New User Registered: "); + }else if (dbUsers.containsKey(userInfo.get("username"))){ log.debug("User already registered: "+userInfo.get("username")); } @@ -480,9 +485,13 @@ public void levelUpChecks(Database2 db){ userInfo.put("levelChanged", new SimpleDateFormat("yyyy-MM-dd").format(new Date()));// nextLevel.getRight()); db.addEvent("User Promotion", userInfo.get("username"), "Promoted to "+nextLevel.getRight()+" level"); - // db.getEvents().add("User Promotion: ["+userInfo.get("username") +"] was promoted to level ["+nextLevel.getRight()+"]"); - db.addTask(userInfo.get("username")+" promoted to "+nextLevel.getRight()+" belt", userInfo.get("username")); + String displayName=userInfo.containsKey("displayName")?userInfo.get("displayName"):userInfo.get("username"); + String title=displayName+" promoted to "+nextLevel.getRight()+" belt"; + db.addTask(title, userInfo.get("username")); + + // Notify everyone on the Ninja chat group of a new belt promotion + new ChatNotification().send(title); count+=1; } diff --git a/src/main/java/com/redhat/sso/ninja/utils/Http.java b/src/main/java/com/redhat/sso/ninja/utils/Http.java index 92fdbd58..20c2157e 100644 --- a/src/main/java/com/redhat/sso/ninja/utils/Http.java +++ b/src/main/java/com/redhat/sso/ninja/utils/Http.java @@ -6,6 +6,8 @@ import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; +import java.util.Map; +import java.util.Map.Entry; import org.apache.log4j.Logger; @@ -30,20 +32,29 @@ public String getString(){ } public static Response get(String url){ - return http("GET", url, null); + return http("GET", url, null, null); } public static Response post(String url, String data){ - return http("POST", url, data); + return http("POST", url, data, null); + } + public static Response post(String url, String data, Map headers){ + return http("POST", url, data, headers); } - public static synchronized Response http(String method, String url, String data){ + public static synchronized Response http(String method, String url, String data, Map headers){ try { // log.info("Http call '"+method+"' to '"+url+"'"+(null!=data?" (with data length of "+data.length()+" characters)":"")); URL obj=new URL(url); HttpURLConnection cnn=(HttpURLConnection)obj.openConnection(); cnn.setRequestMethod(method.toUpperCase()); + if (headers!=null){ + for(Entry e:headers.entrySet()){ + cnn.setRequestProperty(e.getKey(), e.getValue()); + } + } + if ("POST".equalsIgnoreCase(method) && null!=data){ cnn.setDoOutput(true); OutputStream os = cnn.getOutputStream(); diff --git a/src/main/resources/config.json b/src/main/resources/config.json index 3acfb344..ac91cbb8 100644 --- a/src/main/resources/config.json +++ b/src/main/resources/config.json @@ -26,7 +26,10 @@ "ldap.enabled": "true", "_users.ldap.provider": "ldap://server.example.com:123", "users.ldap.baseDN": "ou=users,dc=redhat,dc=com", - "users.ldap.searchDN": "(&(objectclass=Person)(%s=%s))" + "users.ldap.searchDN": "(&(objectclass=Person)(%s=%s))", + "googlehangoutschat.webhook.notifications.enabled": "false", + "googlehangoutschat.webhook.template": "{\"text\":\"%s\"}", + "googlehangoutschat.webhook.url": "" }, "values": { "lastRun2": "2019-03-01T00:00:00" diff --git a/src/main/webapp/mojo-miniBeltWidget,jsp b/src/main/webapp/mojo-miniBeltWidget.jsp similarity index 100% rename from src/main/webapp/mojo-miniBeltWidget,jsp rename to src/main/webapp/mojo-miniBeltWidget.jsp