diff --git a/plugins/ploi/api_token.go b/plugins/ploi/api_token.go new file mode 100644 index 00000000..98c43650 --- /dev/null +++ b/plugins/ploi/api_token.go @@ -0,0 +1,59 @@ +package ploi + +import ( + "context" + "regexp" + + "github.com/1Password/shell-plugins/sdk" + "github.com/1Password/shell-plugins/sdk/importer" + "github.com/1Password/shell-plugins/sdk/provision" + "github.com/1Password/shell-plugins/sdk/schema" + "github.com/1Password/shell-plugins/sdk/schema/credname" + "github.com/1Password/shell-plugins/sdk/schema/fieldname" +) + +func APIToken() schema.CredentialType { + return schema.CredentialType{ + Name: credname.APIToken, + DocsURL: sdk.URL("https://developers.ploi.io/?documentation=cli"), + ManagementURL: sdk.URL("https://ploi.io/profile/api-keys"), + Fields: []schema.CredentialField{ + { + Name: fieldname.Token, + MarkdownDescription: "Token used to authenticate to Ploi CLI.", + Secret: true, + Composition: &schema.ValueComposition{ + Charset: schema.Charset{ + Uppercase: true, + Lowercase: true, + Digits: true, + }, + }, + }, + }, + DefaultProvisioner: provision.EnvVars(defaultEnvVarMapping), + Importer: importer.TryAll( + importer.TryEnvVarPair(defaultEnvVarMapping), + TryPloiCLIConfigFile(), + )} +} + +var defaultEnvVarMapping = map[string]sdk.FieldName{ + "PLOI_API_TOKEN": fieldname.Token, +} + +func TryPloiCLIConfigFile() sdk.Importer { + return importer.TryFile("~/.ploi/config.php", func(ctx context.Context, contents importer.FileContents, in sdk.ImportInput, out *sdk.ImportAttempt) { + tokenRegexp := regexp.MustCompile(`'token'\s*=>\s*'([^']*)'`) + matches := tokenRegexp.FindStringSubmatch(contents.ToString()) + if len(matches) < 2 || matches[1] == "" { + return + } + + out.AddCandidate(sdk.ImportCandidate{ + Fields: map[sdk.FieldName]string{ + fieldname.Token: matches[1], + }, + }) + }) +} diff --git a/plugins/ploi/api_token_test.go b/plugins/ploi/api_token_test.go new file mode 100644 index 00000000..455181dc --- /dev/null +++ b/plugins/ploi/api_token_test.go @@ -0,0 +1,53 @@ +package ploi + +import ( + "testing" + + "github.com/1Password/shell-plugins/sdk" + "github.com/1Password/shell-plugins/sdk/plugintest" + "github.com/1Password/shell-plugins/sdk/schema/fieldname" +) + +func TestAPITokenProvisioner(t *testing.T) { + plugintest.TestProvisioner(t, APIToken().DefaultProvisioner, map[string]plugintest.ProvisionCase{ + "default": { + ItemFields: map[sdk.FieldName]string{ + fieldname.Token: "j0jeJEtBchP9k7HN7lenOOQwDeofsOMaKTcdBONTzFa9qAzyVN8uAAPSkrWvEfL9yHI1DeyJMEde6ZkIhqWBpPJmWq6sJFEYOxItOuCGpZDJlUJYBD8F92BZjJ0Fqi0G7vOl3Q5fhJuZwPxdLZndjqRrvHlr4O1tlB2sFoQr9mud15NQn8FDEpuCDQTQ868Qe4HbkbPsd9wBrpAQ5wHgWPfr5uTBWAl7KAStIDALQKa39TU0S8Tyc4km4uAwizEF8VNyUliJQUdDSgshj1QwqfwiQ92kWSJQ1MIDIr0jKEAXpdRjLbveQXBPjp0QvCTCzIRhASmlXLD6o6s8jCnFBZjoZnGQn3Jn6mPt72GtWCs5HfPyuMqJVhksfL15vp1QQBMNkFry96YBHK6t5GnS0T9uiidYAr233LkgtvgLIdNrOKjQjni1hkhrc1wd73sCl4bZfTI41BOtZCHBwoV6eYgi9pGOf9jqgkAi3WjweFbsWuUl5ZIBGo8PCSwoZotyhdHT9g0jkEJk01Alckhn8VYQ8QkoyzsPGsW4SyD9vGTSwKgIwFu5iZ3kTxG038kDJcg2w5gWP8p6PksXYyIRZzsi6g7itchRwGevHtaBMnmrLuGHPZQc7LpHN8ibKU6YFNqsVh1Zw5Lh6ldNeOtMOzWRfVpbgSJuzC7rwpdLwCDaylzXkNNPu0Y30DMXxRiyBqXvkkpLEdAYwGRsGk8YPetpDsH2PNJDx9POKZ1EsuE3bSasEKCiOIEV4GxT4Me3lyHLpWU72utnkm3UvnfK8tj4y4TGhyHfdi9HFND0PsPQRzFnANNsIvf6sDInSWGpGEy16jlIturGHOx2BaQ6wUhZGQsNvUpqsmkc05672ajPDa8FHD3LR4Qq8EL9AT86RWcWJvuxKMWN5a2F0zr4DVxaCmJ4iQlRUwwueybrajPRVPOsvcH7GVS0z3QqT6OwAx5IG1ks4j9T0ADR8szrSIRIW6ZuBmWisQvie4TskbuOAL5DJaREhHIanKIEiSMU4movTtULwFw9decBhKnpvLEwymOqgQnfMMA9eEna6AnsJpy2JzecelwDfV6vPydkMBvGDpi8AJucYn6BEOG5f4ylYeXGuzBUUJuQdn4GdO0jEw4GOOPjvNL2LbCYCvqExd8L9S1BxSX8KebsAARBwBUEkRAPJdbAhUrb0ksCWpgZdQlAEaBJhLWYNVF8s3eBwQONqfVcbcjcYYDbJQP2Uv9wrcBHmwZJcpaKMIfDBgcWTdx1ucaAYyKzBP1OfJ4uFHGBr8R5aok4nXpugH2ZmrkKP8dhP9Qcq33MNbXHOw99wy7rDLlNdNsrHB234Stl1WDm0WndvhMYEqhitOj7MI8aFwcoo1hhxLYtRx0pUII5rmJw7yRq7AfsAxUWWKPXoMVSxzBZkbrRLGXqRAKE6fNkD34oTOJgxy1OiWHEwRXGc7WcbwPevV9wRD2StG4Tko10FdHNwxlIXq8kEqcdF6LUhnZhvVVTxmlXoDiJ6Bn4gc0N8Hieg9ifpLZAk3tGleL5wxfjWRhNcrzqKLEKVAxHxqS202HqibQ6OMaetMQTiSRPLfiLUejsBngAlHUp7ztDIx5SH0Q1DzT1AHbju9uOn4kvqO8aKY82rhRvf1t4HF1DpZyK3UioPizpMTHW95xvtkZZsmedBLDYMHpx2j1hthM4GnrjrBEOuceOrxWTPPOOt1rVHV6gjJWG5dRojJAsFpcbBGl5CnNGixOnCPWSowJl3BstCAzbu667k3miCLETTDlXY9FHZ6RxX7cYfojYDMA3KMk2OL1xgnotFJLt5cOQE5tm7XYtpqdOhUHrO4SR4vSisL6H5sS2E5at2lEXAMPLE", + }, + ExpectedOutput: sdk.ProvisionOutput{ + Environment: map[string]string{ + "PLOI_API_TOKEN": "j0jeJEtBchP9k7HN7lenOOQwDeofsOMaKTcdBONTzFa9qAzyVN8uAAPSkrWvEfL9yHI1DeyJMEde6ZkIhqWBpPJmWq6sJFEYOxItOuCGpZDJlUJYBD8F92BZjJ0Fqi0G7vOl3Q5fhJuZwPxdLZndjqRrvHlr4O1tlB2sFoQr9mud15NQn8FDEpuCDQTQ868Qe4HbkbPsd9wBrpAQ5wHgWPfr5uTBWAl7KAStIDALQKa39TU0S8Tyc4km4uAwizEF8VNyUliJQUdDSgshj1QwqfwiQ92kWSJQ1MIDIr0jKEAXpdRjLbveQXBPjp0QvCTCzIRhASmlXLD6o6s8jCnFBZjoZnGQn3Jn6mPt72GtWCs5HfPyuMqJVhksfL15vp1QQBMNkFry96YBHK6t5GnS0T9uiidYAr233LkgtvgLIdNrOKjQjni1hkhrc1wd73sCl4bZfTI41BOtZCHBwoV6eYgi9pGOf9jqgkAi3WjweFbsWuUl5ZIBGo8PCSwoZotyhdHT9g0jkEJk01Alckhn8VYQ8QkoyzsPGsW4SyD9vGTSwKgIwFu5iZ3kTxG038kDJcg2w5gWP8p6PksXYyIRZzsi6g7itchRwGevHtaBMnmrLuGHPZQc7LpHN8ibKU6YFNqsVh1Zw5Lh6ldNeOtMOzWRfVpbgSJuzC7rwpdLwCDaylzXkNNPu0Y30DMXxRiyBqXvkkpLEdAYwGRsGk8YPetpDsH2PNJDx9POKZ1EsuE3bSasEKCiOIEV4GxT4Me3lyHLpWU72utnkm3UvnfK8tj4y4TGhyHfdi9HFND0PsPQRzFnANNsIvf6sDInSWGpGEy16jlIturGHOx2BaQ6wUhZGQsNvUpqsmkc05672ajPDa8FHD3LR4Qq8EL9AT86RWcWJvuxKMWN5a2F0zr4DVxaCmJ4iQlRUwwueybrajPRVPOsvcH7GVS0z3QqT6OwAx5IG1ks4j9T0ADR8szrSIRIW6ZuBmWisQvie4TskbuOAL5DJaREhHIanKIEiSMU4movTtULwFw9decBhKnpvLEwymOqgQnfMMA9eEna6AnsJpy2JzecelwDfV6vPydkMBvGDpi8AJucYn6BEOG5f4ylYeXGuzBUUJuQdn4GdO0jEw4GOOPjvNL2LbCYCvqExd8L9S1BxSX8KebsAARBwBUEkRAPJdbAhUrb0ksCWpgZdQlAEaBJhLWYNVF8s3eBwQONqfVcbcjcYYDbJQP2Uv9wrcBHmwZJcpaKMIfDBgcWTdx1ucaAYyKzBP1OfJ4uFHGBr8R5aok4nXpugH2ZmrkKP8dhP9Qcq33MNbXHOw99wy7rDLlNdNsrHB234Stl1WDm0WndvhMYEqhitOj7MI8aFwcoo1hhxLYtRx0pUII5rmJw7yRq7AfsAxUWWKPXoMVSxzBZkbrRLGXqRAKE6fNkD34oTOJgxy1OiWHEwRXGc7WcbwPevV9wRD2StG4Tko10FdHNwxlIXq8kEqcdF6LUhnZhvVVTxmlXoDiJ6Bn4gc0N8Hieg9ifpLZAk3tGleL5wxfjWRhNcrzqKLEKVAxHxqS202HqibQ6OMaetMQTiSRPLfiLUejsBngAlHUp7ztDIx5SH0Q1DzT1AHbju9uOn4kvqO8aKY82rhRvf1t4HF1DpZyK3UioPizpMTHW95xvtkZZsmedBLDYMHpx2j1hthM4GnrjrBEOuceOrxWTPPOOt1rVHV6gjJWG5dRojJAsFpcbBGl5CnNGixOnCPWSowJl3BstCAzbu667k3miCLETTDlXY9FHZ6RxX7cYfojYDMA3KMk2OL1xgnotFJLt5cOQE5tm7XYtpqdOhUHrO4SR4vSisL6H5sS2E5at2lEXAMPLE", + }, + }, + }, + }) +} + +func TestAPITokenImporter(t *testing.T) { + plugintest.TestImporter(t, APIToken().Importer, map[string]plugintest.ImportCase{ + "environment": { + Environment: map[string]string{ + "PLOI_API_TOKEN": "j0jeJEtBchP9k7HN7lenOOQwDeofsOMaKTcdBONTzFa9qAzyVN8uAAPSkrWvEfL9yHI1DeyJMEde6ZkIhqWBpPJmWq6sJFEYOxItOuCGpZDJlUJYBD8F92BZjJ0Fqi0G7vOl3Q5fhJuZwPxdLZndjqRrvHlr4O1tlB2sFoQr9mud15NQn8FDEpuCDQTQ868Qe4HbkbPsd9wBrpAQ5wHgWPfr5uTBWAl7KAStIDALQKa39TU0S8Tyc4km4uAwizEF8VNyUliJQUdDSgshj1QwqfwiQ92kWSJQ1MIDIr0jKEAXpdRjLbveQXBPjp0QvCTCzIRhASmlXLD6o6s8jCnFBZjoZnGQn3Jn6mPt72GtWCs5HfPyuMqJVhksfL15vp1QQBMNkFry96YBHK6t5GnS0T9uiidYAr233LkgtvgLIdNrOKjQjni1hkhrc1wd73sCl4bZfTI41BOtZCHBwoV6eYgi9pGOf9jqgkAi3WjweFbsWuUl5ZIBGo8PCSwoZotyhdHT9g0jkEJk01Alckhn8VYQ8QkoyzsPGsW4SyD9vGTSwKgIwFu5iZ3kTxG038kDJcg2w5gWP8p6PksXYyIRZzsi6g7itchRwGevHtaBMnmrLuGHPZQc7LpHN8ibKU6YFNqsVh1Zw5Lh6ldNeOtMOzWRfVpbgSJuzC7rwpdLwCDaylzXkNNPu0Y30DMXxRiyBqXvkkpLEdAYwGRsGk8YPetpDsH2PNJDx9POKZ1EsuE3bSasEKCiOIEV4GxT4Me3lyHLpWU72utnkm3UvnfK8tj4y4TGhyHfdi9HFND0PsPQRzFnANNsIvf6sDInSWGpGEy16jlIturGHOx2BaQ6wUhZGQsNvUpqsmkc05672ajPDa8FHD3LR4Qq8EL9AT86RWcWJvuxKMWN5a2F0zr4DVxaCmJ4iQlRUwwueybrajPRVPOsvcH7GVS0z3QqT6OwAx5IG1ks4j9T0ADR8szrSIRIW6ZuBmWisQvie4TskbuOAL5DJaREhHIanKIEiSMU4movTtULwFw9decBhKnpvLEwymOqgQnfMMA9eEna6AnsJpy2JzecelwDfV6vPydkMBvGDpi8AJucYn6BEOG5f4ylYeXGuzBUUJuQdn4GdO0jEw4GOOPjvNL2LbCYCvqExd8L9S1BxSX8KebsAARBwBUEkRAPJdbAhUrb0ksCWpgZdQlAEaBJhLWYNVF8s3eBwQONqfVcbcjcYYDbJQP2Uv9wrcBHmwZJcpaKMIfDBgcWTdx1ucaAYyKzBP1OfJ4uFHGBr8R5aok4nXpugH2ZmrkKP8dhP9Qcq33MNbXHOw99wy7rDLlNdNsrHB234Stl1WDm0WndvhMYEqhitOj7MI8aFwcoo1hhxLYtRx0pUII5rmJw7yRq7AfsAxUWWKPXoMVSxzBZkbrRLGXqRAKE6fNkD34oTOJgxy1OiWHEwRXGc7WcbwPevV9wRD2StG4Tko10FdHNwxlIXq8kEqcdF6LUhnZhvVVTxmlXoDiJ6Bn4gc0N8Hieg9ifpLZAk3tGleL5wxfjWRhNcrzqKLEKVAxHxqS202HqibQ6OMaetMQTiSRPLfiLUejsBngAlHUp7ztDIx5SH0Q1DzT1AHbju9uOn4kvqO8aKY82rhRvf1t4HF1DpZyK3UioPizpMTHW95xvtkZZsmedBLDYMHpx2j1hthM4GnrjrBEOuceOrxWTPPOOt1rVHV6gjJWG5dRojJAsFpcbBGl5CnNGixOnCPWSowJl3BstCAzbu667k3miCLETTDlXY9FHZ6RxX7cYfojYDMA3KMk2OL1xgnotFJLt5cOQE5tm7XYtpqdOhUHrO4SR4vSisL6H5sS2E5at2lEXAMPLE", + }, + ExpectedCandidates: []sdk.ImportCandidate{ + { + Fields: map[sdk.FieldName]string{ + fieldname.Token: "j0jeJEtBchP9k7HN7lenOOQwDeofsOMaKTcdBONTzFa9qAzyVN8uAAPSkrWvEfL9yHI1DeyJMEde6ZkIhqWBpPJmWq6sJFEYOxItOuCGpZDJlUJYBD8F92BZjJ0Fqi0G7vOl3Q5fhJuZwPxdLZndjqRrvHlr4O1tlB2sFoQr9mud15NQn8FDEpuCDQTQ868Qe4HbkbPsd9wBrpAQ5wHgWPfr5uTBWAl7KAStIDALQKa39TU0S8Tyc4km4uAwizEF8VNyUliJQUdDSgshj1QwqfwiQ92kWSJQ1MIDIr0jKEAXpdRjLbveQXBPjp0QvCTCzIRhASmlXLD6o6s8jCnFBZjoZnGQn3Jn6mPt72GtWCs5HfPyuMqJVhksfL15vp1QQBMNkFry96YBHK6t5GnS0T9uiidYAr233LkgtvgLIdNrOKjQjni1hkhrc1wd73sCl4bZfTI41BOtZCHBwoV6eYgi9pGOf9jqgkAi3WjweFbsWuUl5ZIBGo8PCSwoZotyhdHT9g0jkEJk01Alckhn8VYQ8QkoyzsPGsW4SyD9vGTSwKgIwFu5iZ3kTxG038kDJcg2w5gWP8p6PksXYyIRZzsi6g7itchRwGevHtaBMnmrLuGHPZQc7LpHN8ibKU6YFNqsVh1Zw5Lh6ldNeOtMOzWRfVpbgSJuzC7rwpdLwCDaylzXkNNPu0Y30DMXxRiyBqXvkkpLEdAYwGRsGk8YPetpDsH2PNJDx9POKZ1EsuE3bSasEKCiOIEV4GxT4Me3lyHLpWU72utnkm3UvnfK8tj4y4TGhyHfdi9HFND0PsPQRzFnANNsIvf6sDInSWGpGEy16jlIturGHOx2BaQ6wUhZGQsNvUpqsmkc05672ajPDa8FHD3LR4Qq8EL9AT86RWcWJvuxKMWN5a2F0zr4DVxaCmJ4iQlRUwwueybrajPRVPOsvcH7GVS0z3QqT6OwAx5IG1ks4j9T0ADR8szrSIRIW6ZuBmWisQvie4TskbuOAL5DJaREhHIanKIEiSMU4movTtULwFw9decBhKnpvLEwymOqgQnfMMA9eEna6AnsJpy2JzecelwDfV6vPydkMBvGDpi8AJucYn6BEOG5f4ylYeXGuzBUUJuQdn4GdO0jEw4GOOPjvNL2LbCYCvqExd8L9S1BxSX8KebsAARBwBUEkRAPJdbAhUrb0ksCWpgZdQlAEaBJhLWYNVF8s3eBwQONqfVcbcjcYYDbJQP2Uv9wrcBHmwZJcpaKMIfDBgcWTdx1ucaAYyKzBP1OfJ4uFHGBr8R5aok4nXpugH2ZmrkKP8dhP9Qcq33MNbXHOw99wy7rDLlNdNsrHB234Stl1WDm0WndvhMYEqhitOj7MI8aFwcoo1hhxLYtRx0pUII5rmJw7yRq7AfsAxUWWKPXoMVSxzBZkbrRLGXqRAKE6fNkD34oTOJgxy1OiWHEwRXGc7WcbwPevV9wRD2StG4Tko10FdHNwxlIXq8kEqcdF6LUhnZhvVVTxmlXoDiJ6Bn4gc0N8Hieg9ifpLZAk3tGleL5wxfjWRhNcrzqKLEKVAxHxqS202HqibQ6OMaetMQTiSRPLfiLUejsBngAlHUp7ztDIx5SH0Q1DzT1AHbju9uOn4kvqO8aKY82rhRvf1t4HF1DpZyK3UioPizpMTHW95xvtkZZsmedBLDYMHpx2j1hthM4GnrjrBEOuceOrxWTPPOOt1rVHV6gjJWG5dRojJAsFpcbBGl5CnNGixOnCPWSowJl3BstCAzbu667k3miCLETTDlXY9FHZ6RxX7cYfojYDMA3KMk2OL1xgnotFJLt5cOQE5tm7XYtpqdOhUHrO4SR4vSisL6H5sS2E5at2lEXAMPLE", + }, + }, + }, + }, + "config file": { + Files: map[string]string{ + "~/.ploi/config.php": plugintest.LoadFixture(t, "config.php"), + }, + ExpectedCandidates: []sdk.ImportCandidate{ + { + Fields: map[sdk.FieldName]string{ + fieldname.Token: "j0jeJEtBchP9k7HN7lenOOQwDeofsOMaKTcdBONTzFa9qAzyVN8uAAPSkrWvEfL9yHI1DeyJMEde6ZkIhqWBpPJmWq6sJFEYOxItOuCGpZDJlUJYBD8F92BZjJ0Fqi0G7vOl3Q5fhJuZwPxdLZndjqRrvHlr4O1tlB2sFoQr9mud15NQn8FDEpuCDQTQ868Qe4HbkbPsd9wBrpAQ5wHgWPfr5uTBWAl7KAStIDALQKa39TU0S8Tyc4km4uAwizEF8VNyUliJQUdDSgshj1QwqfwiQ92kWSJQ1MIDIr0jKEAXpdRjLbveQXBPjp0QvCTCzIRhASmlXLD6o6s8jCnFBZjoZnGQn3Jn6mPt72GtWCs5HfPyuMqJVhksfL15vp1QQBMNkFry96YBHK6t5GnS0T9uiidYAr233LkgtvgLIdNrOKjQjni1hkhrc1wd73sCl4bZfTI41BOtZCHBwoV6eYgi9pGOf9jqgkAi3WjweFbsWuUl5ZIBGo8PCSwoZotyhdHT9g0jkEJk01Alckhn8VYQ8QkoyzsPGsW4SyD9vGTSwKgIwFu5iZ3kTxG038kDJcg2w5gWP8p6PksXYyIRZzsi6g7itchRwGevHtaBMnmrLuGHPZQc7LpHN8ibKU6YFNqsVh1Zw5Lh6ldNeOtMOzWRfVpbgSJuzC7rwpdLwCDaylzXkNNPu0Y30DMXxRiyBqXvkkpLEdAYwGRsGk8YPetpDsH2PNJDx9POKZ1EsuE3bSasEKCiOIEV4GxT4Me3lyHLpWU72utnkm3UvnfK8tj4y4TGhyHfdi9HFND0PsPQRzFnANNsIvf6sDInSWGpGEy16jlIturGHOx2BaQ6wUhZGQsNvUpqsmkc05672ajPDa8FHD3LR4Qq8EL9AT86RWcWJvuxKMWN5a2F0zr4DVxaCmJ4iQlRUwwueybrajPRVPOsvcH7GVS0z3QqT6OwAx5IG1ks4j9T0ADR8szrSIRIW6ZuBmWisQvie4TskbuOAL5DJaREhHIanKIEiSMU4movTtULwFw9decBhKnpvLEwymOqgQnfMMA9eEna6AnsJpy2JzecelwDfV6vPydkMBvGDpi8AJucYn6BEOG5f4ylYeXGuzBUUJuQdn4GdO0jEw4GOOPjvNL2LbCYCvqExd8L9S1BxSX8KebsAARBwBUEkRAPJdbAhUrb0ksCWpgZdQlAEaBJhLWYNVF8s3eBwQONqfVcbcjcYYDbJQP2Uv9wrcBHmwZJcpaKMIfDBgcWTdx1ucaAYyKzBP1OfJ4uFHGBr8R5aok4nXpugH2ZmrkKP8dhP9Qcq33MNbXHOw99wy7rDLlNdNsrHB234Stl1WDm0WndvhMYEqhitOj7MI8aFwcoo1hhxLYtRx0pUII5rmJw7yRq7AfsAxUWWKPXoMVSxzBZkbrRLGXqRAKE6fNkD34oTOJgxy1OiWHEwRXGc7WcbwPevV9wRD2StG4Tko10FdHNwxlIXq8kEqcdF6LUhnZhvVVTxmlXoDiJ6Bn4gc0N8Hieg9ifpLZAk3tGleL5wxfjWRhNcrzqKLEKVAxHxqS202HqibQ6OMaetMQTiSRPLfiLUejsBngAlHUp7ztDIx5SH0Q1DzT1AHbju9uOn4kvqO8aKY82rhRvf1t4HF1DpZyK3UioPizpMTHW95xvtkZZsmedBLDYMHpx2j1hthM4GnrjrBEOuceOrxWTPPOOt1rVHV6gjJWG5dRojJAsFpcbBGl5CnNGixOnCPWSowJl3BstCAzbu667k3miCLETTDlXY9FHZ6RxX7cYfojYDMA3KMk2OL1xgnotFJLt5cOQE5tm7XYtpqdOhUHrO4SR4vSisL6H5sS2E5at2lEXAMPLE", + }, + }, + }, + }, + }) +} diff --git a/plugins/ploi/ploi.go b/plugins/ploi/ploi.go new file mode 100644 index 00000000..78d2ffa8 --- /dev/null +++ b/plugins/ploi/ploi.go @@ -0,0 +1,25 @@ +package ploi + +import ( + "github.com/1Password/shell-plugins/sdk" + "github.com/1Password/shell-plugins/sdk/needsauth" + "github.com/1Password/shell-plugins/sdk/schema" + "github.com/1Password/shell-plugins/sdk/schema/credname" +) + +func PloiCLICLI() schema.Executable { + return schema.Executable{ + Name: "Ploi CLI", + Runs: []string{"ploi"}, + DocsURL: sdk.URL("https://developers.ploi.io/?documentation=cli"), + NeedsAuth: needsauth.IfAll( + needsauth.NotForHelpOrVersion(), + needsauth.NotWithoutArgs(), + ), + Uses: []schema.CredentialUsage{ + { + Name: credname.APIToken, + }, + }, + } +} diff --git a/plugins/ploi/plugin.go b/plugins/ploi/plugin.go new file mode 100644 index 00000000..7117de94 --- /dev/null +++ b/plugins/ploi/plugin.go @@ -0,0 +1,22 @@ +package ploi + +import ( + "github.com/1Password/shell-plugins/sdk" + "github.com/1Password/shell-plugins/sdk/schema" +) + +func New() schema.Plugin { + return schema.Plugin{ + Name: "ploi", + Platform: schema.PlatformInfo{ + Name: "Ploi CLI", + Homepage: sdk.URL("https://ploi.io"), + }, + Credentials: []schema.CredentialType{ + APIToken(), + }, + Executables: []schema.Executable{ + PloiCLICLI(), + }, + } +} diff --git a/plugins/ploi/test-fixtures/config.php b/plugins/ploi/test-fixtures/config.php new file mode 100644 index 00000000..cbfa5b4d --- /dev/null +++ b/plugins/ploi/test-fixtures/config.php @@ -0,0 +1,5 @@ + 'j0jeJEtBchP9k7HN7lenOOQwDeofsOMaKTcdBONTzFa9qAzyVN8uAAPSkrWvEfL9yHI1DeyJMEde6ZkIhqWBpPJmWq6sJFEYOxItOuCGpZDJlUJYBD8F92BZjJ0Fqi0G7vOl3Q5fhJuZwPxdLZndjqRrvHlr4O1tlB2sFoQr9mud15NQn8FDEpuCDQTQ868Qe4HbkbPsd9wBrpAQ5wHgWPfr5uTBWAl7KAStIDALQKa39TU0S8Tyc4km4uAwizEF8VNyUliJQUdDSgshj1QwqfwiQ92kWSJQ1MIDIr0jKEAXpdRjLbveQXBPjp0QvCTCzIRhASmlXLD6o6s8jCnFBZjoZnGQn3Jn6mPt72GtWCs5HfPyuMqJVhksfL15vp1QQBMNkFry96YBHK6t5GnS0T9uiidYAr233LkgtvgLIdNrOKjQjni1hkhrc1wd73sCl4bZfTI41BOtZCHBwoV6eYgi9pGOf9jqgkAi3WjweFbsWuUl5ZIBGo8PCSwoZotyhdHT9g0jkEJk01Alckhn8VYQ8QkoyzsPGsW4SyD9vGTSwKgIwFu5iZ3kTxG038kDJcg2w5gWP8p6PksXYyIRZzsi6g7itchRwGevHtaBMnmrLuGHPZQc7LpHN8ibKU6YFNqsVh1Zw5Lh6ldNeOtMOzWRfVpbgSJuzC7rwpdLwCDaylzXkNNPu0Y30DMXxRiyBqXvkkpLEdAYwGRsGk8YPetpDsH2PNJDx9POKZ1EsuE3bSasEKCiOIEV4GxT4Me3lyHLpWU72utnkm3UvnfK8tj4y4TGhyHfdi9HFND0PsPQRzFnANNsIvf6sDInSWGpGEy16jlIturGHOx2BaQ6wUhZGQsNvUpqsmkc05672ajPDa8FHD3LR4Qq8EL9AT86RWcWJvuxKMWN5a2F0zr4DVxaCmJ4iQlRUwwueybrajPRVPOsvcH7GVS0z3QqT6OwAx5IG1ks4j9T0ADR8szrSIRIW6ZuBmWisQvie4TskbuOAL5DJaREhHIanKIEiSMU4movTtULwFw9decBhKnpvLEwymOqgQnfMMA9eEna6AnsJpy2JzecelwDfV6vPydkMBvGDpi8AJucYn6BEOG5f4ylYeXGuzBUUJuQdn4GdO0jEw4GOOPjvNL2LbCYCvqExd8L9S1BxSX8KebsAARBwBUEkRAPJdbAhUrb0ksCWpgZdQlAEaBJhLWYNVF8s3eBwQONqfVcbcjcYYDbJQP2Uv9wrcBHmwZJcpaKMIfDBgcWTdx1ucaAYyKzBP1OfJ4uFHGBr8R5aok4nXpugH2ZmrkKP8dhP9Qcq33MNbXHOw99wy7rDLlNdNsrHB234Stl1WDm0WndvhMYEqhitOj7MI8aFwcoo1hhxLYtRx0pUII5rmJw7yRq7AfsAxUWWKPXoMVSxzBZkbrRLGXqRAKE6fNkD34oTOJgxy1OiWHEwRXGc7WcbwPevV9wRD2StG4Tko10FdHNwxlIXq8kEqcdF6LUhnZhvVVTxmlXoDiJ6Bn4gc0N8Hieg9ifpLZAk3tGleL5wxfjWRhNcrzqKLEKVAxHxqS202HqibQ6OMaetMQTiSRPLfiLUejsBngAlHUp7ztDIx5SH0Q1DzT1AHbju9uOn4kvqO8aKY82rhRvf1t4HF1DpZyK3UioPizpMTHW95xvtkZZsmedBLDYMHpx2j1hthM4GnrjrBEOuceOrxWTPPOOt1rVHV6gjJWG5dRojJAsFpcbBGl5CnNGixOnCPWSowJl3BstCAzbu667k3miCLETTDlXY9FHZ6RxX7cYfojYDMA3KMk2OL1xgnotFJLt5cOQE5tm7XYtpqdOhUHrO4SR4vSisL6H5sS2E5at2lEXAMPLE', +];