mirror of https://github.com/jenkinsci/jenkins.git
ContainerAuthentication needs "authenticated" built-in role.
git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@11597 71c3de6d-444a-0410-be80-ed276b4c234a
This commit is contained in:
parent
3907140d1c
commit
f9486afebc
|
|
@ -38,6 +38,7 @@ public final class ContainerAuthentication implements Authentication {
|
||||||
if(request.isUserInRole(g))
|
if(request.isUserInRole(g))
|
||||||
l.add(new GrantedAuthorityImpl(g));
|
l.add(new GrantedAuthorityImpl(g));
|
||||||
}
|
}
|
||||||
|
l.add(AUTHENTICATED);
|
||||||
authorities = l.toArray(new GrantedAuthority[l.size()]);
|
authorities = l.toArray(new GrantedAuthority[l.size()]);
|
||||||
}
|
}
|
||||||
return authorities;
|
return authorities;
|
||||||
|
|
@ -67,7 +68,5 @@ public final class ContainerAuthentication implements Authentication {
|
||||||
return getPrincipal();
|
return getPrincipal();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final GrantedAuthority[] ADMIN_AUTHORITY = {new GrantedAuthorityImpl("admin")};
|
private static final GrantedAuthorityImpl AUTHENTICATED = new GrantedAuthorityImpl("authenticated");
|
||||||
// Acegi doesn't like empty array, so we need to set something
|
|
||||||
private static final GrantedAuthority[] NO_AUTHORITY = {new GrantedAuthorityImpl("authenticated")};
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,11 @@
|
||||||
package org.jvnet.hudson.test;
|
package org.jvnet.hudson.test;
|
||||||
|
|
||||||
import com.gargoylesoftware.htmlunit.html.HtmlPage;
|
import com.gargoylesoftware.htmlunit.html.HtmlPage;
|
||||||
|
import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
|
||||||
|
import com.gargoylesoftware.htmlunit.html.HtmlForm;
|
||||||
|
import com.gargoylesoftware.htmlunit.Page;
|
||||||
|
import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
|
||||||
|
import com.gargoylesoftware.htmlunit.ElementNotFoundException;
|
||||||
import hudson.model.FreeStyleProject;
|
import hudson.model.FreeStyleProject;
|
||||||
import hudson.model.Hudson;
|
import hudson.model.Hudson;
|
||||||
import hudson.model.Item;
|
import hudson.model.Item;
|
||||||
|
|
@ -23,6 +28,7 @@ import java.io.IOException;
|
||||||
import java.lang.annotation.Annotation;
|
import java.lang.annotation.Annotation;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
import java.net.MalformedURLException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|
@ -189,12 +195,64 @@ public abstract class HudsonTestCase extends TestCase {
|
||||||
setJavaScriptEnabled(false);
|
setJavaScriptEnabled(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Logs in to Hudson.
|
||||||
|
*/
|
||||||
|
public WebClient login(String username, String password) throws Exception {
|
||||||
|
HtmlPage page = goTo("login");
|
||||||
|
// page = (HtmlPage) page.getFirstAnchorByText("Login").click();
|
||||||
|
|
||||||
|
HtmlForm form = page.getFormByName("login");
|
||||||
|
form.getInputByName("j_username").setValueAttribute(username);
|
||||||
|
form.getInputByName("j_password").setValueAttribute(password);
|
||||||
|
form.submit(null);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Logs in to Hudson, by using the user name as the password.
|
||||||
|
*
|
||||||
|
* <p>
|
||||||
|
* See {@link HudsonTestCase#configureUserRealm()} for how the container is set up with the user names
|
||||||
|
* and passwords. All the test accounts have the same user name and password.
|
||||||
|
*/
|
||||||
|
public WebClient login(String username) throws Exception {
|
||||||
|
login(username,username);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public HtmlPage getPage(Item item) throws IOException, SAXException {
|
public HtmlPage getPage(Item item) throws IOException, SAXException {
|
||||||
return getPage(item,"");
|
return getPage(item,"");
|
||||||
}
|
}
|
||||||
|
|
||||||
public HtmlPage getPage(Item item, String relative) throws IOException, SAXException {
|
public HtmlPage getPage(Item item, String relative) throws IOException, SAXException {
|
||||||
return (HtmlPage)getPage("http://localhost:"+localPort+contextPath+item.getUrl()+relative);
|
return goTo(item.getUrl()+relative);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated
|
||||||
|
* This method expects a full URL. This method is marked as deprecated to warn you
|
||||||
|
* that you probably should be using {@link #goTo(String)} method, which accepts
|
||||||
|
* a relative path within the Hudson being tested. (IOW, if you really need to hit
|
||||||
|
* a website on the internet, there's nothing wrong with using this method.)
|
||||||
|
*/
|
||||||
|
public Page getPage(String url) throws IOException, FailingHttpStatusCodeException {
|
||||||
|
return super.getPage(url);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Requests a page within Hudson.
|
||||||
|
*
|
||||||
|
* @param relative
|
||||||
|
* Relative path within Hudson. Starts without '/'.
|
||||||
|
* For example, "job/test/" to go to a job top page.
|
||||||
|
*/
|
||||||
|
public HtmlPage goTo(String relative) throws IOException, SAXException {
|
||||||
|
return (HtmlPage)goTo(relative, "text/html");
|
||||||
|
}
|
||||||
|
|
||||||
|
public Page goTo(String relative, String expectedContentType) throws IOException, SAXException {
|
||||||
|
return super.getPage("http://localhost:"+localPort+contextPath+relative);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,50 @@
|
||||||
|
package hudson.bugs;
|
||||||
|
|
||||||
|
import org.jvnet.hudson.test.HudsonTestCase;
|
||||||
|
import org.jvnet.hudson.test.recipes.PresetData;
|
||||||
|
import org.jvnet.hudson.test.recipes.PresetData.DataSet;
|
||||||
|
import org.dom4j.io.DOMReader;
|
||||||
|
import org.dom4j.Document;
|
||||||
|
import org.dom4j.Element;
|
||||||
|
import hudson.model.Slave;
|
||||||
|
import hudson.model.Node.Mode;
|
||||||
|
import hudson.slaves.JNLPLauncher;
|
||||||
|
import hudson.slaves.RetentionStrategy;
|
||||||
|
import hudson.slaves.RetentionStrategy.Always;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.net.URL;
|
||||||
|
|
||||||
|
import com.gargoylesoftware.htmlunit.html.HtmlPage;
|
||||||
|
import com.gargoylesoftware.htmlunit.xml.XmlPage;
|
||||||
|
import sun.management.resources.agent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Kohsuke Kawaguchi
|
||||||
|
*/
|
||||||
|
public class JnlpAccessWithSecuredHudsonTest extends HudsonTestCase {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new slave that needs to be launched via JNLP.
|
||||||
|
*/
|
||||||
|
protected Slave createNewJnlpSlave(String name) throws Exception {
|
||||||
|
return new Slave(name,"",System.getProperty("java.io.tmpdir")+'/'+name,"2", Mode.NORMAL, "", new JNLPLauncher(), RetentionStrategy.INSTANCE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PresetData(DataSet.NO_ANONYMOUS_READACCESS)
|
||||||
|
public void test() throws Exception {
|
||||||
|
hudson.setSlaves(Collections.singletonList(createNewJnlpSlave("test")));
|
||||||
|
HudsonTestCase.WebClient wc = new WebClient();
|
||||||
|
HtmlPage p = wc.login("alice").goTo("computer/test/");
|
||||||
|
|
||||||
|
XmlPage jnlp = (XmlPage) wc.goTo("computer/test/slave-agent.jnlp","application/x-java-jnlp-file");
|
||||||
|
URL baseUrl = jnlp.getWebResponse().getUrl();
|
||||||
|
|
||||||
|
Document dom = new DOMReader().read(jnlp.getXmlDocument());
|
||||||
|
for( Element jar : (List<Element>)dom.selectNodes("//jar") ) {
|
||||||
|
URL url = new URL(baseUrl,jar.attributeValue("href"));
|
||||||
|
System.out.println(url);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue