account_service

package module
v0.0.0-...-f7a2401 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 6, 2017 License: MIT Imports: 7 Imported by: 0

README

Account Service

Build Status GoDoc

An account microservice that speaks gRPC made with the Lile generator, backed by PostgreSQL.

service AccountService {
  rpc List (ListAccountsRequest) returns (ListAccountsResponse) {}
  rpc GetById (GetByIdRequest) returns (Account) {}
  rpc GetByEmail (GetByEmailRequest) returns (Account) {}
  rpc AuthenticateByEmail (AuthenticateByEmailRequest) returns (Account) {}
  rpc GeneratePasswordToken (GeneratePasswordTokenRequest) returns (GeneratePasswordTokenResponse) {}
  rpc ResetPassword (ResetPasswordRequest) returns (Account) {}
  rpc ConfirmAccount (ConfirmAccountRequest) returns (Account) {}
  rpc Create (CreateAccountRequest) returns (Account) {}
  rpc Update (UpdateAccountRequest) returns (Account) {}
  rpc Delete (DeleteAccountRequest) returns (google.protobuf.Empty) {}
}

Details

Authentication

Passwords are stored hashed with bcrypt, no RPC method returns passwords or hashed passwords.

You can do simple authentication with the AuthenticateByEmail RPC method to roll your own authentication logic. I.e you can auth with email and password, but managing password length or auth tokens is up to you.

Validations

At the moment the service will reject account create and update requests have either a blank name or email. "" is considered blank.

There is no email validation other than 'present' so to speak as I've never seen it done quite right.

Docker

A pre build Docker container is available at:

docker pull lileio/account_service

Commands

Usage:
  account_service [command]

Available Commands:
  migrate     Run database migrations
  server      Run the gRPC server
  client      Interact with a running server

Environment Setup

Setup is configured via environment variables, depending on the database chosen.

The app provides migrations, but does create the databases itself.

PostgreSQL

PostgreSQL is configured using the single ENV variable POSTGRESQL_URL and can be a url like string e.g.

POSTGRESQL_URL="postgres://host/database"

The PostgreSQL driver uses UUID's as primary key and a single table.

Image Service

Uploading and attaching an image is supported via the lile image_service via an Image Operation. To do so, you will need to set the IMAGE_SERVICE_ADDR variable. Account Service will run fine without this, but you'll need to leave the image upload nil.

IMAGE_SERVICE_ADDR="10.0.0.1:8000"

Test

The docker-compose.yml file will run PostgreSQL and Cassandra for testing purposes, but you will need create the test databases yourself. Migrations are run automatically by the test suite.

For PostgreSQL (using psql):

CREATE DATABASE account_service_test;

Documentation

Overview

Package account_service is a generated protocol buffer package.

It is generated from these files:

account_service.proto

It has these top-level messages:

Account
ListAccountsRequest
ListAccountsResponse
GetByIdRequest
GetByEmailRequest
AuthenticateByEmailRequest
GeneratePasswordTokenRequest
GeneratePasswordTokenResponse
ResetPasswordRequest
ConfirmAccountRequest
CreateAccountRequest
UpdateAccountRequest
DeleteAccountRequest

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func RegisterAccountServiceServer

func RegisterAccountServiceServer(s *grpc.Server, srv AccountServiceServer)

Types

type Account

type Account struct {
	Id                 string                          `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"`
	Name               string                          `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"`
	Email              string                          `protobuf:"bytes,3,opt,name=email" json:"email,omitempty"`
	Images             map[string]*image_service.Image `` /* 132-byte string literal not displayed */
	ConfirmToken       string                          `protobuf:"bytes,5,opt,name=confirm_token,json=confirmToken" json:"confirm_token,omitempty"`
	PasswordResetToken string                          `protobuf:"bytes,6,opt,name=password_reset_token,json=passwordResetToken" json:"password_reset_token,omitempty"`
	Metadata           map[string]string               `` /* 136-byte string literal not displayed */
}

func (*Account) Descriptor

func (*Account) Descriptor() ([]byte, []int)

func (*Account) GetConfirmToken

func (m *Account) GetConfirmToken() string

func (*Account) GetEmail

func (m *Account) GetEmail() string

func (*Account) GetId

func (m *Account) GetId() string

func (*Account) GetImages

func (m *Account) GetImages() map[string]*image_service.Image

func (*Account) GetMetadata

func (m *Account) GetMetadata() map[string]string

func (*Account) GetName

func (m *Account) GetName() string

func (*Account) GetPasswordResetToken

func (m *Account) GetPasswordResetToken() string

func (*Account) ProtoMessage

func (*Account) ProtoMessage()

func (*Account) Reset

func (m *Account) Reset()

func (*Account) String

func (m *Account) String() string

type AccountServiceClient

type AccountServiceClient interface {
	List(ctx context.Context, in *ListAccountsRequest, opts ...grpc.CallOption) (*ListAccountsResponse, error)
	GetById(ctx context.Context, in *GetByIdRequest, opts ...grpc.CallOption) (*Account, error)
	GetByEmail(ctx context.Context, in *GetByEmailRequest, opts ...grpc.CallOption) (*Account, error)
	AuthenticateByEmail(ctx context.Context, in *AuthenticateByEmailRequest, opts ...grpc.CallOption) (*Account, error)
	GeneratePasswordToken(ctx context.Context, in *GeneratePasswordTokenRequest, opts ...grpc.CallOption) (*GeneratePasswordTokenResponse, error)
	ResetPassword(ctx context.Context, in *ResetPasswordRequest, opts ...grpc.CallOption) (*Account, error)
	ConfirmAccount(ctx context.Context, in *ConfirmAccountRequest, opts ...grpc.CallOption) (*Account, error)
	Create(ctx context.Context, in *CreateAccountRequest, opts ...grpc.CallOption) (*Account, error)
	Update(ctx context.Context, in *UpdateAccountRequest, opts ...grpc.CallOption) (*Account, error)
	Delete(ctx context.Context, in *DeleteAccountRequest, opts ...grpc.CallOption) (*google_protobuf.Empty, error)
}

func NewAccountServiceClient

func NewAccountServiceClient(cc *grpc.ClientConn) AccountServiceClient

type AuthenticateByEmailRequest

type AuthenticateByEmailRequest struct {
	Email    string `protobuf:"bytes,1,opt,name=email" json:"email,omitempty"`
	Password string `protobuf:"bytes,2,opt,name=password" json:"password,omitempty"`
}

func (*AuthenticateByEmailRequest) Descriptor

func (*AuthenticateByEmailRequest) Descriptor() ([]byte, []int)

func (*AuthenticateByEmailRequest) GetEmail

func (m *AuthenticateByEmailRequest) GetEmail() string

func (*AuthenticateByEmailRequest) GetPassword

func (m *AuthenticateByEmailRequest) GetPassword() string

func (*AuthenticateByEmailRequest) ProtoMessage

func (*AuthenticateByEmailRequest) ProtoMessage()

func (*AuthenticateByEmailRequest) Reset

func (m *AuthenticateByEmailRequest) Reset()

func (*AuthenticateByEmailRequest) String

func (m *AuthenticateByEmailRequest) String() string

type ConfirmAccountRequest

type ConfirmAccountRequest struct {
	Token string `protobuf:"bytes,1,opt,name=token" json:"token,omitempty"`
}

func (*ConfirmAccountRequest) Descriptor

func (*ConfirmAccountRequest) Descriptor() ([]byte, []int)

func (*ConfirmAccountRequest) GetToken

func (m *ConfirmAccountRequest) GetToken() string

func (*ConfirmAccountRequest) ProtoMessage

func (*ConfirmAccountRequest) ProtoMessage()

func (*ConfirmAccountRequest) Reset

func (m *ConfirmAccountRequest) Reset()

func (*ConfirmAccountRequest) String

func (m *ConfirmAccountRequest) String() string

type CreateAccountRequest

type CreateAccountRequest struct {
	Account  *Account                         `protobuf:"bytes,1,opt,name=account" json:"account,omitempty"`
	Password string                           `protobuf:"bytes,2,opt,name=password" json:"password,omitempty"`
	Image    *image_service.ImageStoreRequest `protobuf:"bytes,3,opt,name=image" json:"image,omitempty"`
}

func (*CreateAccountRequest) Descriptor

func (*CreateAccountRequest) Descriptor() ([]byte, []int)

func (*CreateAccountRequest) GetAccount

func (m *CreateAccountRequest) GetAccount() *Account

func (*CreateAccountRequest) GetImage

func (*CreateAccountRequest) GetPassword

func (m *CreateAccountRequest) GetPassword() string

func (*CreateAccountRequest) ProtoMessage

func (*CreateAccountRequest) ProtoMessage()

func (*CreateAccountRequest) Reset

func (m *CreateAccountRequest) Reset()

func (*CreateAccountRequest) String

func (m *CreateAccountRequest) String() string

type DeleteAccountRequest

type DeleteAccountRequest struct {
	Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"`
}

func (*DeleteAccountRequest) Descriptor

func (*DeleteAccountRequest) Descriptor() ([]byte, []int)

func (*DeleteAccountRequest) GetId

func (m *DeleteAccountRequest) GetId() string

func (*DeleteAccountRequest) ProtoMessage

func (*DeleteAccountRequest) ProtoMessage()

func (*DeleteAccountRequest) Reset

func (m *DeleteAccountRequest) Reset()

func (*DeleteAccountRequest) String

func (m *DeleteAccountRequest) String() string

type GeneratePasswordTokenRequest

type GeneratePasswordTokenRequest struct {
	Email string `protobuf:"bytes,1,opt,name=email" json:"email,omitempty"`
}

func (*GeneratePasswordTokenRequest) Descriptor

func (*GeneratePasswordTokenRequest) Descriptor() ([]byte, []int)

func (*GeneratePasswordTokenRequest) GetEmail

func (m *GeneratePasswordTokenRequest) GetEmail() string

func (*GeneratePasswordTokenRequest) ProtoMessage

func (*GeneratePasswordTokenRequest) ProtoMessage()

func (*GeneratePasswordTokenRequest) Reset

func (m *GeneratePasswordTokenRequest) Reset()

func (*GeneratePasswordTokenRequest) String

type GeneratePasswordTokenResponse

type GeneratePasswordTokenResponse struct {
	Token string `protobuf:"bytes,1,opt,name=token" json:"token,omitempty"`
}

func (*GeneratePasswordTokenResponse) Descriptor

func (*GeneratePasswordTokenResponse) Descriptor() ([]byte, []int)

func (*GeneratePasswordTokenResponse) GetToken

func (m *GeneratePasswordTokenResponse) GetToken() string

func (*GeneratePasswordTokenResponse) ProtoMessage

func (*GeneratePasswordTokenResponse) ProtoMessage()

func (*GeneratePasswordTokenResponse) Reset

func (m *GeneratePasswordTokenResponse) Reset()

func (*GeneratePasswordTokenResponse) String

type GetByEmailRequest

type GetByEmailRequest struct {
	Email string `protobuf:"bytes,1,opt,name=email" json:"email,omitempty"`
}

func (*GetByEmailRequest) Descriptor

func (*GetByEmailRequest) Descriptor() ([]byte, []int)

func (*GetByEmailRequest) GetEmail

func (m *GetByEmailRequest) GetEmail() string

func (*GetByEmailRequest) ProtoMessage

func (*GetByEmailRequest) ProtoMessage()

func (*GetByEmailRequest) Reset

func (m *GetByEmailRequest) Reset()

func (*GetByEmailRequest) String

func (m *GetByEmailRequest) String() string

type GetByIdRequest

type GetByIdRequest struct {
	Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"`
}

func (*GetByIdRequest) Descriptor

func (*GetByIdRequest) Descriptor() ([]byte, []int)

func (*GetByIdRequest) GetId

func (m *GetByIdRequest) GetId() string

func (*GetByIdRequest) ProtoMessage

func (*GetByIdRequest) ProtoMessage()

func (*GetByIdRequest) Reset

func (m *GetByIdRequest) Reset()

func (*GetByIdRequest) String

func (m *GetByIdRequest) String() string

type ListAccountsRequest

type ListAccountsRequest struct {
	PageSize  int32  `protobuf:"varint,1,opt,name=page_size,json=pageSize" json:"page_size,omitempty"`
	PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken" json:"page_token,omitempty"`
}

func (*ListAccountsRequest) Descriptor

func (*ListAccountsRequest) Descriptor() ([]byte, []int)

func (*ListAccountsRequest) GetPageSize

func (m *ListAccountsRequest) GetPageSize() int32

func (*ListAccountsRequest) GetPageToken

func (m *ListAccountsRequest) GetPageToken() string

func (*ListAccountsRequest) ProtoMessage

func (*ListAccountsRequest) ProtoMessage()

func (*ListAccountsRequest) Reset

func (m *ListAccountsRequest) Reset()

func (*ListAccountsRequest) String

func (m *ListAccountsRequest) String() string

type ListAccountsResponse

type ListAccountsResponse struct {
	Accounts      []*Account `protobuf:"bytes,1,rep,name=accounts" json:"accounts,omitempty"`
	NextPageToken string     `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"`
}

func (*ListAccountsResponse) Descriptor

func (*ListAccountsResponse) Descriptor() ([]byte, []int)

func (*ListAccountsResponse) GetAccounts

func (m *ListAccountsResponse) GetAccounts() []*Account

func (*ListAccountsResponse) GetNextPageToken

func (m *ListAccountsResponse) GetNextPageToken() string

func (*ListAccountsResponse) ProtoMessage

func (*ListAccountsResponse) ProtoMessage()

func (*ListAccountsResponse) Reset

func (m *ListAccountsResponse) Reset()

func (*ListAccountsResponse) String

func (m *ListAccountsResponse) String() string

type ResetPasswordRequest

type ResetPasswordRequest struct {
	Token    string `protobuf:"bytes,1,opt,name=token" json:"token,omitempty"`
	Password string `protobuf:"bytes,2,opt,name=password" json:"password,omitempty"`
}

func (*ResetPasswordRequest) Descriptor

func (*ResetPasswordRequest) Descriptor() ([]byte, []int)

func (*ResetPasswordRequest) GetPassword

func (m *ResetPasswordRequest) GetPassword() string

func (*ResetPasswordRequest) GetToken

func (m *ResetPasswordRequest) GetToken() string

func (*ResetPasswordRequest) ProtoMessage

func (*ResetPasswordRequest) ProtoMessage()

func (*ResetPasswordRequest) Reset

func (m *ResetPasswordRequest) Reset()

func (*ResetPasswordRequest) String

func (m *ResetPasswordRequest) String() string

type UpdateAccountRequest

type UpdateAccountRequest struct {
	Id       string                           `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"`
	Password string                           `protobuf:"bytes,2,opt,name=password" json:"password,omitempty"`
	Image    *image_service.ImageStoreRequest `protobuf:"bytes,3,opt,name=image" json:"image,omitempty"`
	Account  *Account                         `protobuf:"bytes,4,opt,name=account" json:"account,omitempty"`
}

func (*UpdateAccountRequest) Descriptor

func (*UpdateAccountRequest) Descriptor() ([]byte, []int)

func (*UpdateAccountRequest) GetAccount

func (m *UpdateAccountRequest) GetAccount() *Account

func (*UpdateAccountRequest) GetId

func (m *UpdateAccountRequest) GetId() string

func (*UpdateAccountRequest) GetImage

func (*UpdateAccountRequest) GetPassword

func (m *UpdateAccountRequest) GetPassword() string

func (*UpdateAccountRequest) ProtoMessage

func (*UpdateAccountRequest) ProtoMessage()

func (*UpdateAccountRequest) Reset

func (m *UpdateAccountRequest) Reset()

func (*UpdateAccountRequest) String

func (m *UpdateAccountRequest) String() string

Directories

Path Synopsis
cmd

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL