@@ -1131,3 +1131,279 @@ func TestValidateName(t *testing.T) {
11311131 t .Fatalf ("No error expected when username and password provided, %v" , err )
11321132 }
11331133}
1134+
1135+ func TestAnyUserDelegation (t * testing.T ) {
1136+ aliceJson := []byte ("{\" Name\" :\" Alice\" ,\" Password\" :\" Hello\" }" )
1137+ bobJson := []byte ("{\" Name\" :\" Bob\" ,\" Password\" :\" Bonjour\" }" )
1138+ carolJson := []byte ("{\" Name\" :\" Carol\" ,\" Password\" :\" Hola\" }" )
1139+ encryptJson := []byte ("{\" Name\" :\" Bob\" ,\" Password\" :\" Bonjour\" ,\" Minimum\" :1,\" Owners\" :[\" Alice\" ,\" Bob\" ,\" Carol\" ],\" Data\" :\" SGVsbG8gSmVsbG8=\" }" )
1140+ encryptJson2 := []byte ("{\" Name\" :\" Bob\" ,\" Password\" :\" Bonjour\" ,\" Minimum\" :2,\" Owners\" :[\" Alice\" ,\" Bob\" ,\" Carol\" ],\" Data\" :\" SGVsbG8gSmVsbG8=\" }" )
1141+ delegateJson := []byte ("{\" Name\" :\" Bob\" ,\" Password\" :\" Bonjour\" ,\" Time\" :\" 10s\" ,\" Uses\" :1}" )
1142+ delegateJson2 := []byte ("{\" Name\" :\" Bob\" ,\" Password\" :\" Bonjour\" ,\" Time\" :\" 10s\" ,\" Uses\" :1,\" AnyUser\" :false}" )
1143+ delegateJson3 := []byte ("{\" Name\" :\" Bob\" ,\" Password\" :\" Bonjour\" ,\" Time\" :\" 10s\" ,\" Uses\" :1,\" Users\" :[]}" )
1144+ delegateJson4 := []byte ("{\" Name\" :\" Alice\" ,\" Password\" :\" Hello\" ,\" Time\" :\" 10s\" ,\" Uses\" :1,\" AnyUser\" :true}" )
1145+ delegateJson5 := []byte ("{\" Name\" :\" Bob\" ,\" Password\" :\" Bonjour\" ,\" Time\" :\" 10s\" ,\" Uses\" :2,\" AnyUser\" :true}" )
1146+ delegateJson6 := []byte ("{\" Name\" :\" Carol\" ,\" Password\" :\" Hola\" ,\" Time\" :\" 10s\" ,\" Uses\" :1,\" Users\" :[\" Alice\" ]}" )
1147+ delegateJson7 := []byte ("{\" Name\" :\" Carol\" ,\" Password\" :\" Hola\" ,\" Time\" :\" 10s\" ,\" Uses\" :1,\" Users\" :[\" Bob\" ]}" )
1148+
1149+ Init ("memory" , "" , "" , "" , "" )
1150+
1151+ // Create a new vault with an initial user
1152+ var s ResponseData
1153+ respJson , err := Create (aliceJson )
1154+ if err != nil {
1155+ t .Fatalf ("Error in creating account, %v" , err )
1156+ }
1157+ err = json .Unmarshal (respJson , & s )
1158+ if err != nil {
1159+ t .Fatalf ("Error in creating account, %v" , err )
1160+ }
1161+ if s .Status != "ok" {
1162+ t .Fatalf ("Error in creating account, %v" , s .Status )
1163+ }
1164+
1165+ // Create new users
1166+ respJson , err = CreateUser (bobJson )
1167+ if err != nil {
1168+ t .Fatalf ("Error in creating account, %v" , err )
1169+ }
1170+ err = json .Unmarshal (respJson , & s )
1171+ if err != nil {
1172+ t .Fatalf ("Error in creating account, %v" , err )
1173+ }
1174+ if s .Status != "ok" {
1175+ t .Fatalf ("Error in creating account, %v" , s .Status )
1176+ }
1177+
1178+ respJson , err = CreateUser (carolJson )
1179+ if err != nil {
1180+ t .Fatalf ("Error in creating account, %v" , err )
1181+ }
1182+ err = json .Unmarshal (respJson , & s )
1183+ if err != nil {
1184+ t .Fatalf ("Error in creating account, %v" , err )
1185+ }
1186+ if s .Status != "ok" {
1187+ t .Fatalf ("Error in creating account, %v" , s .Status )
1188+ }
1189+
1190+ // Encrypt some test data
1191+ respJson , err = Encrypt (encryptJson )
1192+ if err != nil {
1193+ t .Fatalf ("Error in encrypt, %v" , err )
1194+ }
1195+ err = json .Unmarshal (respJson , & s )
1196+ if err != nil {
1197+ t .Fatalf ("Error in encrypt, %v" , err )
1198+ }
1199+ if s .Status != "ok" {
1200+ t .Fatalf ("Error in encrypt, %v" , s .Status )
1201+ }
1202+
1203+ // Create a decryption request for later
1204+ decryptJson , err := json .Marshal (DecryptRequest {Name : "Alice" , Password : "Hello" , Data : s .Response })
1205+ if err != nil {
1206+ t .Fatalf ("Error in marshalling decryption, %v" , err )
1207+ }
1208+
1209+ // Test that delegation without specifying a user fails (under multiple scenarios)
1210+ for _ , delJson := range [][]byte {delegateJson , delegateJson2 , delegateJson3 } {
1211+ respJson , err = Delegate (delJson )
1212+ if err != nil {
1213+ t .Fatalf ("Error in delegate, %v" , err )
1214+ }
1215+ err = json .Unmarshal (respJson , & s )
1216+ if err != nil {
1217+ t .Fatalf ("Error in delegate, %v" , err )
1218+ }
1219+ if s .Status == "ok" {
1220+ t .Fatalf ("Error expected when no user is provided" )
1221+ }
1222+ }
1223+
1224+ // Test that we can delegate to any user
1225+ respJson , err = Delegate (delegateJson4 )
1226+ if err != nil {
1227+ t .Fatalf ("Error in delegate, %v" , err )
1228+ }
1229+ err = json .Unmarshal (respJson , & s )
1230+ if err != nil {
1231+ t .Fatalf ("Error in delegate, %v" , err )
1232+ }
1233+ if s .Status != "ok" {
1234+ t .Fatalf ("Error in delegate, %v" , s .Status )
1235+ }
1236+
1237+ // Verify the presence of a single delegation
1238+ cache .Refresh ()
1239+ var sum SummaryData
1240+ respJson , err = Summary (aliceJson )
1241+ if err != nil {
1242+ t .Fatalf ("Error in summary, %v" , err )
1243+ }
1244+ err = json .Unmarshal (respJson , & sum )
1245+ if err != nil {
1246+ t .Fatalf ("Error in summary, %v" , err )
1247+ }
1248+ if sum .Status != "ok" {
1249+ t .Fatalf ("Error in summary, %v" , sum .Status )
1250+ }
1251+ if len (sum .Live ) != 1 {
1252+ t .Fatalf ("Error in summary, %v" , sum .Live )
1253+ }
1254+
1255+ // Test that we can decrypt the data
1256+ respJson , err = Decrypt (decryptJson )
1257+ if err != nil {
1258+ t .Fatalf ("Error in decrypt, %v" , err )
1259+ }
1260+ err = json .Unmarshal (respJson , & s )
1261+ if err != nil {
1262+ t .Fatalf ("Error in decrypt, %v" , err )
1263+ }
1264+ if s .Status != "ok" {
1265+ t .Fatalf ("Error in decrypt, %v" , s .Status )
1266+ }
1267+
1268+ // Verify that no delegations exist after decryption
1269+ cache .Refresh ()
1270+ var sum2 SummaryData
1271+ respJson , err = Summary (aliceJson )
1272+ if err != nil {
1273+ t .Fatalf ("Error in summary, %v" , err )
1274+ }
1275+ err = json .Unmarshal (respJson , & sum2 )
1276+ if err != nil {
1277+ t .Fatalf ("Error in summary, %v" , err )
1278+ }
1279+ if sum2 .Status != "ok" {
1280+ t .Fatalf ("Error in summary, %v" , sum2 .Status )
1281+ }
1282+ if len (sum2 .Live ) != 0 {
1283+ t .Fatalf ("Error in summary, %#v" , sum2 .Live )
1284+ }
1285+
1286+ // Encrypt some data that requires 2 owners to delegate
1287+ respJson , err = Encrypt (encryptJson2 )
1288+ if err != nil {
1289+ t .Fatalf ("Error in encrypt, %v" , err )
1290+ }
1291+ err = json .Unmarshal (respJson , & s )
1292+ if err != nil {
1293+ t .Fatalf ("Error in encrypt, %v" , err )
1294+ }
1295+ if s .Status != "ok" {
1296+ t .Fatalf ("Error in encrypt, %v" , s .Status )
1297+ }
1298+
1299+ // Create decryption requests for later
1300+ decryptJson2 , err := json .Marshal (DecryptRequest {Name : "Alice" , Password : "Hello" , Data : s .Response })
1301+ if err != nil {
1302+ t .Fatalf ("Error in marshalling decryption, %v" , err )
1303+ }
1304+ decryptJson3 , err := json .Marshal (DecryptRequest {Name : "Bob" , Password : "Bonjour" , Data : s .Response })
1305+ if err != nil {
1306+ t .Fatalf ("Error in marshalling decryption, %v" , err )
1307+ }
1308+
1309+ // Test that we can delegate to any user, with 2 uses
1310+ respJson , err = Delegate (delegateJson5 )
1311+ if err != nil {
1312+ t .Fatalf ("Error in delegate, %v" , err )
1313+ }
1314+ err = json .Unmarshal (respJson , & s )
1315+ if err != nil {
1316+ t .Fatalf ("Error in delegate, %v" , err )
1317+ }
1318+ if s .Status != "ok" {
1319+ t .Fatalf ("Error in delegate, %v" , s .Status )
1320+ }
1321+
1322+ // Test that we can delegate to a specific user, with 1 use
1323+ respJson , err = Delegate (delegateJson6 )
1324+ if err != nil {
1325+ t .Fatalf ("Error in delegate, %v" , err )
1326+ }
1327+ err = json .Unmarshal (respJson , & s )
1328+ if err != nil {
1329+ t .Fatalf ("Error in delegate, %v" , err )
1330+ }
1331+ if s .Status != "ok" {
1332+ t .Fatalf ("Error in delegate, %v" , s .Status )
1333+ }
1334+
1335+ // Verify the presence of the 2 delegations
1336+ cache .Refresh ()
1337+ var sum3 SummaryData
1338+ respJson , err = Summary (aliceJson )
1339+ if err != nil {
1340+ t .Fatalf ("Error in summary, %v" , err )
1341+ }
1342+ err = json .Unmarshal (respJson , & sum3 )
1343+ if err != nil {
1344+ t .Fatalf ("Error in summary, %v" , err )
1345+ }
1346+ if sum3 .Status != "ok" {
1347+ t .Fatalf ("Error in summary, %v" , sum3 .Status )
1348+ }
1349+ if len (sum3 .Live ) != 2 {
1350+ t .Fatalf ("Error in summary, %v" , sum3 .Live )
1351+ }
1352+
1353+ // Test that we can decrypt the data for one request
1354+ respJson , err = Decrypt (decryptJson2 )
1355+ if err != nil {
1356+ t .Fatalf ("Error in decrypt, %v" , err )
1357+ }
1358+ err = json .Unmarshal (respJson , & s )
1359+ if err != nil {
1360+ t .Fatalf ("Error in decrypt, %v" , err )
1361+ }
1362+ if s .Status != "ok" {
1363+ t .Fatalf ("Error in decrypt, %v" , s .Status )
1364+ }
1365+
1366+ // Test that we can delegate to another specific user, with 1 use
1367+ respJson , err = Delegate (delegateJson7 )
1368+ if err != nil {
1369+ t .Fatalf ("Error in delegate, %v" , err )
1370+ }
1371+ err = json .Unmarshal (respJson , & s )
1372+ if err != nil {
1373+ t .Fatalf ("Error in delegate, %v" , err )
1374+ }
1375+ if s .Status != "ok" {
1376+ t .Fatalf ("Error in delegate, %v" , s .Status )
1377+ }
1378+
1379+ // Test that we can decrypt a request, using the new user's delegation and the remaining any-user delegation
1380+ respJson , err = Decrypt (decryptJson3 )
1381+ if err != nil {
1382+ t .Fatalf ("Error in decrypt, %v" , err )
1383+ }
1384+ err = json .Unmarshal (respJson , & s )
1385+ if err != nil {
1386+ t .Fatalf ("Error in decrypt, %v" , err )
1387+ }
1388+ if s .Status != "ok" {
1389+ t .Fatalf ("Error in decrypt, %v" , s .Status )
1390+ }
1391+
1392+ // Verify that no delegations exist after decryption
1393+ cache .Refresh ()
1394+ var sum4 SummaryData
1395+ respJson , err = Summary (aliceJson )
1396+ if err != nil {
1397+ t .Fatalf ("Error in summary, %v" , err )
1398+ }
1399+ err = json .Unmarshal (respJson , & sum4 )
1400+ if err != nil {
1401+ t .Fatalf ("Error in summary, %v" , err )
1402+ }
1403+ if sum4 .Status != "ok" {
1404+ t .Fatalf ("Error in summary, %v" , sum4 .Status )
1405+ }
1406+ if len (sum4 .Live ) != 0 {
1407+ t .Fatalf ("Error in summary, %#v" , sum4 .Live )
1408+ }
1409+ }
0 commit comments