improve authentication

This commit is contained in:
Sebastian Sdorra
2010-09-09 18:35:54 +02:00
parent b0f637e203
commit 6a92e0e78e
7 changed files with 59 additions and 25 deletions

View File

@@ -11,6 +11,7 @@ package sonia.scm;
import sonia.scm.group.GroupManager;
import sonia.scm.repository.RepositoryManager;
import sonia.scm.repository.RepositoryType;
import sonia.scm.util.ServiceUtil;
import sonia.scm.util.Util;
@@ -19,6 +20,7 @@ import sonia.scm.util.Util;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -125,6 +127,18 @@ public class BasicContextProvider implements SCMContextProvider
return repositoryManagerMap.get(type);
}
/**
* Method description
*
*
* @return
*/
@Override
public List<RepositoryType> getRepositoryTypes()
{
return repositoryTypes;
}
//~--- methods --------------------------------------------------------------
/**
@@ -183,6 +197,7 @@ public class BasicContextProvider implements SCMContextProvider
private void loadRepositoryManagers()
{
repositoryManagerMap = new HashMap<String, RepositoryManager>();
repositoryTypes = new ArrayList<RepositoryType>();
List<RepositoryManager> repositoryManagers =
ServiceUtil.getServices(RepositoryManager.class);
@@ -191,6 +206,7 @@ public class BasicContextProvider implements SCMContextProvider
{
manager.init(this);
repositoryManagerMap.put(manager.getType().getName(), manager);
repositoryTypes.add(manager.getType());
}
}
@@ -204,4 +220,7 @@ public class BasicContextProvider implements SCMContextProvider
/** Field description */
private Map<String, RepositoryManager> repositoryManagerMap;
/** Field description */
private List<RepositoryType> repositoryTypes;
}

View File

@@ -11,11 +11,13 @@ package sonia.scm;
import sonia.scm.group.GroupManager;
import sonia.scm.repository.RepositoryManager;
import sonia.scm.repository.RepositoryType;
//~--- JDK imports ------------------------------------------------------------
import java.io.Closeable;
import java.io.File;
import java.util.Collection;
/**
*
@@ -59,4 +61,12 @@ public interface SCMContextProvider extends Closeable
* @return
*/
public RepositoryManager getRepositoryManager(String type);
/**
* Method description
*
*
* @return
*/
public Collection<RepositoryType> getRepositoryTypes();
}

View File

@@ -9,6 +9,7 @@ package sonia.scm.api.rest;
//~--- non-JDK imports --------------------------------------------------------
import sonia.scm.ScmState;
import sonia.scm.group.Group;
import sonia.scm.repository.Repository;
@@ -43,7 +44,7 @@ public class JsonJaxbContextResolver implements ContextResolver<JAXBContext>
{
this.context = new JSONJAXBContext(
JSONConfiguration.mapped().rootUnwrapping(true).arrays(
"member", "groups", "permissions").nonStrings(
"member", "groups", "permissions", "repositoryTypes").nonStrings(
"readable", "writeable", "groupPermission").build(), types.toArray(
new Class[0]));
}
@@ -73,5 +74,5 @@ public class JsonJaxbContextResolver implements ContextResolver<JAXBContext>
/** Field description */
private List<Class> types = Arrays.asList(new Class[] { Group.class,
Repository.class });
Repository.class, ScmState.class });
}

View File

@@ -9,9 +9,10 @@ package sonia.scm.api.rest.resources;
//~--- non-JDK imports --------------------------------------------------------
import sonia.scm.repository.RepositoryType;
import sonia.scm.SCMContext;
import sonia.scm.ScmState;
import sonia.scm.User;
import sonia.scm.repository.RepositoryType;
import sonia.scm.security.Authenticator;
//~--- JDK imports ------------------------------------------------------------
@@ -41,15 +42,6 @@ import javax.ws.rs.core.Response;
public class AuthenticationResource
{
/** Field description */
private static final RepositoryType[] types = new RepositoryType[] {
new RepositoryType("hg",
"Mercurial"),
new RepositoryType("svn", "Subversion"),
new RepositoryType("git", "Git") };
//~--- get methods ----------------------------------------------------------
/**
* Method description
*
@@ -120,7 +112,9 @@ public class AuthenticationResource
ScmState state = new ScmState();
state.setUser(user);
state.setRepositoryTypes(types);
state.setRepositoryTypes(
SCMContext.getContext().getRepositoryTypes().toArray(
new RepositoryType[0]));
return state;
}

View File

@@ -4,14 +4,23 @@
*/
var debug = true;
var state = null;
/*var repositoryTypes = [ ['Mercurial', 'hg'], ['Subversion','svn'], ['Git','git'] ];*/
var authCallbacks = [];
var repositoryTypeStore = new Ext.data.JsonStore({
id: 1,
fields: [ 'displayName', 'name' ]
});
var restUrl = "api/rest/";
var restUrl = "api/rest/";
function loadState(s){
state = s;
console.debug( s );
repositoryTypeStore.loadData(state.repositoryTypes);
Ext.each(authCallbacks, function(callback){
if ( Ext.isFunction(callback) ){
callback(state);
}
});
}

View File

@@ -113,20 +113,21 @@ Ext.onReady(function(){
repositoryLink.on('click', addRepositoryPanel);
}
// create menu after login
authCallbacks.push( createMainMenu );
Ext.Ajax.request({
url: restUrl + 'authentication.json',
method: 'GET',
success: function(response){
state = Ext.decode(response.responseText);
console.debug( state );
repositoryTypeStore.loadData(state.repositoryTypes);
createMainMenu();
var s = Ext.decode(response.responseText);
loadState(s);
},
failure: function(){
var loginWin = new Sonia.login.Window();
loginWin.on('success', function(){
/*loginWin.on('success', function(){
createMainMenu();
});
});*/
loginWin.show();
}
});

View File

@@ -63,8 +63,8 @@ Sonia.login.Form = Ext.extend(Ext.FormPanel,{
waitTitle:'Connecting',
waitMsg:'Sending data...',
success: function(){
Ext.Msg.alert('Login Success!');
success: function(form, action){
loadState( action.result );
},
failure: function(form, action){