package alien4cloud.security.spring.github;
import java.util.List;
import java.util.Set;
import lombok.extern.slf4j.Slf4j;
import org.elasticsearch.common.collect.Lists;
import org.elasticsearch.common.collect.Sets;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Profile;
import org.springframework.social.connect.Connection;
import org.springframework.social.connect.ConnectionKey;
import org.springframework.social.connect.ConnectionRepository;
import org.springframework.social.connect.UsersConnectionRepository;
import org.springframework.util.MultiValueMap;
import alien4cloud.security.model.User;
import alien4cloud.security.users.IAlienUserDao;
@Slf4j
@Profile("github-auth")
public class AlienUserConnectionRepository implements UsersConnectionRepository {
private IAlienUserDao alienUserDao;
@Autowired
public AlienUserConnectionRepository(IAlienUserDao alienUserDao) {
this.alienUserDao = alienUserDao;
}
@Override
public List<String> findUserIdsWithConnection(Connection<?> connection) {
ConnectionKey key = connection.getKey();
String userId = key.getProviderId() + "::" + key.getProviderUserId();
User user = alienUserDao.find(userId);
if (user == null) {
user = new User();
user.setUsername(userId);
user.setFirstName(connection.getDisplayName());
alienUserDao.save(user);
return Lists.newArrayList(userId);
// TODO what connexion(s) means in spring sec ?
// createConnectionRepository(newUserId).addConnection(connection);
}
return Lists.newArrayList(userId);
}
@Override
public Set<String> findUserIdsConnectedTo(String providerId, Set<String> providerUserIds) {
log.info("Called findUserIdsConnectedTo with parameters ", providerId, providerUserIds);
return Sets.newHashSet();
}
@Override
public ConnectionRepository createConnectionRepository(String userId) {
if (userId == null) {
throw new IllegalArgumentException("userId cannot be null");
}
return new ConnectionRepository() {
@Override
public void updateConnection(Connection<?> connection) {
log.info("Update a connection", connection);
}
@Override
public void removeConnections(String providerId) {
log.info("Remove all provider connection's", providerId);
}
@Override
public void removeConnection(ConnectionKey connectionKey) {
log.info("Remove connection by key ", connectionKey);
}
@Override
public <A> Connection<A> getPrimaryConnection(Class<A> apiType) {
log.info("Request primary connection by api ", apiType);
return null;
}
@Override
public <A> Connection<A> getConnection(Class<A> apiType, String providerUserId) {
log.info("Request connection by api and user ", apiType, providerUserId);
return null;
}
@Override
public Connection<?> getConnection(ConnectionKey connectionKey) {
log.info("Request connection by key ", connectionKey);
return null;
}
@Override
public <A> Connection<A> findPrimaryConnection(Class<A> apiType) {
log.info("Request all connections for api", apiType);
return null;
}
@Override
public MultiValueMap<String, Connection<?>> findConnectionsToUsers(MultiValueMap<String, String> providerUserIds) {
log.info("Request all connections for users", providerUserIds);
return null;
}
@Override
public <A> List<Connection<A>> findConnections(Class<A> apiType) {
log.info("Request all connections api", apiType);
return null;
}
@Override
public List<Connection<?>> findConnections(String providerId) {
log.info("Request all connections for provider", providerId);
return null;
}
@Override
public MultiValueMap<String, Connection<?>> findAllConnections() {
log.info("Request all connections");
return null;
}
@Override
public void addConnection(Connection<?> connection) {
log.info("Add connection ", connection);
}
};
}
}