profile
viewpoint

odysseyscience/react-s3-uploader 705

React component that renders an <input type="file"/> and automatically uploads to an S3 bucket

seanadkinson/react-pdx-react-router 4

Code used for react-router presentation at React PDX on Feb 10, 2015

seanadkinson/react-chartjs 3

common react charting components using chart.js

seanadkinson/Ektorp 1

Java API for CouchDB

seanadkinson/ektorplucene 1

Addon for Ektorp (ekorp.org) that enables searching couchdb with couchdb-lucene

seanadkinson/less.js 1

Leaner CSS, in your browser.

seanadkinson/pdxjs-webpack-examples 1

Examples used when speaking at PDX JS on Wednesday, September 24th, 2014.

seanadkinson/swagger-ui 1

Swagger UI is a dependency-free collection of HTML, Javascript, and CSS assets that dynamically generate beautiful documentation from a Swagger-compliant API.

seanadkinson/beeswithmachineguns 0

A utility for arming (creating) many bees (micro EC2 instances) to attack (load test) targets (web applications).

PullRequestReviewEvent

Pull request review commentstreem/streem-sdk-ios

iOS SDK 0.14.0

 Once you've retrieved this 9-digit code in your app you will follow two steps.             companyLogoURL: details.company.logoUrl         ) -        Streem.sharedInstance.startRemoteStreem(+            (

Not needed?

dgoldman-pdx

comment created time in 18 days

PullRequestReviewEvent
PullRequestReviewEvent

push eventstreem/react-native-select-contact

Gavin Brown

commit sha 4f0c93582d6353dd815c74dacac94d53485de2c1

Create react-native-select-contact.podspec

view details

seanadkinson

commit sha 3d58bd3a625b0d9cb0f7ddc56a5afec626651b4e

Merge pull request #33 from geebrown43/patch-1 Create react-native-select-contact.podspec

view details

push time in a month

PR merged streem/react-native-select-contact

Create react-native-select-contact.podspec

Add podspec to project auto-linking purposes

+19 -0

1 comment

1 changed file

geebrown43

pr closed time in a month

pull request commentstreem/react-native-select-contact

Create react-native-select-contact.podspec

Thanks!

geebrown43

comment created time in a month

PullRequestReviewEvent
PullRequestReviewEvent

push eventstreem/streem-sdk-ruby

Sean Adkinson

commit sha 9c91e2611b205ab532d2ec5a1acfa668b178953f

Note on expiration dates

view details

push time in 2 months

push eventstreem/streem-sdk-ruby

Sean Adkinson

commit sha 45a69c9337cf19e2fc3e955ce00af6cd0f7c2600

Updated readme

view details

push time in 2 months

push eventstreem/streem-sdk-ruby

Sean Adkinson

commit sha 24edd48b48e89fc272d9a0a1bb2f2997c4e90cbb

Initial readme

view details

push time in 2 months

create barnchstreem/streem-sdk-ruby

branch : master

created branch time in 2 months

created repositorystreem/streem-sdk-ruby

Documentation and Issue tracking for the Streem SDK for Ruby

created time in 2 months

startedw3c/webrtc-insertable-streams

started time in 2 months

Pull request review commentckolbeck/kotlin-tag-server

All-in-one

+package dev.cbeck.tags++import com.fasterxml.jackson.module.kotlin.KotlinModule+import com.google.inject.Guice+import com.google.inject.Stage+import dev.cbeck.tags.http.PBSerDeModule+import dev.cbeck.tags.http.TagResource+import io.dropwizard.Application+import io.dropwizard.jdbi3.JdbiFactory+import io.dropwizard.setup.Bootstrap+import io.dropwizard.setup.Environment+import java.lang.RuntimeException++class TagServer : Application<TagConfiguration>() {+    override fun initialize(bootstrap: Bootstrap<TagConfiguration>?) {+        bootstrap?.objectMapper?.registerModule(KotlinModule())+        bootstrap?.objectMapper?.registerModule(PBSerDeModule())+    }++    override fun getName(): String {+        return "tag-server"+    }

Since you asked for kotlin tips in your message, this could just be:

override fun getName() = "tag-server"
ckolbeck-streem

comment created time in 2 months

Pull request review commentckolbeck/kotlin-tag-server

All-in-one

+package dev.cbeck.tags++import com.fasterxml.jackson.module.kotlin.KotlinModule+import com.google.inject.Guice+import com.google.inject.Stage+import dev.cbeck.tags.http.PBSerDeModule+import dev.cbeck.tags.http.TagResource+import io.dropwizard.Application+import io.dropwizard.jdbi3.JdbiFactory+import io.dropwizard.setup.Bootstrap+import io.dropwizard.setup.Environment+import java.lang.RuntimeException++class TagServer : Application<TagConfiguration>() {+    override fun initialize(bootstrap: Bootstrap<TagConfiguration>?) {

When kotlin generates stubs for non-kotlin classes, they assume everything is optional (which seems reasonable), but if you know its not, you can remove the ?. In this case, and down in run() on line 24, drop the optionals

ckolbeck-streem

comment created time in 2 months

issue openedFusionAuth/fusionauth-issues

Kickstart error part way through - SocketTimeoutException: Read timed out

Kickstart error part way through - SocketTimeoutException: Read timed out

Description

We had an error occur in the middle of a kickstart run in one of our environments. It was a SocketTimeoutException. The first request to create the API Key was successful, but not the second to create the admin user (actually the request was completed successfully, but kickstart didnt know that and errored out).

Possibly need a longer timeout, or at least a way to make it configurable for kickstart.

Since the API Key created successfully, additional restarts couldn't complete the rest of the kickstarts. We had to delete the DB and restart.

Affects versions

Docker on ECS, app version 1.18.3

Steps to reproduce

Kickstart file:

{
    "variables": {
        "apiKey": "#{ENV.FUSIONAUTH_API_KEY}",
        "defaultThemeId": "75a068fd-e94b-451a-9aeb-3ddb9a3b5987",
        "issuer": "#{ENV.FUSIONAUTH_ISSUER}",
        "streemTenantId": "#{ENV.FUSIONAUTH_STREEM_TENANT_ID}",
        "streemThemeId": "#{ENV.FUSIONAUTH_STREEM_THEME_ID}",
        "adminEmail": "#{ENV.FUSIONAUTH_ADMIN_EMAIL}",
        "adminPassword": "#{ENV.FUSIONAUTH_ADMIN_PASSWORD}",
        "emailFromAddress": "#{ENV.FUSIONAUTH_EMAIL_FROM_ADDRESS}",
        "emailFromName": "#{ENV.FUSIONAUTH_EMAIL_FROM_NAME}",
        "emailHost": "#{ENV.FUSIONAUTH_EMAIL_HOST}",
        "emailUsername": "#{ENV.FUSIONAUTH_EMAIL_USERNAME}",
        "emailPassword": "#{ENV.FUSIONAUTH_EMAIL_PASSWORD}",
        "googleAuthClientId": "#{ENV.GOOGLE_AUTH_CLIENT_ID}",
        "googleAuthClientSecret": "#{ENV.GOOGLE_AUTH_CLIENT_SECRET}"
    },
    "apiKeys": [
        {
            "key": "#{apiKey}"
        }
    ],
    "requests": [
        {
            "method": "POST",
            "url": "/api/user/registration",
            "body": {
                "user": {
                    "email": "#{adminEmail}",
                    "password": "#{adminPassword}"
                },
                "registration": {
                    "applicationId": "#{FUSIONAUTH_APPLICATION_ID}",
                    "roles": ["admin"]
                }
            }
        },
        {
            "method": "PATCH",
            "url": "/api/tenant/#{FUSIONAUTH_TENANT_ID}",
            "body": {
                "tenant": {
                    "issuer": "#{issuer}",
                    "emailConfiguration": {
                        "host": "#{emailHost}",
                        "port": 587,
                        "username": "#{emailUsername}",
                        "password": "#{emailPassword}",
                        "security": "TLS",
                        "defaultFromName": "#{emailFromName}",
                        "defaultFromEmail": "#{emailFromAddress}"
                    }
                }
            }
        },
        {
            "method": "POST",
            "url": "/api/tenant/#{streemTenantId}",
            "body": {
                "sourceTenantId": "#{FUSIONAUTH_TENANT_ID}",
                "tenant": {
                    "name": "streem"
                }
            }
        },
        {
            "method": "POST",
            "url": "/api/theme/#{streemThemeId}",
            "body": {
                "sourceThemeId": "#{defaultThemeId}",
                "theme": {
                    "name": "streem"
                }
            }
        },
        {
            "method": "POST",
            "url": "/api/identity-provider",
            "body": {
                "identityProvider": {
                    "buttonText": "Login with Google",
                    "client_id": "#{googleAuthClientId}",
                    "client_secret": "#{googleAuthClientSecret}",
                    "debug": true,
                    "enabled": true,
                    "scope": "openid profile email",
                    "type": "Google"
                }
            }
        }
    ]
}

Logs:

...
2020-08-10T13:33:34.154-07:00 | Aug 10, 2020 8:33:34.154 PM INFO  io.fusionauth.api.service.system.kickstart.KickstartRunner - Waiting for FusionAuth to complete startup in order to begin kickstart...
-- | --
  | 2020-08-10T13:33:34.260-07:00 | Aug 10, 2020 8:33:34.260 PM INFO com.inversoft.migration.Migrator - Run Cleanup [io.fusionauth.api.migration.guice.Migration_1_13_0]
  | 2020-08-10T13:33:34.843-07:00 | Aug 10, 2020 8:33:34.843 PM INFO com.inversoft.migration.Migrator - Run Once [io.fusionauth.api.migration.guice.Migration_1_15_3]
  | 2020-08-10T13:33:34.849-07:00 | Aug 10, 2020 8:33:34.848 PM INFO com.inversoft.migration.Migrator - Run Cleanup [io.fusionauth.api.migration.guice.Migration_1_15_3]
  | 2020-08-10T13:33:41.163-07:00 | Aug 10, 2020 8:33:41.162 PM ERROR io.fusionauth.api.service.system.kickstart.KickstartRunner - Failed to execute request to [POST][/api/user/registration] Status [-1]
  | 2020-08-10T13:33:41.163-07:00 | Request body:
  | 2020-08-10T13:33:41.163-07:00 | {
  | 2020-08-10T13:33:41.163-07:00 | "registration" : {
  | 2020-08-10T13:33:41.163-07:00 | "applicationId" : "3c219e58-ed0e-4b18-ad48-f4f92793ae32",
  | 2020-08-10T13:33:41.163-07:00 | "roles" : [ "admin" ]
  | 2020-08-10T13:33:41.163-07:00 | },
  | 2020-08-10T13:33:41.163-07:00 | "user" : {
  | 2020-08-10T13:33:41.163-07:00 | "email" : "...",
  | 2020-08-10T13:33:41.163-07:00 | "password" : "..."
  | 2020-08-10T13:33:41.163-07:00 | }
  | 2020-08-10T13:33:41.163-07:00 | }
  | 2020-08-10T13:33:41.243-07:00 | Aug 10, 2020 8:33:41.242 PM ERROR io.fusionauth.api.service.system.kickstart.KickstartRunner - Exception returned
  | 2020-08-10T13:33:41.243-07:00 | java.net.SocketTimeoutException: Read timed out
  | 2020-08-10T13:33:41.243-07:00 | at java.base/sun.nio.ch.NioSocketImpl.timedRead(NioSocketImpl.java:283)
  | 2020-08-10T13:33:41.243-07:00 | at java.base/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:309)
  | 2020-08-10T13:33:41.243-07:00 | at java.base/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:350)
  | 2020-08-10T13:33:41.243-07:00 | at java.base/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:803)
  | 2020-08-10T13:33:41.243-07:00 | at java.base/java.net.Socket$SocketInputStream.read(Socket.java:982)
  | 2020-08-10T13:33:41.243-07:00 | at java.base/java.io.BufferedInputStream.fill(BufferedInputStream.java:244)
  | 2020-08-10T13:33:41.243-07:00 | at java.base/java.io.BufferedInputStream.read1(BufferedInputStream.java:284)
  | 2020-08-10T13:33:41.243-07:00 | at java.base/java.io.BufferedInputStream.read(BufferedInputStream.java:343)
  | 2020-08-10T13:33:41.243-07:00 | at java.base/sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:754)
  | 2020-08-10T13:33:41.243-07:00 | at java.base/sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:689)
  | 2020-08-10T13:33:41.243-07:00 | at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1618)
  | 2020-08-10T13:33:41.243-07:00 | at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1523)
  | 2020-08-10T13:33:41.243-07:00 | at java.base/java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:527)
  | 2020-08-10T13:33:41.243-07:00 | at com.inversoft.rest.RESTClient.go(RESTClient.java:218)
  | 2020-08-10T13:33:41.243-07:00 | at io.fusionauth.api.service.system.kickstart.KickstartRunner.run(KickstartRunner.java:115)
  | 2020-08-10T13:33:41.243-07:00 | at java.base/java.lang.Thread.run(Thread.java:832)
...

Expected behavior

Kickstart completes successfully if possible.

Screenshots

N/A

Platform

  • Device: Server on AWS ECS
  • OS: Docker
  • Browser + version: N/A
  • Database PostgresSQL 10, using DB search, not elasticsearch

Additional context

This was running in ECS as a container configured with 1gb memory, 1/2 cpu. I realized I didn't set FUSIONAUTH_MEMORY, so FA didn't know about the additional memory available.

created time in 2 months

delete branch streem/streem-www

delete branch : misc/ga-tags

delete time in 3 months

push eventstreem/streem-www

Sean Adkinson

commit sha e2c55aad331cb53f7396ffae8c6a4f1763f3c5cb

Add some gtags

view details

seanadkinson

commit sha e793c07d32f7f1a9848e7b01e29910789fcd12b7

Merge pull request #16 from streem/misc/ga-tags Add some gtags

view details

push time in 3 months

PR merged streem/streem-www

Add some gtags
+100 -43

0 comment

3 changed files

seanadkinson

pr closed time in 3 months

Pull request review commentstreem/pbandk

Improve JSON support; move most ser/deser from generated code into runtime library

+package pbandk.internal.binary++import pbandk.*+import pbandk.protobufjs.Writer+import pbandk.protobufjs.protobufjsLong++private fun Writer.writeValueNoTag(type: FieldDescriptor.Type, value: Any) {

Yes, sorry, I understand the different between the JSON and the Binary - bad example specifying JsonValueMarshaller in my comment.

The point I was trying to make was that it seemed like there was a lot of duplicate work being done in this jsMain module, that is already done in commonMain, but looking closer, this probably isn't the case. I guess I just saw enough when statements that rolled through each type, either reading or writing the value, and I thought we wouldn't need to do that outside of commonMain. But if I understand correctly, this code is just providing the javascript bindings of doing the actual reading/writing, and code up in commonMain is using this marshaller for doing the work in javascript. Is my understanding correct?

garyp

comment created time in 3 months

PR opened streem/streem-www

Add some gtags
+100 -43

0 comment

3 changed files

pr created time in 3 months

create barnchstreem/streem-www

branch : misc/ga-tags

created branch time in 3 months

Pull request review commentstreem/pbandk

Improve JSON support; move most ser/deser from generated code into runtime library

+package pbandk.internal.binary++import pbandk.*+import pbandk.protobufjs.Writer+import pbandk.protobufjs.protobufjsLong++private fun Writer.writeValueNoTag(type: FieldDescriptor.Type, value: Any) {

Is this code unable to use the JsonValueMarshaller and related classes from commonMain? I guess I'm unclear about the relation of this class (and CodedStreamBinaryWireMarshaller below) to the ones in commonMain.

garyp

comment created time in 3 months

Pull request review commentstreem/pbandk

Improve JSON support; move most ser/deser from generated code into runtime library

+package pbandk.internal.json++import kotlinx.serialization.json.*+import pbandk.*+import pbandk.json.JsonConfig+import pbandk.wkt.*+import kotlin.Any+import kotlin.reflect.KProperty1++internal class JsonMessageMarshaller(private val jsonConfig: JsonConfig) : MessageMarshaller {+    private val json = Json(+        JsonConfiguration.Stable.copy(+            prettyPrint = true+        )+    )+    private val jsonValueMarshaller = JsonValueMarshaller(jsonConfig)+    private var currentMessage: JsonElement? = null++    fun toJsonString(): String = currentMessage?.let { json.stringify(JsonElementSerializer, it) }.orEmpty()++    internal fun toJsonElement(): JsonElement =+        currentMessage ?: error("Must call writeMessage() before toJsonElement()")++    override fun <T : Message> writeMessage(message: T) {+        check(currentMessage == null) { "JsonWireMarshaller can't be reused with multiple messages" }+        currentMessage = when (message) {+            // Wrapper types use the same JSON representation as the wrapped value+            // https://developers.google.com/protocol-buffers/docs/proto3#json+            is DoubleValue -> writeWrapperValue(message, message.value)+            is FloatValue -> writeWrapperValue(message, message.value)+            is Int64Value -> writeWrapperValue(message, message.value)+            is UInt64Value -> writeWrapperValue(message, message.value)+            is Int32Value -> writeWrapperValue(message, message.value)+            is UInt32Value -> writeWrapperValue(message, message.value)+            is BoolValue -> writeWrapperValue(message, message.value)+            is StringValue -> writeWrapperValue(message, message.value)+            is BytesValue -> writeWrapperValue(message, message.value)+            // Other well-known types with special JSON encoding+            is Timestamp -> jsonValueMarshaller.writeString(Util.timestampToString(message))+            // All other message types+            else -> writeMessageObject(message)+        }+    }

So simple 🎉

garyp

comment created time in 3 months

Pull request review commentstreem/pbandk

Improve JSON support; move most ser/deser from generated code into runtime library

+package pbandk.internal.binary++import pbandk.*+import pbandk.wkt.*+import kotlin.Any+import kotlin.reflect.KProperty1++internal open class BinaryMessageMarshaller(private val wireMarshaller: BinaryWireMarshaller) : MessageMarshaller {+    override fun <T : Message> writeMessage(message: T) {+        for (fd in message.fieldDescriptors) {+            @Suppress("UNCHECKED_CAST")+            val value = (fd.value as KProperty1<T, *>).get(message)++            if (!fd.type.hasPresence && fd.type.isDefaultValue(value)) {+                continue+            }++            value?.let { writeFieldValue(fd.number, fd.type, it) }+        }++        for (field in message.unknownFields.values) {+            writeUnknownFieldValue(field.fieldNum, field.value)+        }+    }++    private fun writeFieldValue(fieldNum: Int, type: FieldDescriptor.Type, value: Any) {+        when (type) {+            is FieldDescriptor.Type.Primitive<*> -> wireMarshaller.writePrimitiveValue(fieldNum, type, value)++            is FieldDescriptor.Type.Message<*> -> when (type.messageCompanion) {+                DoubleValue.Companion -> writeWrapperValue(fieldNum, type, value as Double, Sizer::doubleSize)+                FloatValue.Companion -> writeWrapperValue(fieldNum, type, value as Float, Sizer::floatSize)+                Int64Value.Companion -> writeWrapperValue(fieldNum, type, value as Long, Sizer::int64Size)+                UInt64Value.Companion -> writeWrapperValue(fieldNum, type, value as Long, Sizer::uInt64Size)+                Int32Value.Companion -> writeWrapperValue(fieldNum, type, value as Int, Sizer::int32Size)+                UInt32Value.Companion -> writeWrapperValue(fieldNum, type, value as Int, Sizer::uInt32Size)+                BoolValue.Companion -> writeWrapperValue(fieldNum, type, value as Boolean, Sizer::boolSize)+                StringValue.Companion -> writeWrapperValue(fieldNum, type, value as String, Sizer::stringSize)+                BytesValue.Companion -> writeWrapperValue(fieldNum, type, value as ByteArr, Sizer::bytesSize)+                else -> writeMessageValue(fieldNum, value as Message)+            }+            is FieldDescriptor.Type.Enum<*> -> wireMarshaller.writeEnum(fieldNum, value as Message.Enum)++            is FieldDescriptor.Type.Repeated<*> -> writeRepeatedValue(+                fieldNum,+                value as List<*>,+                type.valueType,+                type.packed+            )++            is FieldDescriptor.Type.Map<*, *> -> writeMapValue(fieldNum, value as Map<*, *>, type)+        }+    }++    private fun <T : Any> writeWrapperValue(+        fieldNum: Int,+        type: FieldDescriptor.Type.Message<*>,+        value: T,+        sizeFn: (T) -> Int+    ) {+        val valueType = type.messageCompanion.fieldDescriptors[0].type+        if (valueType.isDefaultValue(value)) {

Theres another default value check up on line 14. Is one of these not needed?

garyp

comment created time in 3 months

Pull request review commentstreem/pbandk

Improve JSON support; move most ser/deser from generated code into runtime library

 open class CodeGenerator(val file: File, val kotlinTypeMappings: Map<String, Str             } else if (field.type == File.Field.Type.MESSAGE) {                 line("${field.kotlinFieldName} = " +                     "${field.kotlinFieldName}?.plus(plus.${field.kotlinFieldName}) ?: plus.${field.kotlinFieldName},")-            } else if (file.version == 2 && field.optional) {+            } else if (field.hasPresence) {

hasPresence means that its optional?

garyp

comment created time in 3 months

issue openedFusionAuth/fusionauth-issues

Kickstart Email Template doesn't allow usage of tenant fields

Kickstart Email Template doesn't allow usage of tenant fields

Description

When using Kickstart to create a Forgot Password email template, I'd like to use the tenant.issuer variable, but I get the following error:

fusionauth_1   | Jul 23, 2020 8:50:21.926 AM ERROR io.fusionauth.api.service.system.kickstart.KickstartRunner - Failed to execute request to [POST][/api/email/template/0502df1e-4010-4b43-b571-d423fce978b2] Status [400]
fusionauth_1   | Request body:
fusionauth_1   | {
fusionauth_1   |   "emailTemplate" : {
fusionauth_1   |     "defaultHtmlTemplate" : "To change your password click on the following link.\n<p>\n  <a href=\"https://${tenant.issuer!''}/password/change/${changePasswordId}?tenantId=${user.tenantId}\">\n    https://${tenant.issuer!''}/password/change/${changePasswordId}?tenantId=${user.tenantId}\n  </a>\n</p>\n- FusionAuth Admin\n",
fusionauth_1   |     "defaultSubject" : "Reset your password",
fusionauth_1   |     "defaultTextTemplate" : "To change your password click on the following link.\n\nhttps://${tenant.issuer!''}/password/change/${changePasswordId}?tenantId=${user.tenantId}\n\n- FusionAuth Admin\n",
fusionauth_1   |     "name" : "Forgot Password"
fusionauth_1   |   }
fusionauth_1   | }

Documentation shows tenant with "AVAILABLE SINCE 1.18.2", so it should be accessible.

Affects versions

I'm using FusionAuth version 1.18.2, and have not tried earlier versions.

Steps to reproduce

  1. Create a kickstarter file that utilizes an Email Template for a Forgot Password email
  2. Use the tenant.issuer field in the template
  3. Start FusionAuth
  4. See error

Expected behavior

Allow the tenant.issuer field to be used, since it's documented here

Platform

Running via docker on a Macbook Pro, Postrgres database

created time in 3 months

more