Compare commits

..

3 Commits

Author SHA1 Message Date
523fcee03b wip: workgroup description 2023-08-31 06:45:04 -06:00
4ee3de773c Possibilité de configurer les options du cookie 2020-10-13 14:59:25 +02:00
d4ca478b44 Mise à jour goweb-oidc 2020-10-13 14:56:28 +02:00
19 changed files with 57 additions and 110 deletions

View File

@ -14,6 +14,7 @@ export function InfoForm({ workgroup, onChange }: InfoFormProps) {
workgroup: {
id: workgroup && workgroup.id ? workgroup.id : '',
name: workgroup && workgroup.name ? workgroup.name : '',
description: workgroup && workgroup.description ? workgroup.description : '',
createdAt: workgroup && workgroup.createdAt ? workgroup.createdAt : null,
closedAt: workgroup && workgroup.closedAt ? workgroup.closedAt : null,
}
@ -34,6 +35,7 @@ export function InfoForm({ workgroup, onChange }: InfoFormProps) {
workgroup: {
id: workgroup && workgroup.id ? workgroup.id : '',
name: workgroup && workgroup.name ? workgroup.name : '',
description: workgroup && workgroup.description ? workgroup.description : '',
createdAt: workgroup && workgroup.createdAt ? workgroup.createdAt : null,
closedAt: workgroup && workgroup.closedAt ? workgroup.closedAt : null,
}
@ -76,6 +78,14 @@ export function InfoForm({ workgroup, onChange }: InfoFormProps) {
onChange={onWorkgroupAttrChange.bind(null, "name")} />
</div>
</div>
<div className="field">
<label className="label">Nom du groupe</label>
<div className="control">
<textarea className="input" value={state.workgroup.description}
disabled={!isAuthorized}
onChange={onWorkgroupAttrChange.bind(null, "description")}></textarea>
</div>
</div>
{
state.workgroup.createdAt ?
<div className="field">

View File

@ -7,6 +7,7 @@ mutation updateWorkgroup($workgroupId: ID!, $changes: WorkgroupChanges!) {
updateWorkgroup(workgroupId: $workgroupId, changes: $changes) {
id,
name,
description,
createdAt,
closedAt,
members {
@ -26,6 +27,7 @@ mutation createWorkgroup($changes: WorkgroupChanges!) {
createWorkgroup(changes: $changes) {
id,
name,
description,
createdAt,
closedAt,
members {
@ -47,6 +49,7 @@ mutation joinWorkgroup($workgroupId: ID!) {
joinWorkgroup(workgroupId: $workgroupId) {
id,
name,
description,
createdAt,
closedAt,
members {
@ -78,6 +81,7 @@ mutation leaveWorkgroup($workgroupId: ID!) {
leaveWorkgroup(workgroupId: $workgroupId) {
id,
name,
description,
createdAt,
closedAt,
members {
@ -117,6 +121,7 @@ mutation closeWorkgroup($workgroupId: ID!) {
closeWorkgroup(workgroupId: $workgroupId) {
id,
name,
description,
createdAt,
closedAt,
members {

View File

@ -7,6 +7,7 @@ export const QUERY_WORKGROUP = gql`
workgroups(filter: $filter) {
id,
name,
description,
createdAt,
closedAt,
members {

View File

@ -2,6 +2,7 @@ import { User } from "./user";
export interface Workgroup {
id: string
name: string
description: string
createdAt: Date
closedAt: Date
members: User[]

View File

@ -79,8 +79,9 @@ func getServiceContainer(ctx context.Context, conf *config.Config) (*service.Con
// Define default cookie options
sessionStore.SessionOpts.Path = "/"
sessionStore.SessionOpts.HttpOnly = true
sessionStore.SessionOpts.Secure = conf.HTTP.CookieSecure
sessionStore.SessionOpts.MaxAge = conf.HTTP.CookieMaxAge
sessionStore.SessionOpts.SameSite = http.SameSiteStrictMode
sessionStore.SessionOpts.SameSite = http.SameSiteLaxMode
ctn.Provide(
session.ServiceName,

View File

@ -27,7 +27,8 @@ func applyMigration(ctx context.Context, ctn *service.Container) error {
// Register available migrations
migr.Register(
m000initialSchema(),
m000InitialSchema(),
m001WorkgroupDescription(),
)
currentVersion, err := migr.CurrentVersion(ctx)
@ -84,7 +85,7 @@ var initialModels = []interface{}{
&model.Event{},
}
func m000initialSchema() orm.Migration {
func m000InitialSchema() orm.Migration {
return orm.NewDBMigration(
"00_initial_schema",
func(ctx context.Context, tx *gorm.DB) error {
@ -107,3 +108,23 @@ func m000initialSchema() orm.Migration {
},
)
}
func m001WorkgroupDescription() orm.Migration {
return orm.NewDBMigration(
"01_workgroup_description",
func(ctx context.Context, tx *gorm.DB) error {
if err := tx.AutoMigrate(&model.Workgroup{}).Error; err != nil {
return errors.WithStack(err)
}
return nil
},
func(ctx context.Context, tx *gorm.DB) error {
if err := tx.Model(&model.Workgroup{}).DropColumn("description").Error; err != nil {
return errors.WithStack(err)
}
return nil
},
)
}

1
debian/compat vendored
View File

@ -1 +0,0 @@
9

14
debian/control vendored
View File

@ -1,14 +0,0 @@
Source: daddy
Section: unknown
Priority: optional
Maintainer: Cadoles <contact@cadoles.com>
Build-Depends: debhelper (>= 8.0.0), wget, ca-certificates, tar
Standards-Version: 3.9.4
Homepage: http://forge.cadoles.com/Cadoles/daddy
Vcs-Git: http://forge.cadoles.com/Cadoles/daddy.git
Vcs-Browser: http://forge.cadoles.com/Cadoles/daddy
Package: daddy
Architecture: amd64
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: Daddy app

1
debian/daddy.links vendored
View File

@ -1 +0,0 @@
/etc/daddy/client-config.js /usr/share/daddy/public/config.js

11
debian/daddy.service vendored
View File

@ -1,11 +0,0 @@
[Unit]
Description=Daddy app
After=network-online.target
[Service]
Type=simple
ExecStart=/usr/bin/daddy -workdir /usr/share/daddy -config /etc/daddy/config.yml
Restart=on-failure
[Install]
WantedBy=multi-user.target

56
debian/rules vendored
View File

@ -1,56 +0,0 @@
#!/usr/bin/make -f
# -*- makefile -*-
# Uncomment this to turn on verbose mode.
export DH_VERBOSE=1
GO_VERSION := 1.13.5
OS := linux
ARCH := amd64
GOPATH=$(HOME)/go
ifeq (, $(shell which go 2>/dev/null))
override_dh_auto_build: install-go
override_dh_auto_clean: install-go
endif
ifeq (, $(shell which node 2>/dev/null))
override_dh_auto_build: install-nodejs
endif
%:
dh $@ --with systemd
override_dh_auto_build: $(GOPATH)
GOPATH=$(GOPATH) PATH="$(PATH):/usr/local/go/bin:$(GOPATH)/bin" make deps
GOPATH=$(GOPATH) PATH="$(PATH):/usr/local/go/bin:$(GOPATH)/bin" ARCH_TARGETS=$(ARCH) make release
$(GOPATH):
mkdir -p $(GOPATH)
install-go:
wget -nc https://dl.google.com/go/go$(GO_VERSION).$(OS)-$(ARCH).tar.gz
tar -C /usr/local -xzf go$(GO_VERSION).$(OS)-$(ARCH).tar.gz
install-nodejs:
wget -O- https://deb.nodesource.com/setup_12.x | bash -
apt-get install -y nodejs
override_dh_auto_install:
mkdir -p debian/daddy/usr/share/daddy
mkdir -p debian/daddy/etc/daddy
mkdir -p debian/daddy/usr/bin
cp -r release/server-$(OS)-$(ARCH)/* debian/daddy/usr/share/daddy/
mv debian/daddy/usr/share/daddy/bin/server debian/daddy/usr/bin/daddy
mv debian/daddy/usr/share/daddy/server.conf debian/daddy/etc/daddy/config.yml
mv debian/daddy/usr/share/daddy/public/config.js debian/daddy/etc/daddy/client-config.js
install -d debian/daddy
override_dh_strip:
override_dh_auto_test:

View File

@ -1 +0,0 @@
3.0 (native)

2
go.mod
View File

@ -3,7 +3,7 @@ module forge.cadoles.com/Cadoles/daddy
go 1.14
require (
forge.cadoles.com/wpetit/goweb-oidc v0.0.0-20201013111944-d43b43b636ed
forge.cadoles.com/wpetit/goweb-oidc v0.0.0-20201013125038-8d8d1519a52d
forge.cadoles.com/wpetit/hydra-passwordless v0.0.0-20200908094025-38ac4422dddc // indirect
github.com/99designs/gqlgen v0.11.3
github.com/alecthomas/chroma v0.8.1 // indirect

2
go.sum
View File

@ -41,6 +41,8 @@ forge.cadoles.com/wpetit/goweb-oidc v0.0.0-20201013085949-5d5592098f13 h1:gZCo9p
forge.cadoles.com/wpetit/goweb-oidc v0.0.0-20201013085949-5d5592098f13/go.mod h1:phGAWHUGKNZj044478BvRg0jk049uK1IiX2Amh8krAk=
forge.cadoles.com/wpetit/goweb-oidc v0.0.0-20201013111944-d43b43b636ed h1:7dTCXOGxvAulu9vnOjpt2cTgsuxMHX4FH795/JJgo08=
forge.cadoles.com/wpetit/goweb-oidc v0.0.0-20201013111944-d43b43b636ed/go.mod h1:phGAWHUGKNZj044478BvRg0jk049uK1IiX2Amh8krAk=
forge.cadoles.com/wpetit/goweb-oidc v0.0.0-20201013125038-8d8d1519a52d h1:o+Ppy/MyT5UgbtUYI2J1YqS3iuThxOuNFenYoPgKZKk=
forge.cadoles.com/wpetit/goweb-oidc v0.0.0-20201013125038-8d8d1519a52d/go.mod h1:phGAWHUGKNZj044478BvRg0jk049uK1IiX2Amh8krAk=
forge.cadoles.com/wpetit/hydra-passwordless v0.0.0-20200908094025-38ac4422dddc h1:9gc/1qizPtK6/iMVlizknWUFii75ntl2xSUV/FSC92Y=
forge.cadoles.com/wpetit/hydra-passwordless v0.0.0-20200908094025-38ac4422dddc/go.mod h1:nANHORi270d5jDXjeJ7B3pMgK9R4J0/17p1IIc+rhOk=
github.com/99designs/gqlgen v0.11.3 h1:oFSxl1DFS9X///uHV3y6CEfpcXWrDUxVblR4Xib2bs4=

View File

@ -47,6 +47,7 @@ type HTTPConfig struct {
CookieAuthenticationKey string `yaml:"cookieAuthenticationKey" env:"HTTP_COOKIE_AUTHENTICATION_KEY"`
CookieEncryptionKey string `yaml:"cookieEncryptionKey" env:"HTTP_COOKIE_ENCRYPTION_KEY"`
CookieMaxAge int `yaml:"cookieMaxAge" env:"HTTP_COOKIE_MAX_AGE"`
CookieSecure bool `yaml:"cookieSecure" env:"HTTP_COOKIE_SECURE"`
TemplateDir string `yaml:"templateDir" env:"HTTP_TEMPLATE_DIR"`
PublicDir string `yaml:"publicDir" env:"HTTP_PUBLIC_DIR"`
FrontendURL string `yaml:"frontendURL" env:"HTTP_FRONTEND_URL"`

View File

@ -10,9 +10,10 @@ const ObjectTypeWorkgroup = "workgroup"
type Workgroup struct {
gorm.Model
Name *string `json:"name"`
ClosedAt time.Time `json:"closedAt"`
Members []*User `gorm:"many2many:users_workgroups;association_autoupdate:false"`
Name *string `json:"name"`
Workgroup *string `json:"workgroup"`
ClosedAt time.Time `json:"closedAt"`
Members []*User `gorm:"many2many:users_workgroups;association_autoupdate:false"`
}
func (w *Workgroup) ObjectID() uint {

View File

@ -68,9 +68,8 @@ func handleLoginCallback(w http.ResponseWriter, r *http.Request) {
db := orm.Must(ctn).DB()
repo := model.NewUserRepository(db)
user, err := repo.CreateOrConnectUser(ctx, claims.Email)
if err != nil {
panic(errors.Wrap(err, "could not upsert user"))
user := &model.User{
Email: claims.Email,
}
authorized, err := auth.Authorize(user)
@ -85,6 +84,11 @@ func handleLoginCallback(w http.ResponseWriter, r *http.Request) {
return
}
user, err = repo.CreateOrConnectUser(ctx, claims.Email)
if err != nil {
panic(errors.Wrap(err, "could not upsert user"))
}
if err := session.SaveUserEmail(w, r, claims.Email); err != nil {
panic(errors.WithStack(err))
}

View File

@ -1,15 +0,0 @@
server {
listen 80 default_server;
server_name daddy.local;
root /usr/share/daddy/client/public;
index index.html;
location / {
try_files $uri /index.html =404;
}
location /api/v1/graphql {
proxy_pass http://127.0.0.1:8080/api/v1/graphql;
}
}

View File

@ -1 +0,0 @@
GO_ENV=prod