Skip to content

Commit fea9e85

Browse files
committed
[#1582] initial draft of CoAP support in Ditto gateway:
* provides (unsecure, plain UDP) CoAP endpoint * providing equivalent CoAP resources as the HTTP resources: * /things, /policies, /whoami * supporting verbs: GET, PUT, POST, DELETE, PATCH, IPATCH * providing "observe" functionality for watching changes of resources Signed-off-by: Thomas Jaeckle <[email protected]>
1 parent 7f2e58b commit fea9e85

File tree

20 files changed

+869
-81
lines changed

20 files changed

+869
-81
lines changed

base/model/src/main/java/org/eclipse/ditto/base/model/auth/DittoAuthorizationContextType.java

+7
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,13 @@ public final class DittoAuthorizationContextType extends AuthorizationContextTyp
3434
public static final DittoAuthorizationContextType PRE_AUTHENTICATED_HTTP =
3535
new DittoAuthorizationContextType("pre-authenticated-http");
3636

37+
/**
38+
* Type indicating that the authorization context was created the pre-authenticated mechanism via CoAP which is
39+
* setting an authenticated subject as header field.
40+
*/
41+
public static final DittoAuthorizationContextType PRE_AUTHENTICATED_COAP =
42+
new DittoAuthorizationContextType("pre-authenticated-coap");
43+
3744
/**
3845
* Type indicating that the authorization context was created using the pre-authenticated mechanism of connections
3946
* by having configured the contained auth subjects in a Ditto connection source/target.

bom/pom.xml

+12
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
<reactive-streams.version>1.0.4</reactive-streams.version>
6060
<netty-bom.version>4.1.86.Final</netty-bom.version>
6161
<cloudevents.version>2.3.0</cloudevents.version>
62+
<californium.version>3.8.0</californium.version>
6263

6364
<slf4j.version>1.7.36</slf4j.version>
6465
<logback.version>1.2.11</logback.version>
@@ -263,6 +264,17 @@
263264
<version>${cloudevents.version}</version>
264265
</dependency>
265266

267+
<dependency>
268+
<groupId>org.eclipse.californium</groupId>
269+
<artifactId>californium-core</artifactId>
270+
<version>${californium.version}</version>
271+
</dependency>
272+
<dependency>
273+
<groupId>org.eclipse.californium</groupId>
274+
<artifactId>scandium</artifactId>
275+
<version>${californium.version}</version>
276+
</dependency>
277+
266278
<!-- ### Indirect "runtime" dependencies we want to pin to a common version -->
267279
<dependency>
268280
<groupId>org.scala-lang</groupId>

gateway/service/pom.xml

+9
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,15 @@
4949
<scope>runtime</scope>
5050
</dependency>
5151

52+
<dependency>
53+
<groupId>org.eclipse.californium</groupId>
54+
<artifactId>californium-core</artifactId>
55+
</dependency>
56+
<dependency>
57+
<groupId>org.eclipse.californium</groupId>
58+
<artifactId>scandium</artifactId>
59+
</dependency>
60+
5261
<dependency>
5362
<groupId>org.eclipse.ditto</groupId>
5463
<artifactId>ditto-base-model</artifactId>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
/*
2+
* Copyright (c) 2023 Contributors to the Eclipse Foundation
3+
*
4+
* See the NOTICE file(s) distributed with this work for additional
5+
* information regarding copyright ownership.
6+
*
7+
* This program and the accompanying materials are made available under the
8+
* tetms of the Eclipse Public License 2.0 which is available at
9+
* http://www.eclipse.org/legal/epl-2.0
10+
*
11+
* SPDX-License-Identifier: EPL-2.0
12+
*/
13+
package org.eclipse.ditto.gateway.service.coap;
14+
15+
import java.security.Principal;
16+
import java.util.HashMap;
17+
import java.util.Map;
18+
19+
import org.eclipse.californium.elements.auth.AdditionalInfo;
20+
import org.eclipse.californium.scandium.auth.ApplicationLevelInfoSupplier;
21+
import org.eclipse.ditto.base.model.auth.AuthorizationContext;
22+
import org.eclipse.ditto.base.model.headers.DittoHeaderDefinition;
23+
import org.eclipse.ditto.internal.utils.akka.logging.DittoLoggerFactory;
24+
import org.eclipse.ditto.internal.utils.akka.logging.ThreadSafeDittoLogger;
25+
26+
/**
27+
* TODO TJ doc
28+
* TODO TJ use in scope of authenticating with PSK / Certificate
29+
*/
30+
final class DittoCoapDeviceInfoSupplier implements ApplicationLevelInfoSupplier {
31+
32+
private static final ThreadSafeDittoLogger LOGGER =
33+
DittoLoggerFactory.getThreadSafeLogger(DittoCoapDeviceInfoSupplier.class);
34+
35+
/**
36+
* Creates additional information for authenticated devices.
37+
*
38+
* @param context the {@link AuthorizationContext} of the authenticated device.
39+
* @return additional device information.
40+
*/
41+
public static AdditionalInfo createDeviceInfo(final AuthorizationContext context) {
42+
final Map<String, Object> result = new HashMap<>();
43+
result.put(DittoHeaderDefinition.AUTHORIZATION_CONTEXT.getKey(), context);
44+
return AdditionalInfo.from(result);
45+
}
46+
47+
@Override
48+
public AdditionalInfo getInfo(final Principal principal, final Object customArgument) {
49+
if (customArgument instanceof AdditionalInfo additionalInfo) {
50+
final AuthorizationContext authorizationContext =
51+
additionalInfo.get(DittoHeaderDefinition.AUTHORIZATION_CONTEXT.getKey(), AuthorizationContext.class);
52+
LOGGER.info("get AdditionalInfo auth context: {} - for principal: {}", authorizationContext, principal);
53+
return additionalInfo;
54+
}
55+
LOGGER.debug("did not get additional info");
56+
return AdditionalInfo.empty();
57+
}
58+
}

0 commit comments

Comments
 (0)