Skip to content
This repository has been archived by the owner on Apr 25, 2023. It is now read-only.

Commit

Permalink
feat: installing plugins from marketplace (#162)
Browse files Browse the repository at this point in the history
  • Loading branch information
rot1024 committed Aug 12, 2022
1 parent 12c6dfb commit 276ef5f
Show file tree
Hide file tree
Showing 54 changed files with 1,388 additions and 1,407 deletions.
470 changes: 0 additions & 470 deletions internal/adapter/gql/generated.go

Large diffs are not rendered by default.

14 changes: 0 additions & 14 deletions internal/adapter/gql/gqlmodel/convert_plugin.go
Expand Up @@ -57,20 +57,6 @@ func ToPluginExtensionType(t plugin.ExtensionType) PluginExtensionType {
return PluginExtensionType("")
}

func ToPluginMetadata(t *plugin.Metadata) *PluginMetadata {
if t == nil {
return nil
}

return &PluginMetadata{
Name: t.Name,
Description: t.Description,
ThumbnailURL: t.ThumbnailUrl,
Author: t.Author,
CreatedAt: t.CreatedAt,
}
}

func ToPluginWidgetLayout(wl *plugin.WidgetLayout) *WidgetLayout {
if wl == nil {
return nil
Expand Down
8 changes: 0 additions & 8 deletions internal/adapter/gql/gqlmodel/models_gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 0 additions & 9 deletions internal/adapter/gql/loader_plugin.go
Expand Up @@ -36,15 +36,6 @@ func (c *PluginLoader) Fetch(ctx context.Context, ids []gqlmodel.ID) ([]*gqlmode
return plugins, nil
}

func (c *PluginLoader) FetchPluginMetadata(ctx context.Context) ([]*gqlmodel.PluginMetadata, error) {
res, err := c.usecase.FetchPluginMetadata(ctx, getOperator(ctx))
if err != nil {
return nil, err
}

return util.Map(res, gqlmodel.ToPluginMetadata), nil
}

// data loader

type PluginDataLoader interface {
Expand Down
25 changes: 14 additions & 11 deletions internal/adapter/gql/resolver_mutation_layer.go
Expand Up @@ -15,18 +15,20 @@ func (r *mutationResolver) AddLayerItem(ctx context.Context, input gqlmodel.AddL
return nil, err
}

pid, err := gqlmodel.ToPluginID(input.PluginID)
if err != nil {
return nil, err
}
// layers are no longer extendable with plugins
// pid, err := gqlmodel.ToPluginID(input.PluginID)
// if err != nil {
// return nil, err
// }

layer, parent, err := usecases(ctx).Layer.AddItem(ctx, interfaces.AddLayerItemInput{
ParentLayerID: lid,
PluginID: &pid,
ExtensionID: lo.ToPtr(id.PluginExtensionID(input.ExtensionID)),
Index: input.Index,
Name: gqlmodel.RefToString(input.Name),
LatLng: gqlmodel.ToPropertyLatLng(input.Lat, input.Lng),
// layers are no longer extendable with plugins
// PluginID: &pid,
ExtensionID: lo.ToPtr(id.PluginExtensionID(input.ExtensionID)),
Index: input.Index,
Name: gqlmodel.RefToString(input.Name),
LatLng: gqlmodel.ToPropertyLatLng(input.Lat, input.Lng),
// LinkedDatasetID: input.LinkedDatasetID,
}, getOperator(ctx))
if err != nil {
Expand All @@ -47,8 +49,9 @@ func (r *mutationResolver) AddLayerGroup(ctx context.Context, input gqlmodel.Add
}

layer, parent, err := usecases(ctx).Layer.AddGroup(ctx, interfaces.AddLayerGroupInput{
ParentLayerID: lid,
PluginID: gqlmodel.ToPluginIDRef(input.PluginID),
ParentLayerID: lid,
// layers are no longer extendable with plugins
// PluginID: gqlmodel.ToPluginIDRef(input.PluginID),
ExtensionID: gqlmodel.ToStringIDRef[id.PluginExtension](input.ExtensionID),
Index: input.Index,
Name: gqlmodel.RefToString(input.Name),
Expand Down
4 changes: 2 additions & 2 deletions internal/adapter/gql/resolver_mutation_scene.go
Expand Up @@ -131,14 +131,14 @@ func (r *mutationResolver) InstallPlugin(ctx context.Context, input gqlmodel.Ins
return nil, err
}

scene, pl, pr, err := usecases(ctx).Scene.InstallPlugin(ctx, sid, pid, getOperator(ctx))
scene, pr, err := usecases(ctx).Scene.InstallPlugin(ctx, sid, pid, getOperator(ctx))
if err != nil {
return nil, err
}

return &gqlmodel.InstallPluginPayload{
Scene: gqlmodel.ToScene(scene), ScenePlugin: &gqlmodel.ScenePlugin{
PluginID: gqlmodel.IDFromPluginID(pl),
PluginID: input.PluginID,
PropertyID: gqlmodel.IDFromRef(pr),
},
}, nil
Expand Down
4 changes: 0 additions & 4 deletions internal/adapter/gql/resolver_query.go
Expand Up @@ -259,7 +259,3 @@ func (r *queryResolver) SearchUser(ctx context.Context, nameOrEmail string) (*gq
func (r *queryResolver) CheckProjectAlias(ctx context.Context, alias string) (*gqlmodel.ProjectAliasAvailability, error) {
return loaders(ctx).Project.CheckAlias(ctx, alias)
}

func (r *queryResolver) InstallablePlugins(ctx context.Context) ([]*gqlmodel.PluginMetadata, error) {
return loaders(ctx).Plugin.FetchPluginMetadata(ctx)
}
34 changes: 34 additions & 0 deletions internal/app/config.go
Expand Up @@ -12,6 +12,8 @@ import (
"github.com/kelseyhightower/envconfig"
"github.com/reearth/reearth-backend/pkg/auth"
"github.com/reearth/reearth-backend/pkg/log"
"golang.org/x/oauth2"
"golang.org/x/oauth2/clientcredentials"
)

const configPrefix = "reearth"
Expand All @@ -33,6 +35,7 @@ type Config struct {
Tracer string
TracerSample float64
GCS GCSConfig
Marketplace MarketplaceConfig
AssetBaseURL string `default:"http://localhost:8080/assets"`
Origins []string
Web WebConfig
Expand Down Expand Up @@ -301,3 +304,34 @@ func addHTTPScheme(host string) string {
}
return host
}

type MarketplaceConfig struct {
Endpoint string
OAuth OAuthClientCredentialsConfig
}

type OAuthClientCredentialsConfig struct {
ClientID string
ClientSecret string
TokenURL string
Scopes []string
Audience []string
}

func (c OAuthClientCredentialsConfig) Config() clientcredentials.Config {
var params url.Values
if len(c.Audience) > 0 {
params = url.Values{
"audience": c.Audience,
}
}

return clientcredentials.Config{
ClientID: c.ClientID,
ClientSecret: c.ClientSecret,
TokenURL: c.TokenURL,
Scopes: c.Scopes,
AuthStyle: oauth2.AuthStyleInParams,
EndpointParams: params,
}
}
18 changes: 9 additions & 9 deletions internal/app/repo.go
Expand Up @@ -5,19 +5,17 @@ import (
"fmt"
"time"

"github.com/reearth/reearth-backend/internal/infrastructure/mailer"

"github.com/reearth/reearth-backend/internal/infrastructure/github"
"github.com/reearth/reearth-backend/internal/infrastructure/google"
"github.com/spf13/afero"

"github.com/reearth/reearth-backend/internal/infrastructure/auth0"
"github.com/reearth/reearth-backend/internal/infrastructure/fs"
"github.com/reearth/reearth-backend/internal/infrastructure/gcs"
"github.com/reearth/reearth-backend/internal/infrastructure/google"
"github.com/reearth/reearth-backend/internal/infrastructure/mailer"
"github.com/reearth/reearth-backend/internal/infrastructure/marketplace"
mongorepo "github.com/reearth/reearth-backend/internal/infrastructure/mongo"
"github.com/reearth/reearth-backend/internal/usecase/gateway"
"github.com/reearth/reearth-backend/internal/usecase/repo"
"github.com/reearth/reearth-backend/pkg/log"
"github.com/spf13/afero"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"go.opentelemetry.io/contrib/instrumentation/go.mongodb.org/mongo-driver/mongo/otelmongo"
Expand Down Expand Up @@ -66,15 +64,17 @@ func initReposAndGateways(ctx context.Context, conf *Config, debug bool) (*repo.
// Auth0
gateways.Authenticator = auth0.New(conf.Auth0.Domain, conf.Auth0.ClientID, conf.Auth0.ClientSecret)

// github
gateways.PluginRegistry = github.NewPluginRegistry()

// google
gateways.Google = google.NewGoogle()

// mailer
gateways.Mailer = initMailer(conf)

// Marketplace
if conf.Marketplace.Endpoint != "" {
gateways.PluginRegistry = marketplace.New(conf.Marketplace.Endpoint, conf.Marketplace.OAuth.Config())
}

// release lock of all scenes
if err := repos.SceneLock.ReleaseAllLock(context.Background()); err != nil {
log.Fatalln(fmt.Sprintf("repo initialization error: %+v", err))
Expand Down

0 comments on commit 276ef5f

Please sign in to comment.