use of i5.las2peer.api.security.Agent in project Distributed-Noracle-Backend by Distributed-Noracle.
the class NoracleQuestionRelationService method createQuestionRelation.
@Override
public QuestionRelation createQuestionRelation(String spaceId, String name, String questionId1, String questionId2, Boolean directed) throws ServiceInvocationException {
Agent mainAgent = Context.get().getMainAgent();
if (mainAgent instanceof AnonymousAgent) {
throw new ServiceAccessDeniedException("You have to be logged in to create a relation");
}
String relationId = buildQuestionRelationId();
Envelope env;
try {
env = Context.get().createEnvelope(getQuestionRelationEnvelopeIdentifier(relationId));
} catch (EnvelopeAccessDeniedException e) {
throw new ServiceAccessDeniedException("Envelope Access Denied");
} catch (EnvelopeOperationFailedException e) {
throw new InternalServiceException("Could not create envelope for relation", e);
}
env.setPublic();
String strNow = Instant.now().toString();
QuestionRelation relation = new QuestionRelation(relationId, spaceId, mainAgent.getIdentifier(), name, questionId1, questionId2, directed, strNow);
env.setContent(relation);
try {
Context.get().storeEnvelope(env, mainAgent);
} catch (EnvelopeAccessDeniedException e) {
throw new ServiceAccessDeniedException("Envelope Access Denied");
} catch (EnvelopeOperationFailedException e) {
throw new InternalServiceException("Could not store relation envelope", e);
}
if (spaceId != null && !spaceId.isEmpty()) {
linkQuestionRelationToSpace(spaceId, relationId);
}
return relation;
}
use of i5.las2peer.api.security.Agent in project Distributed-Noracle-Backend by Distributed-Noracle.
the class NoracleServiceTest method beforeTest.
/**
* Called before a test starts.
*
* Sets up the node, initializes connector and adds user agent that can be used throughout the test.
*
* @throws Exception
*/
@Before
public void beforeTest() {
try {
nodes = TestSuite.launchNetwork(networkSize);
connector = new WebConnector(null);
connector.start(nodes.get(0));
// don't follow redirects, some tests want to test for correct redirect
// responses
webClient = ClientBuilder.newBuilder().register(MultiPartFeature.class).property(ClientProperties.FOLLOW_REDIRECTS, Boolean.FALSE).build();
startService(nodes.get(0), "i5.las2peer.services.noracleService.NoracleService", NoracleService.API_VERSION);
startService(nodes.get(0), "i5.las2peer.services.noracleService.NoracleAgentService", NoracleService.API_VERSION);
startService(nodes.get(0), "i5.las2peer.services.noracleService.NoracleSpaceService", NoracleService.API_VERSION);
startService(nodes.get(0), "i5.las2peer.services.noracleService.NoracleQuestionService", NoracleService.API_VERSION);
startService(nodes.get(0), "i5.las2peer.services.noracleService.NoracleQuestionRelationService", NoracleService.API_VERSION);
startService(nodes.get(0), "i5.las2peer.services.noracleService.NoracleVoteSe" + "rvice", NoracleService.API_VERSION);
testAgent = MockAgentFactory.getAdam();
testAgent.unlock("adamspass");
PastryNodeImpl activeNode = nodes.get(0);
activeNode.storeAgent(testAgent);
basicAuthHeader = "basic " + Base64.getEncoder().encodeToString((testAgent.getLoginName() + ":" + "adamspass").getBytes(StandardCharsets.UTF_8));
testAgent2 = MockAgentFactory.getEve();
testAgent2.unlock("evespass");
activeNode.storeAgent(testAgent2);
basicAuthHeader2 = "basic " + Base64.getEncoder().encodeToString((testAgent2.getLoginName() + ":" + "evespass").getBytes(StandardCharsets.UTF_8));
baseUrl = connector.getHttpEndpoint() + "/" + NoracleService.RESOURCE_NAME + "/v" + NoracleService.API_VERSION;
} catch (Exception e) {
e.printStackTrace();
Assert.fail(e.toString());
}
}
use of i5.las2peer.api.security.Agent in project Distributed-Noracle-Backend by Distributed-Noracle.
the class NoracleAgentService method updateSpaceSubscription.
@Override
public SpaceSubscription updateSpaceSubscription(String agentId, String spaceId, String[] selectedQuestions) throws ServiceInvocationException {
Agent mainAgent = Context.get().getMainAgent();
String envIdentifier = buildSubscriptionId(agentId);
try {
Envelope env = Context.get().requestEnvelope(envIdentifier);
SpaceSubscriptionList spaceSubscriptionList = (SpaceSubscriptionList) env.getContent();
for (SpaceSubscription spaceSubscription : spaceSubscriptionList) {
if (spaceSubscription.getSpaceId().equals(spaceId)) {
spaceSubscription.setSelectedQuestionIds(selectedQuestions);
env.setContent(spaceSubscriptionList);
try {
Context.get().storeEnvelope(env, mainAgent);
} catch (EnvelopeAccessDeniedException e) {
throw new ServiceAccessDeniedException("Envelope Access Denied");
} catch (EnvelopeOperationFailedException e) {
throw new InternalServiceException("Could not store space subscription envelope", e);
}
return spaceSubscription;
}
}
throw new ResourceNotFoundException("Space subscription not found");
} catch (EnvelopeAccessDeniedException e) {
throw new ServiceAccessDeniedException("Envelope Access Denied");
} catch (EnvelopeOperationFailedException e) {
throw new InternalServiceException("Could not fetch space subscription envelope", e);
} catch (EnvelopeNotFoundException e) {
throw new ResourceNotFoundException("No space subscriptions found");
}
}
use of i5.las2peer.api.security.Agent in project Distributed-Noracle-Backend by Distributed-Noracle.
the class NoracleAgentService method subscribeToSpace.
@Override
public SpaceSubscription subscribeToSpace(String spaceId, String spaceSecret) throws ServiceInvocationException {
Agent mainAgent = Context.get().getMainAgent();
if (spaceId == null || spaceId.isEmpty()) {
throw new InvocationBadArgumentException("No space id given");
} else if (mainAgent instanceof AnonymousAgent) {
throw new ServiceAccessDeniedException("You have to be logged in to subscribe to a space");
}
Context.get().invoke(new ServiceNameVersion(NoracleSpaceService.class.getCanonicalName(), NoracleService.API_VERSION), "joinSpace", spaceId, spaceSecret);
SpaceSubscription subscription = new SpaceSubscription(spaceId, spaceSecret);
String envIdentifier = buildSubscriptionId(mainAgent.getIdentifier());
Envelope env;
SpaceSubscriptionList subscriptionList;
try {
try {
env = Context.get().requestEnvelope(envIdentifier);
subscriptionList = (SpaceSubscriptionList) env.getContent();
} catch (EnvelopeNotFoundException e) {
env = Context.get().createEnvelope(envIdentifier);
subscriptionList = new SpaceSubscriptionList();
}
} catch (EnvelopeAccessDeniedException e) {
throw new ServiceAccessDeniedException("Envelope Access Denied");
} catch (EnvelopeOperationFailedException e) {
throw new InternalServiceException("Could not create envelope for space subscription", e);
}
subscriptionList.add(subscription);
env.setContent(subscriptionList);
try {
Context.get().storeEnvelope(env, mainAgent);
} catch (EnvelopeAccessDeniedException e) {
throw new ServiceAccessDeniedException("Envelope Access Denied");
} catch (EnvelopeOperationFailedException e) {
throw new InternalServiceException("Could not store space subscription envelope", e);
}
return subscription;
}
use of i5.las2peer.api.security.Agent in project Distributed-Noracle-Backend by Distributed-Noracle.
the class NoracleAgentService method updateAgentProfile.
@Override
public NoracleAgentProfile updateAgentProfile(String agentName) throws ServiceInvocationException {
Agent mainAgent = Context.get().getMainAgent();
String envIdentifier = buildAgentProfileId(mainAgent.getIdentifier());
Envelope env;
NoracleAgentProfile profile;
// look for existing profile, otherwise create one
try {
try {
env = Context.get().requestEnvelope(envIdentifier);
profile = (NoracleAgentProfile) env.getContent();
} catch (EnvelopeNotFoundException e) {
env = Context.get().createEnvelope(envIdentifier);
profile = new NoracleAgentProfile();
}
} catch (EnvelopeAccessDeniedException e) {
throw new ServiceAccessDeniedException("Envelope access denied");
} catch (EnvelopeOperationFailedException e) {
throw new InternalServiceException("Could not create new envelope for noracle agent profile", e);
}
profile.setName(agentName);
env.setContent(profile);
env.setPublic();
try {
Context.get().storeEnvelope(env, mainAgent);
} catch (EnvelopeAccessDeniedException e) {
throw new ServiceAccessDeniedException("Envelope access denied");
} catch (EnvelopeOperationFailedException e) {
throw new InternalServiceException("Storing envelope with noracle agent profile failed", e);
}
return profile;
}
Aggregations