4cc232bcc970c327949c94aec6ff42bec0e4bf3c
[moon.git] /
1 /*
2  * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8
9 package org.opendaylight.aaa.authz.srv;
10
11 import com.google.common.base.Optional;
12 import com.google.common.util.concurrent.CheckedFuture;
13 import com.google.common.util.concurrent.Futures;
14 import com.google.common.util.concurrent.ListenableFuture;
15
16 import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
17 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
18 import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
19 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
20 import org.opendaylight.controller.md.sal.dom.api.DOMDataReadWriteTransaction;
21 import org.opendaylight.yang.gen.v1.urn.aaa.yang.authz.ds.rev140722.ActionType;
22 import org.opendaylight.yangtools.yang.common.RpcResult;
23 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
24 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
25
26 /**
27  * Created by wdec on 26/08/2014.
28  */
29 public class AuthzDataReadWriteTransaction implements DOMDataReadWriteTransaction {
30
31     private final DOMDataReadWriteTransaction domDataReadWriteTransaction;
32
33     public AuthzDataReadWriteTransaction(DOMDataReadWriteTransaction domDataReadWriteTransaction) {
34         this.domDataReadWriteTransaction = domDataReadWriteTransaction;
35     }
36
37     @Override
38     public boolean cancel() {
39         if (AuthzServiceImpl.isAuthorized(ActionType.Cancel)) {
40             return domDataReadWriteTransaction.cancel();
41         }
42         return false;
43     }
44
45     @Override
46     public void delete(LogicalDatastoreType logicalDatastoreType,
47             YangInstanceIdentifier yangInstanceIdentifier) {
48
49         if (AuthzServiceImpl.isAuthorized(logicalDatastoreType, yangInstanceIdentifier,
50                 ActionType.Delete)) {
51             domDataReadWriteTransaction.delete(logicalDatastoreType, yangInstanceIdentifier);
52         }
53     }
54
55     @Override
56     public CheckedFuture<Void, TransactionCommitFailedException> submit() {
57         if (AuthzServiceImpl.isAuthorized(ActionType.Submit)) {
58             return domDataReadWriteTransaction.submit();
59         }
60         TransactionCommitFailedException e = new TransactionCommitFailedException(
61                 "Unauthorized User");
62         return Futures.immediateFailedCheckedFuture(e);
63     }
64
65     @Deprecated
66     @Override
67     public ListenableFuture<RpcResult<TransactionStatus>> commit() {
68         if (AuthzServiceImpl.isAuthorized(ActionType.Commit)) {
69             return domDataReadWriteTransaction.commit();
70         }
71         TransactionCommitFailedException e = new TransactionCommitFailedException(
72                 "Unauthorized User");
73         return Futures.immediateFailedCheckedFuture(e);
74     }
75
76     @Override
77     public CheckedFuture<Optional<NormalizedNode<?, ?>>, ReadFailedException> read(
78             LogicalDatastoreType logicalDatastoreType, YangInstanceIdentifier yangInstanceIdentifier) {
79
80         if (AuthzServiceImpl.isAuthorized(logicalDatastoreType, yangInstanceIdentifier,
81                 ActionType.Read)) {
82             return domDataReadWriteTransaction.read(logicalDatastoreType, yangInstanceIdentifier);
83         }
84         ReadFailedException e = new ReadFailedException("Authorization Failed");
85         return Futures.immediateFailedCheckedFuture(e);
86     }
87
88     @Override
89     public CheckedFuture<Boolean, ReadFailedException> exists(
90             LogicalDatastoreType logicalDatastoreType, YangInstanceIdentifier yangInstanceIdentifier) {
91
92         if (AuthzServiceImpl.isAuthorized(logicalDatastoreType, yangInstanceIdentifier,
93                 ActionType.Exists)) {
94             return domDataReadWriteTransaction.exists(logicalDatastoreType, yangInstanceIdentifier);
95         }
96         ReadFailedException e = new ReadFailedException("Authorization Failed");
97         return Futures.immediateFailedCheckedFuture(e);
98     }
99
100     @Override
101     public void put(LogicalDatastoreType logicalDatastoreType,
102             YangInstanceIdentifier yangInstanceIdentifier, NormalizedNode<?, ?> normalizedNode) {
103
104         if (AuthzServiceImpl.isAuthorized(logicalDatastoreType, yangInstanceIdentifier,
105                 ActionType.Put)) {
106             domDataReadWriteTransaction.put(logicalDatastoreType, yangInstanceIdentifier,
107                     normalizedNode);
108         }
109     }
110
111     @Override
112     public void merge(LogicalDatastoreType logicalDatastoreType,
113             YangInstanceIdentifier yangInstanceIdentifier, NormalizedNode<?, ?> normalizedNode) {
114
115         if (AuthzServiceImpl.isAuthorized(logicalDatastoreType, yangInstanceIdentifier,
116                 ActionType.Merge)) {
117             domDataReadWriteTransaction.merge(logicalDatastoreType, yangInstanceIdentifier,
118                     normalizedNode);
119         }
120     }
121
122     @Override
123     public Object getIdentifier() {
124         if (AuthzServiceImpl.isAuthorized(ActionType.GetIdentifier)) {
125             return domDataReadWriteTransaction.getIdentifier();
126         }
127         return null;
128     }
129 }