Skip to content

Commit

Permalink
Enchanced profile management (#68)
Browse files Browse the repository at this point in the history
* Proof of concept of adding 3PIDs data to user profile
* Document reverse proxy apache config
* Support for Matrix Gateway project roles' endpoint
* Fix conflicting ThreePid object defined in SDK and mxisd projects
  • Loading branch information
Max Dor authored Mar 25, 2018
1 parent 3fc8646 commit a962712
Show file tree
Hide file tree
Showing 31 changed files with 413 additions and 112 deletions.
12 changes: 12 additions & 0 deletions docs/features/profile.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Profile enhancement

## Configuration

### Reverse proxy

#### Apache
```
ProxyPassMatch "^/_matrix/client/r0/profile/([^/]+)$" "http://127.0.0.1:8090/_matrix/client/r0/profile/$1"
ProxyPassMatch "^/_matrix/client/r0/profile/([^/]+)/(.+)" "http://127.0.0.1:8008/_matrix/client/r0/profile/$1/$2"
```
69 changes: 0 additions & 69 deletions src/main/java/io/kamax/mxisd/ThreePid.java

This file was deleted.

2 changes: 1 addition & 1 deletion src/main/java/io/kamax/mxisd/auth/AuthManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@
package io.kamax.mxisd.auth;

import io.kamax.matrix.MatrixID;
import io.kamax.matrix.ThreePid;
import io.kamax.matrix._MatrixID;
import io.kamax.mxisd.ThreePid;
import io.kamax.mxisd.UserIdType;
import io.kamax.mxisd.auth.provider.AuthenticatorProvider;
import io.kamax.mxisd.auth.provider.BackendAuthResult;
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/io/kamax/mxisd/auth/UserAuthResult.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@

package io.kamax.mxisd.auth;

import io.kamax.mxisd.ThreePid;
import io.kamax.matrix.ThreePid;

import java.util.Collections;
import java.util.HashSet;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@

package io.kamax.mxisd.auth.provider;

import io.kamax.mxisd.ThreePid;
import io.kamax.matrix.ThreePid;
import io.kamax.mxisd.UserID;
import io.kamax.mxisd.UserIdType;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@
import com.google.firebase.auth.UserInfo;
import com.google.i18n.phonenumbers.NumberParseException;
import com.google.i18n.phonenumbers.PhoneNumberUtil;
import io.kamax.matrix.ThreePid;
import io.kamax.matrix.ThreePidMedium;
import io.kamax.matrix._MatrixID;
import io.kamax.mxisd.ThreePid;
import io.kamax.mxisd.UserIdType;
import io.kamax.mxisd.auth.provider.AuthenticatorProvider;
import io.kamax.mxisd.auth.provider.BackendAuthResult;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@

import com.google.i18n.phonenumbers.NumberParseException;
import com.google.i18n.phonenumbers.PhoneNumberUtil;
import io.kamax.matrix.ThreePid;
import io.kamax.matrix.ThreePidMedium;
import io.kamax.matrix._MatrixID;
import io.kamax.mxisd.ThreePid;
import io.kamax.mxisd.UserIdType;
import io.kamax.mxisd.auth.provider.AuthenticatorProvider;
import io.kamax.mxisd.auth.provider.BackendAuthResult;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import io.kamax.matrix.MatrixID;
import io.kamax.matrix.ThreePid;
import io.kamax.matrix._MatrixID;
import io.kamax.matrix._ThreePid;
import io.kamax.mxisd.UserIdType;
import io.kamax.mxisd.auth.provider.AuthenticatorProvider;
import io.kamax.mxisd.auth.provider.BackendAuthResult;
Expand All @@ -34,18 +35,20 @@
import io.kamax.mxisd.lookup.SingleLookupRequest;
import io.kamax.mxisd.lookup.ThreePidMapping;
import io.kamax.mxisd.lookup.provider.IThreePidProvider;
import io.kamax.mxisd.profile.ProfileProvider;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Optional;

@Component
public class MemoryIdentityStore implements AuthenticatorProvider, IThreePidProvider {
public class MemoryIdentityStore implements AuthenticatorProvider, IThreePidProvider, ProfileProvider {

private final Logger logger = LoggerFactory.getLogger(MemoryIdentityStore.class);

Expand All @@ -59,14 +62,30 @@ public MemoryIdentityStore(MatrixConfig mxCfg, MemoryStoreConfig cfg) {
}

public Optional<MemoryIdentityConfig> findByUsername(String username) {
return cfg.getIdentities().stream().filter(id -> StringUtils.equals(id.getUsername(), username)).findFirst();
return cfg.getIdentities().stream()
.filter(id -> StringUtils.equals(id.getUsername(), username))
.findFirst();
}

@Override
public boolean isEnabled() {
return cfg.isEnabled();
}

@Override
public List<_ThreePid> getThreepids(_MatrixID mxid) {
List<_ThreePid> l = new ArrayList<>();
findByUsername(mxid.getLocalPart()).ifPresent(c -> l.addAll(c.getThreepids()));
return l;
}

@Override
public List<String> getRoles(_MatrixID mxid) {
List<String> l = new ArrayList<>();
findByUsername(mxid.getLocalPart()).ifPresent(c -> l.addAll(c.getRoles()));
return l;
}

@Override
public boolean isLocal() {
return true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,16 @@
package io.kamax.mxisd.backend.sql;

import io.kamax.matrix.MatrixID;
import io.kamax.matrix.ThreePid;
import io.kamax.matrix._MatrixID;
import io.kamax.matrix._ThreePid;
import io.kamax.mxisd.config.MatrixConfig;
import io.kamax.mxisd.config.sql.SqlConfig;
import io.kamax.mxisd.lookup.SingleLookupReply;
import io.kamax.mxisd.lookup.SingleLookupRequest;
import io.kamax.mxisd.lookup.ThreePidMapping;
import io.kamax.mxisd.lookup.provider.IThreePidProvider;
import io.kamax.mxisd.profile.ProfileProvider;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand All @@ -36,10 +40,11 @@
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Optional;

public abstract class SqlThreePidProvider implements IThreePidProvider {
public abstract class SqlThreePidProvider implements IThreePidProvider, ProfileProvider {

private Logger log = LoggerFactory.getLogger(SqlThreePidProvider.class);

Expand Down Expand Up @@ -109,4 +114,31 @@ public List<ThreePidMapping> populate(List<ThreePidMapping> mappings) {
return new ArrayList<>();
}

@Override
public List<_ThreePid> getThreepids(_MatrixID mxid) {
List<_ThreePid> threepids = new ArrayList<>();

String stmtSql = cfg.getProfile().getThreepid().getQuery();
try (Connection conn = pool.get()) {
PreparedStatement stmt = conn.prepareStatement(stmtSql);
stmt.setString(1, mxid.getId());

ResultSet rSet = stmt.executeQuery();
while (rSet.next()) {
String medium = rSet.getString("medium");
String address = rSet.getString("address");
threepids.add(new ThreePid(medium, address));
}

return threepids;
} catch (SQLException e) {
throw new RuntimeException(e);
}
}

@Override
public List<String> getRoles(_MatrixID mxid) {
return Collections.emptyList();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@

package io.kamax.mxisd.backend.wordpress;

import io.kamax.matrix.ThreePid;
import io.kamax.matrix._MatrixID;
import io.kamax.mxisd.ThreePid;
import io.kamax.mxisd.UserIdType;
import io.kamax.mxisd.auth.provider.AuthenticatorProvider;
import io.kamax.mxisd.auth.provider.BackendAuthResult;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@
package io.kamax.mxisd.backend.wordpress;

import io.kamax.matrix.MatrixID;
import io.kamax.matrix.ThreePid;
import io.kamax.matrix._MatrixID;
import io.kamax.mxisd.ThreePid;
import io.kamax.mxisd.config.MatrixConfig;
import io.kamax.mxisd.config.wordpress.WordpressConfig;
import io.kamax.mxisd.lookup.SingleLookupReply;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ public class MemoryIdentityConfig {
private String username;
private String password;
private List<MemoryThreePid> threepids = new ArrayList<>();
private List<String> roles = new ArrayList<>();

public String getUsername() {
return username;
Expand All @@ -56,4 +57,12 @@ public void setThreepids(List<MemoryThreePid> threepids) {
this.threepids = threepids;
}

public List<String> getRoles() {
return roles;
}

public void setRoles(List<String> roles) {
this.roles = roles;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,16 @@

package io.kamax.mxisd.config.memory;

import io.kamax.matrix._ThreePid;
import org.springframework.stereotype.Component;

@Component
public class MemoryThreePid {
public class MemoryThreePid implements _ThreePid {

private String medium;
private String address;

@Override
public String getMedium() {
return medium;
}
Expand All @@ -36,6 +38,7 @@ public void setMedium(String medium) {
this.medium = medium;
}

@Override
public String getAddress() {
return address;
}
Expand Down
Loading

0 comments on commit a962712

Please sign in to comment.